案例实施

ELK日志分析系统_第1张图片
本实验实现以下功能:

  • 配置ELK日志分析群集。
  • 使用logstash收集日志。
  • 使用Kibana查看分析日志。
    1.在两个ELK节点上配置域名解析,通过本地/etc/hosts文件实现。
    node1上的配置:
    [root@localhost ~]# vim /etc/hostname 
    node1
    [root@localhost ~]# vim /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.8.134 node1
    192.168.8.136 node2
node2上的配置:
[root@localhost ~]# vim /etc/hostname
node2
[root@localhost ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.8.134 node1
192.168.8.136 node2
  • 以上更改完需要重启reboot

2.部署Elasticsearch软件。
所需ELK安装包:链接https://pan.baidu.com/s/17cHU4XY9q1i90Z6ywRDFjg
提取码:k43i
1)安装Elasticsearch软件
Elasticsearch软件可以通过RPM安装,YUM安装或者源码包安装,生产环境中用户可以根据实际情况进行安装方式的选择。本人用的是RPM进行安装。

[root@node1 media]# rpm -ivh elasticsearch-5.5.0.rpm 
警告:elasticsearch-5.5.0.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中...                          ################################# [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
正在升级/安装...
elasticsearch-0:5.5.0-1          ################################# [100%]
NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service

2)加载系统服务

[root@node1 ~]# systemctl  daemon-reload 
[root@node1 ~]# systemctl  enable elasticsearch.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.

3)更改Elasticsearch主配置文件

[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml 
cluster.name: my-elk-cluster     //群集名字 
node.name: node-1                  //节点名字
path.data: /data/elk_data         //数据存放路径
path.logs: /var/log/elasticsearch/ //日志存放路径
bootstrap.memory_lock: false     //在启动时侯不锁定内存
network.host: 0.0.0.0                  //提供服务绑定的ip地址,0.0.0.0代表所有地址
http.port: 9200                           //侦听端口为9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]   //群集发现通过单播实现
  • 以上都为更改的需去掉“#“

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

[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml 
[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 ~]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      4072/java           
  • 这里需要注意了node2的配置跟node1的配置基本相同,但是更改Elasticsearch主配置文件时其中的节点名字应更改为node2

6)查看节点信息
ELK日志分析系统_第2张图片

7)查看群集的健康情况,可以看见status值为green(绿色),表示节点健康运行
ELK日志分析系统_第3张图片

  • 通过以上方式查看群集的状态对用户并不太友好,可以通过Elasticsearch-head插件,可以更方便的管理群集。

               1.1安装Elasticsearch-head插件

    1)编译安装node。编译安装node耗时较长,大约40min,根据机器的配置可能略有不同,请耐心等待

    [root@node1 media]# tar zxvf node-v8.2.1.tar.gz  -C /usr/src
    [root@node1 media]# cd  /usr/src/node-v8.2.1/
    [root@node1 node-v8.2.1]# ./configure && make && make install

2)安装phantomjs

[root@node1 node-v8.2.1]# cd /media/ 
[root@node1 media]# tar xvjf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/src/
[root@node1 media]# cd /usr/src/phantomjs-2.1.1-linux-x86_64/bin
[root@node1 bin]# cp phantomjs  /usr/local/bin/

3)安装Elasticsearch-head

[root@node1 media]# tar xvzf elasticsearch-head.tar.gz -C /usr/src/
[root@node1 media]# cd /usr/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm install     //安装依赖包

4)修改Elasticsearch主配置文件

[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml 
http.cors.enabled: true      //开启跨域访问支持
http.cors.allow-origin: "*"  //跨域访问允许的域名地址 两段http.cors都为添加上去的
[root@node1 ~]# systemctl restart  elasticsearch.service  //重启服务

5)启动服务。必须在解压后的elasticsarch-head目录下启动服务,进程会读取该目录下的grunfile.js文件。elasticsearch-head监听端口是9100,通过该端口是否监听来判断服务是否正常开启。

[root@node1 elasticsearch-head]# npm run start &
[1] 50445
[root@node1 elasticsearch-head]# 
> [email protected] start /usr/src/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      50458/grunt         
[root@node1 elasticsearch-head]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      50290/java          

6)通过Elaticsearch-head查看Elaticsearch信息。通过访问浏览器http://192.168.8.134:9100/并连接群集,如图所示。
ELK日志分析系统_第4张图片
ELK日志分析系统_第5张图片

7)插入索引。通过命令插入一个测试索引,通过输出信息可以看见索引为index-demo,类型为test。

[root@node1 ~]# curl  -XPUT  'localhost:9200/index-demo/test/1?pretty'  -H 'Content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
{
  "_index" : "index-demo",
  "_type" : "test",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "created" : true
}

刷新浏览器,可以看到创建成功的索引,如图所示。
ELK日志分析系统_第6张图片
选择“概览”选项卡,还可以看见索引默认被分片成5个,且存在一个副本,如图所示。
ELK日志分析系统_第7张图片

                      1.2Logstash安装及使用方法

logstash一般部署在需要监控其日志的服务器中,在本案例中,logstash部署在Apache服务器上,用于收集Apache服务器的日志信息并发送到Elaticsearch中。在正式部署之前,先在node1上部署Logstash,以熟悉logstash 的使用方法。logstash也需要java环境,所以在安装之前也需要检查当前机器的java环境是否存在。
1)在node1上安装logstash

