部署ELK日志分析系统

mac2026-09-27  12

原理解释

ELK实际上是三个技术

Elasticsearch: 相等一个日志的搜索引擎,负责对日志的索引,存储

Logstash:用于日志的收集,可以对数据处理,并输出给Elasticsearch

Kibana:Elasticsearch把数据输出给,Kibana,Kibana负责把日志数据,变为图形界面并通过web页面显示出来

案例实施

实验环境

节点1 192.168.100.102 主机名:node1 服务: Elasticsearch,logstash, kibana

节点2 192.168.100.103 主机名:node2 服务 :Elasticsearch

apache服务器 192.168.100.104 主机名:随意 服务:logstash,apache

系统均为centos7,vm网络为vm1

node1 和 node2 的内存应都给大于 3G

需要的软件包,请自行准备

环境准备

1)在两个ELK节点中配置主机名,并配置域名解析

进入100.102中 [root@CentOS7-02 ~]# vim /etc/hostname (删除原来的) node1 [root@CentOS7-02 ~]# reboot [root@node1 ~]# vim /etc/hosts (在下面添加如下) 192.168.100.102 node1 192.168.100.103 node2

然后100.103node2中的操作,除了 hostname主机名改为node2 外,hosts与100.102中一样

改完主机名,一定要reboot重启,然后apache 100.1004不用改

2)检查node1,node2 JAVA环境

node1 100.102中,挂载系统光盘,配置yum [root@node1 ~]# yum -y install java* [root@node1 ~]# java -version (出现如下,就对了) openjdk version "1.8.0_131" OpenJDK Runtime Environment (build 1.8.0_131-b12) OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

在node2 100.103中操作一致,

部署 Elasticsearch

在node1,和node2 节点都需要部署 Elasticserach软件,我这里以node1节点为例 ,node2操作都一模一样

进入node1 100.102中

1)安装 Elasticsearch

rpm包拖入,Xshell中 [root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm

2)加载系统服务

[root@node1 ~]# systemctl daemon-reload [root@node1 ~]# systemctl enable elasticsearch

3)更改Elasticsearch配置文件

[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml (这里面的都是注释的,你可以把如下的添加到最后,也可以修改下面的配置项和我下面一样,#后的是解释,不用打) cluster.name: my-application #群集名字,一会node2也要一样 node.name: node1 #节点名称,一会node2中写node2 path.data: /data/elk_data #数据存放路径 path.logs: /var/log/elasticsearch #日志存放路径 bootstrap.memory_lock: false #启动时不锁内存 network.host: 0.0.0.0 #服务绑定地址,0.0.0.0表示所有 http.port: 9200 #端口 discovery.zen.ping.unicast.hosts: ["node1", "node2"] #群集成员,这里写的是主机名

保存退出

4)创建数据存放路径并授权

[root@node1 ~]# mkdir -p /data/elk_data [root@node1 ~]# chown elasticsearch:elasticsearch /data/elk_data/

5)启动Elasticsearch并查看是否启动成功

[root@node1 ~]# systemctl start elasticsearch.service (这个服务启动的特别慢,命令执行完成后,需要等半分钟或一分钟,才可以看到端口号) [root@node1 ~]# netstat -anpt | grep 9200 tcp6 0 0 :::9200 :::* LISTEN 1550/java

6)这5小步记得node2 100.104中的也要操作,除了配置文件中的的一个变了,其他的操作都一模一样
7)查看节点信息

浏览器,http://192.168.100.102:9200/ 显示node1 的信息,如下 浏览器输入 http://192.168.100.102:9200/_cluster/health?pretty 查看群集状态, status:green 表示节点健康运行 当然你也可,查看node2的,把ip换为192.168.100.103即可,效果差不多,我这里不演示了

因为上面的查看群集状态并不友好,可以通过安装Elasticsearch-head插件

安装 Elasticsearch-head插件

安装这个插件,只需在一个节点上,本例以 node1 100.102为例
进入node1 100.102中
1)编译安装node(是-head工具的环境包),时间会很长,耐心等待

[root@node1 ~]# tar zxf node-v8.2.1.tar.gz [root@node1 ~]# cd node-v8.2.1 [root@node1 node-v8.2.1]# ./configure [root@node1 node-v8.2.1]# make && make install

2)安装phantomjs (是上面-head工具的插件)

拖入包 [root@node1 ~]# tar xvjf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/ [root@node1 /]# cd /usr/local/src/ [root@node1 src]# cd phantomjs-2.1.1-linux-x86_64/bin/ [root@node1 bin]# cp phantomjs /usr/local/bin/

3)安装Elasticsearch-head

拖入包 [root@node1 ~]# tar zxf elasticsearch-head.tar.gz [root@node1 ~]# cd elasticsearch-head [root@node1 elasticsearch-head]# npm install (安装依赖包,会出来多少s就对了)

4)更改Elasticsearch主配置文件

[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml (在最后添加如下两句) http.cors.enabled: true #开启跨域访问支持,默认是false http.cors.allow-origin: "*" #跨域访问允许的域名地址 [root@node1 ~]# systemctl restart elasticsearch

5)启动服务,需要在解压后的 elasticsearch-head目录下,进程会读取该目录下的文件, 否则会启动失败

这个插件是个单独的服务,端口号为9100 [root@node1 ~]# cd /root/elasticsearch-head [root@node1 elasticsearch-head]# npm run start & (&后台运行,要不会占用命令行) [1] 63598 (出现这个后等待,不要做任何操作,一会出现如下) [root@node1 elasticsearch-head]# > elasticsearch-head@0.0.0 start /root/elasticsearch-head > grunt server

Running "connect:server" (connect) task Waiting forever... Started connect web server on http://localhost:9100 (出现这个后,直接回车)

