栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

ELK的原理与架构

ELK的原理与架构

  • 一、概述
  • 二、优点
  • 三、Elasticsearch
  • 四、Logstash
  • 五、kibana
  • 六、搭建
    • 1、环境搭建
    • 2、搭建时间同步:
      • 2.1、主服务器设置
      • 2.2、从服务器设置
    • 3、安装
      • 3.1、安装包elasticsearch-5.5.0.rpm
      • 3.2、安装Elasticsearch-head插件
        • 1、安装node
        • 2、安装phantomjs
        • 3、安装elasticsearch-head
        • 4、启动服务器
    • 4、ELK Logstash 部署(在web节点上操作)
      • 4.1、logstash(Apache)与elasticsearch(node)功能是否正常,做对接测试
      • 4.2、使用rubydebug显示详细输出,codec为一种编解码器
      • 4.3、使用logstash将信息写入elasticsearch中 输入 输出 对接
      • 4.4、logstash配置文件
      • 4.5、对接Apache主机的Apache 日志文件(访问的、错误的)

一、概述

通俗来讲,ELK是由Elasticsearch(日志存储和搜索)、Logstash(日志收集)、Kibana(查看日志)三个开源软件的组成的一个组合体,ELK是elastic公司研发的一套完整的日志收集、分析和展示的企业级解决方案,在这三个软件当中,每个软件用于完成不同的功能,ELK又称为ELKstack。
ELK 组件在海量日志系统的运维中,可用于解决以下主要问题:- 分布式日志数据统一收集,实现集中式查询和管理

  1. 故障排查
  2. 安全信息和事件管理
  3. 报表功能
二、优点
  1. 处理方式灵活:elasticsearch是实时全文索引,具有强大的搜索功能 (支持任意key全文搜索)
  2. 配置相对简单:elasticsearch的API全部使用JSON接口,logstash使用模块配置,kibana的配置文件部分更简单。
  3. 检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。
  4. 集群线性扩展:elasticsearch和logstash都可以灵活线性扩展,节点读写出现瓶颈可以扩容(3 5 7 11个服务器)
  5. 前端操作绚丽:kibana的前端设计比较绚丽,而且操作简单(早期比较简单)
三、Elasticsearch

一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索、支持分布式可实现高可用、提供API接口,可以处理大规模日志数据,比如Nginx、Tomcat、系统日志等功能。
Elasticsearch使用Java语言开发,是建立在全文搜索引擎ApacheLucene基础之上的搜索引擎,
Elasticsearch的特点:

  1. 实时搜索、实时分析
  2. 分布式架构、实时文件存储
  3. 文档导向,所有对象都是文档
  4. 高可用,易扩展,支持集群,分片与复制
  5. 接口友好,支持json
四、Logstash

Logstash 是一个具有实时传输能力的数据收集引擎,其可以通过插件实现日志收集和转发,支持日志过滤,支持普通 log、自定义 json 格式的日志解析,最终把经过处理的日志发送给 elasticsearch。

五、kibana

Kibana 为 elasticsearch 提供一个查看数据的 web 界面,其主要是通过elasticsearch 的 API 接口进行数据查找,并进行前端数据可视化的展现,另外还可以针对特定格式的数据生成相应的表格、柱状图、饼图等。

六、搭建 1、环境搭建

192.168.133.50 host1
192.168.133.100 host2
192.168.133.50 web

systemctl stop firewalld
setenforce 0
hostname host1                                                  host1上执行
su
hostname host2                                                  host2上执行
su
hostname web                                                    web上执行
su
echo "192.168.133.50 host1
192.168.133.100 host2
192.168.133.75 web">> /etc/hosts


2、搭建时间同步: 2.1、主服务器设置
[root@host1 ~]# yum install ntp -y
[root@host1 ~]# vim /etc/ntp.conf


改成

[root@host1 ~]# service ntpd start
Redirecting to /bin/systemctl start ntpd.service
2.2、从服务器设置

[root@host2 ~]# yum install ntpdate -y
[root@host2 ~]# service ntpd start
Redirecting to /bin/systemctl start ntpd.service
[root@host2 ~]# /usr/sbin/ntpdate 192.168.133.75
16 Dec 11:40:08 ntpdate[42044]: the NTP socket is in use, exiting
[root@localhost mysql]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab

[root@host2 ~]# crontab -l
*/10 * * * * /usr/sbin/ntpdata 192.168.133.75
3、安装

host1和host2上操作,只展示host1上的操作

3.1、安装包elasticsearch-5.5.0.rpm
[root@host1 ~]# cd /opt

rpm -ivh elasticsearch-5.5.0.rpm

[root@host1 opt]# cd /etc/elasticsearch/
[root@host1 elasticsearch]# cp elasticsearch.yml{,.bak}
[root@host1 elasticsearch]# vim elasticsearch.yml
 17 #cluster.name: my-application                                  开启并修改集群名字
 改
 17 cluster.name: zy-elk
23 #node.name: node-1                                         开启并改成主机名两台机器分别改
改
23 node.name:host1                                               host1上改
23 node.name:host2                                               host2上改
33 #path.data: /path/to/data                               开启设置数据目录需要新建并给权限
改
33 path.data: /data/elk_data
37 #path.logs: /path/to/logs                                  开启并修改日志文件路径
改
37 path.logs: /var/log/elasticsearch/
43 #bootstrap.memory_lock: true                               内存锁取消
改
43 bootstrap.memory_lock: false
55 #network.host: 192.168.0.1                                  开启并更改监听端口
改
55 network.host: 0.0.0.0
59 #http.port: 9200                                              开启端口
改
59 http.port: 9200
68 #discovery.zen.ping.unicast.hosts: ["host1", "host2"]           自动集群发现,加入主机名
改
68 discovery.zen.ping.unicast.hosts: ["host1", "host2"]


[root@host1 elasticsearch]# mkdir -p /data/elk_data
[root@host1 elasticsearch]# chown -R elasticsearch.elasticsearch /data/elk_data/
[root@host1 elasticsearch]# systemctl enable --now elasticsearch.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
[root@host1 elasticsearch]# netstat -ntap|grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      39393/java 

这时可以在客户机上打开http://192.168.133.50:9200

客户机上打开http://192.168.133.100:9200

http://192.168.133.50:9200/_cluster/health?pretty
这里可显示状态为正常

3.2、安装Elasticsearch-head插件

Elasticsearch在5.0 版本后,Elasticsearch-head插件需要作为独立服务进行安装,需要使用npm.工具(Wodeas的包管理T具)安装。安装 Elasticsearch-head 需要提前安装好依赖软件node 和 phantomjs。
node:是一个基于 Chrome v8引擎的 Javascript运行环境。
phantomjs:是一个基于websit 的JavascriptAPI,可以理解为一个隐形的浏览器,任何基于webkit浏览器做的事情,它都可以做到。

1、安装node
[root@host1 elasticsearch]# yum install gcc gcc-c++ make -y
[root@host1 opt]# ls

[root@host1 opt]# tar xf node-v8.2.1.tar.gz
[root@host1 opt]# cd node-v8.2.1/
[root@host1 node-v8.2.1]# ./configure
[root@host1 node-v8.2.1]# make && make install
2、安装phantomjs

[root@host1 opt]# tar xf phantomjs-2.1.1-linux-x86_64.tar.bz2  -C /usr/local/src/  解压到指定目录
[root@host1 opt]# cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/           进入目录
[root@host1 phantomjs-2.1.1-linux-x86_64]# ln -s /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/* /usr/local/bin/
3、安装elasticsearch-head

[root@host1 opt]# tar zxvf elasticsearch-head.tar.gz  -C /usr/local/src/
[root@host1 opt]# cd /usr/local/src/elasticsearch-head/
[root@host1 ~]# vi /etc/elasticsearch/elasticsearch.yml                      末尾增加2行

http.cors.enabled: true
#开启跨域访问支持,默认是false
http.cors.allow-origin: "*"
#指定跨域访问允许的域名地址为所有
[root@host1 elasticsearch-head]# systemctl restart elasticsearch
[root@host1 ~]# systemctl status elasticsearch

4、启动服务器
[root@host1 elasticsearch-head]# cd /usr/local/src/elasticsearch-head/
[root@host1 elasticsearch-head]# npm run start &



这时可以去打开192.168.133.50:9100







在host1上创建一个索引索引为index-demo,类型为test,可以看到成功创建

[root@host1 elasticsearch-head]#  curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"ceshi","mesg":"hello elk"}'