[root@node1 media]# rpm -ivh logstash-5.5.1.rpm 
警告:logstash-5.5.1.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:logstash-1:5.5.1-1               ################################# [100%]
Using provided startup.options file: /etc/logstash/startup.options
Successfully created system startup script for Logstash
[root@node1 ~]# systemctl  start  logstash.service 
[root@node1 ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

2)测试logstash。logstash命令行中常用的命令选项如下

  • -f:通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash。
  • -e:后面跟着字符串,该字符串可以被当作logstash的配置
  • -t:测试配置文件是否正确,然后退出。
    logstash命令的使用方法:
    [root@node1 ~]# logstash  -e  'input { stdin{}} output { stdout{} }'
    www.baidu.com                                                             //键入内容
    2019-10-10T05:00:36.651Z node1 www.baidu.com    //输出结果
    [root@node1 ~]# logstash  -e  'input { stdin{}} output { stdout{ codec=>rubydebug } }'
    www.aa.com                                                                 //键入内容
    {
    "@timestamp" => 2019-10-10T05:10:09.330Z,       //输出后的结果
      "@version" => "1",
          "host" => "node1",
       "message" => "www.aa.com"
    }
    [root@node1 ~]# logstash  -e  'input { stdin{}} output { elasticsearch { hosts=>["192.168.8.134:9200"]} }'
    www.baidu.com    //键入内容
    www.aa.com        //键入内容

    在Elasticsearch中查看Logstash新增的索引,如图所示
    ELK日志分析系统_第8张图片
    ELK日志分析系统_第9张图片

3)logstash配置文件
logstash配置文件基本由三个部分组成,input,output,filter。
下面通过修改logstash配置文件,让其收集系统日志/var/log/messages,并将其输出到elaticsearch中。

[root@node1 ~]# chmod  o+r /var/log/messages 
[root@node1 ~]# ll /var/log/messages
-rw----r-- 1 root root 320286 10月 10 13:23 /var/log/messages
[root@node1 ~]# touch /etc/log
login.defs      logrotate.conf  logrotate.d/    logstash/       
[root@node1 ~]# touch /etc/log
login.defs      logrotate.conf  logrotate.d/    logstash/       
[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.8.134:9200"]
        index => "system-%{+YYYY.MM.dd}"
    }
 }
[root@node1 ~]# systemctl  restart logstash.service           //重启logstash服务

完成后,通过浏览器查看Elasticsearch的信息,如图所示
ELK日志分析系统_第10张图片
ELK日志分析系统_第11张图片

                                     1.3安装Kibana

1)在node1服务器上安装Kibana,并设置开机启动

[root@node1 ~]# cd /media/
[root@node1 media]# rpm -ivh kibana-5.5.1-x86_64.rpm 
警告:kibana-5.5.1-x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:kibana-5.5.1-1                   ################################# [100%]
[root@node1 media]# systemctl  enable kibana.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.

2)设置kibana的主配置文件/etc/kibana/kibana.yml

[root@node1 ~]# vim /etc/kibana/kibana.yml 
server.port: 5601                  //kibana打开的端口
server.host: "0.0.0.0"           //kibana侦听的地址
elasticsearch.url: "http://192.168.8.134:9200"  //和Elaticsearch建立连接
kibana.index: ".kibana"         //在elasticsearch中添加.kibana索引

3)启动kibana服务
[root@node1 ~]# systemctl start kibana.service

4)验证kibana。通过浏览器访问http://192.168.8.134:5601,第一次登陆需要添加一个Elasticsearch索引,添加前面创建的索引实。添加前面所创建的索引system。
ELK日志分析系统_第12张图片
ELK日志分析系统_第13张图片

5)将Apache服务器的日志添加到Elaticsearch并通过kibana显示。

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# systemctl  restart httpd

在Apache服务器上安装Logstash,以便将收集的日志发送到Elasticsearch中。

[root@localhost ~]# java -version
openjdk version "1.8.0_102"
OpenJDK Runtime Environment (build 1.8.0_102-b14)
OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
[root@localhost media]# rpm -ivh logstash-5.5.1.rpm 
warning: logstash-5.5.1.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:logstash-1:5.5.1-1               ################################# [100%]
[root@localhost ~]# systemctl daemon-reload 
[root@localhost ~]# systemctl enable logstash.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.

编写Logstash配置文件apache_log.conf如下。

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

     }
[root@localhost conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf 

通过访问浏览器访问http://192.168.8.134:9100查看索引是否创建成功。
ELK日志分析系统_第14张图片
登陆kibana,单击“create lndex Pattern”按钮添加索引。
ELK日志分析系统_第15张图片
在索引名中输入之前配置的output前缀“apache_access”,单击“create”按钮。
ELK日志分析系统_第16张图片
用相同的方法添加apache_error-索引。
ELK日志分析系统_第17张图片
选择“discover”选项卡,在中间下拉表中选择刚添加的apache_access-
索引,可以查看相应的图表及日志信息,还可以根据Fields进行归类显示。
ELK日志分析系统_第18张图片