[root@node1 elasticsearch-head]# netstat -anpt | grep 9100 tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 63608/grunt [root@node1 elasticsearch-head]# netstat -anpt | grep 9200 (elasticsearch服务端口) tcp6 0 0 :::9200 :::* LISTEN 63490/java

6)通过插件,通过浏览器,访问http://192.168.100.102:9100/ 如果你安在了,node2就是把网址ip换成100.103,当然两个节点也可以都安装

效果如下,注意看如下的图,要不会连不上的

7)插入索引,通过命令,然后查看

在node1 100.102中操作, [root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'Content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello word"}' (执行成功后,会输出一些东西就对了)

回到,刚刚的插件web页面查看,已经有了,记得要刷新页面

Logstash安装及使用方法

Logstash一般部署要监控其日志的服务器中,本例中,应该部署在apche 100.104服务器中,

在正式部署之前,先在node1部署Logstash,熟悉Logstash使用方法,需要java环境 前面已经安装过了

进入node1 100.102中
1)在node1上安装Logstash

包拖入 [root@node1 ~]# rpm -ivh logstash-5.5.1.rpm (会有点慢,等待) [root@node1 ~]# systemctl start logstash [root@node1 ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

2)测试Logstash

[root@node1 ~]# logstash -e 'input { stdin{} } output { stdout{} }' (注意看下面的图) [root@node1 ~]# logstash -e 'input { stdin{} } output { stdout{ codec=>>rubydebug } }' 注意看下面图片

[root@node1 ~]# logstash -e 'input { stdin{} } output { elasticsearch {hosts=>["192.168.100.102:9200"] } } 回到 Elasticsearch WEB界面中查看,刚刚的索引 然后数据,如下

3)Logstash配置文件

下面通过修改 Logstash配置文件,让其收集系统日志/var/log/messages ,输出到Elasticsearch中 [root@node1 ~]# chmod o+r /var/log/messages (让所有人可读,给logstash权限) [root@node1 ~]# ll /var/log/messages -rw----r--. 1 root root 1003927 11月 3 17:37 /var/log/messages [root@node1 ~]# touch /etc/logstash/conf.d/system.conf [root@node1 ~]# vim /etc/logstash/conf.d/system.conf input { file { path => "/var/log/messages" type => "system" start_position => "beginning" } } output { elasticsearch { hosts => ["192.168.100.102:9200"] index => "system-%{+YYYY.MM.dd}" } }

#保存退出,关于上面配置项的作用我后面会详细说 [root@node1 ~]# systemctl restart logstash

通过Elasticsearch web页面可以看到,

安装 Kibana

在node1 100.102中安装kibana,当然也可以安装到别的,哪台都可以

包拖入,

1)在node1安装Kibana,设置开机自启

[root@node1 ~]# rpm -ivh kibana-5.5.1-x86_64.rpm [root@node1 ~]# systemctl enable kibana.service

2)设置 Kibana的主配置文件

[root@node1 ~]# vim /etc/kibana/kibana.yml (下面的项都是注释的,删掉#,并改为下面) server.port: 5601 #kibana端口 server.host: "0.0.0.0" #kibana监听地址 elasticsearch.url: "http://192.168.100.102:9200" #和Elasticsearch建立连接 kibana.index: ".kibana" #添加.kibana索引,在Elasticsearch中

3)启动服务

[root@node1 ~]# systemctl start kibana

4)验证 Kibana,浏览器访问http://192.168.100.102:5601/

第一次会让添加一个,索引,添加前面的创建的索引,如下 点了,之后会出来,一些打勾的,那些是索引默认字段,这里就不展示了

然后查看数据,需要时间,查看node1的时间 [root@node1 ~]# date 2019年 11月 03日 星期日 18:58:57 CST

查看数据,默认可能会这样 调一下,查看的时间就可以了,如下 数据图如下

配置apache服务器,并监控数据

刚刚只是熟悉Logstash的用法,这里才是真正的监控

进入192.168.100.104 中操作

安装Logstash,以便将收集的日志发送的到Elasticsearch

1)安装httpd服务,和Logstash,而且需要java环境

挂载光盘,并配置yum,把logastash包拖入 [root@centos7-04 ~]# yum -y install httpd [root@centos7-04 ~]# yum -y install java* [root@centos7-04 ~]# java -version [root@centos7-04 ~]# rpm -ivh logstash-5.5.1.rpm [root@centos7-04 ~]# systemctl daemon-reload [root@centos7-04 ~]# systemctl enable logstash

2)编写Logstash配置文件,apache_log.conf,

[root@centos7-04 ~]# cd /etc/logstash/conf.d/ [root@centos7-04 conf.d]# touch apache_log.conf [root@centos7-04 conf.d]# vim 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.100.102:9200"] index => "apache_access-%{+YYYY.MM.dd}" } } if [type] == "error" { elasticsearch { hosts => ["192.168.100.102:9200"] index => "apache_error-%{+YYYY.MM.dd}" } } }

[root@centos7-04 conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf & (虽然,是后台运行,还是会输出信息,运行完这条命名后,等待,会输出一堆东西,等到,输出下面这句话后,然后回车) logstash.agent - Successfully started Logstash API endpoint {:port=>9600}

3)访问测试

回到浏览器,elast~ -head插件 web页面,刷新页面 再回到刚刚的Kibana页面中 然后,添加索引

然后添加 以相同的方法,添加如下这个 apache_error-*

然后,启动httpd服务,并访问,并查看数据图

[root@centos7-04 ~]# systemctl restart httpd

然后浏览器,访问网址http://192.168.100.104/,并多刷新几次

回到,Kibana web页面,查看数据

如下 查看刚刚创建的索引

实验完毕 !

最新回复(0)