点开后可看到详细信息

4、ELK Logstash 部署(在web节点上操作)
[root@web ~]# yum install httpd -y
[root@web ~]# systemctl start httpd
[root@web ~]# cd /opt

[root@web opt]# rpm -ivh logstash-5.5.1.rpm
[root@web opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

4.1、logstash(Apache)与elasticsearch(node)功能是否正常,做对接测试

Logstash这个命令测试
字段描述解释:
● -f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
● -e 后面跟着字符串 该字符串可以被当做logstash的配置(如果是“空”则默认使用stdin做为输入、stdout作为输出)
● -t 测试配置文件是否正确,然后退出

log4j2的jar包是hibernate5框架自带的log4j2,在ssh中即使自己导入了第三方日志包,系统依然会调用log4j2,缺省默认配置文件 log4j2.xml
增加配置文件 log4j2.xml

[root@web opt]# vim log4j2.xml



    
        
            
        
    
    
        
            
        
    

[root@web opt]# ln -s /etc/logstash /usr/share/logstash/config
[root@web opt]# logstash -e 'input { stdin{} } output { stdout{} }'

4.2、使用rubydebug显示详细输出,codec为一种编解码器
[root@web opt]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

4.3、使用logstash将信息写入elasticsearch中 输入 输出 对接
[root@web opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.133.50:9200"] } }'

4.4、logstash配置文件
[root@web opt]# ll /var/log/messages 

[root@web opt]# chmod o+r /var/log/messages              给其它用户(Other Users)增加可读

[root@web opt]# vi /etc/logstash/conf.d/system.conf
input {
       file{
        path => "/var/log/messages"
        type => "system"
        start_position => "beginning"
        }
      }
output {
        elasticsearch {
          hosts => ["192.168.133.50:9200"]
          index => "system-%{+YYYY.MM.dd}"
          }
        }


位置确定

[root@web opt]# vi /etc/logstash/logstash.yml 

[root@web opt]# systemctl restart logstash.service

到192.168.133.50:9100查看就可以看到我们刚刚查到的日志了


登录192.168.133.50 host1主机
在host1主机安装kibana

[root@host1 ~]# cd /usr/local/src

[root@host1 src]#  rpm -ivh kibana-5.5.1-x86_64.rpm
[root@host1 kibana]# cp kibana.yml kibana.yml.bak
[root@host1 kibana]#  vi /etc/kibana/kibana.yml
 2 #server.port: 5601                                                                                             kibana打开的端口开启
改
2 server.port: 5601
7 #server.host: "localhost"                                                                                   监听端口开启并修改
改
7 server.host: "0.0.0.0"
21 #elasticsearch.url: "http://localhost:9200"                                                      开启并修改和elasticsearch建立联系
改
21 elasticsearch.url: "http://192.168.133.50:9200"
30 #kibana.index: ".kibana"                                                                      在elasticsearch中添加.kibana索引
开启
30 kibana.index: ".kibana"
[root@host1 kibana]# systemctl start kibana.service
[root@host1 kibana]# systemctl status kibana.service

然后在客户机上打开http://192.168.133.50:5601


可以根据之前的索引键进行创建

创建完毕后就可以查看了

4.5、对接Apache主机的Apache 日志文件(访问的、错误的)
[root@web ~]# cd /etc/logstash/conf.d/
[root@web conf.d]# touch apache_log.conf
[root@web conf.d]# vi apache_log.conf
input {
       file{
        path => "/etc/httpd/logs/access_log"
        type => "access"
        start_position => "beginning"
        }
       file{
        path => "/etc/httpd/logs/error_log"
        type => "error"
        start_position => "beginning"
        }
        
      }
output {
        if [type] == "access" {
        elasticsearch {
          hosts => ["192.168.133.50:9200"]
          index => "apache_access-%{+YYYY.MM.dd}"
          }
        }
        if [type] == "error" {
        elasticsearch {
          hosts => ["192.168.133.50:9200"]
          index => "apache_error-%{+YYYY.MM.dd}"
          }
        }
        }

[root@web conf.d]# pwd
/etc/logstash/conf.d
[root@web conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf                       在此文件夹下运行


登录192.168.133.75 web主机

这样在192.168.133.50:9200上既可以看到这两个索引了

也可以创建索引进行查看

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/671022.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号