ELK日誌分析系統

案例實施

ELK日誌分析系統
本實驗實現如下功能:java

  • 配置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進行安裝。node

[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)加載系統服務linux

[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主配置文件web

[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)建立數據存放路徑並受權apache

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

5)啓動elasticsearch並查看是否成功開啓npm

[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日誌分析系統json

7)查看羣集的健康狀況,能夠看見status值爲green(綠色),表示節點健康運行
ELK日誌分析系統bootstrap

  • 經過以上方式查看羣集的狀態對用戶並不太友好,能夠經過Elasticsearch-head插件,能夠更方便的管理羣集。vim

    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]# 
> elasticsearch-head@0.0.0 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日誌分析系統
ELK日誌分析系統

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日誌分析系統
選擇「概覽」選項卡,還能夠看見索引默認被分片成5個,且存在一個副本,如圖所示。
ELK日誌分析系統

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日誌分析系統
    ELK日誌分析系統

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日誌分析系統
ELK日誌分析系統

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日誌分析系統
ELK日誌分析系統

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日誌分析系統
登錄kibana,單擊「create lndex Pattern」按鈕添加索引。
ELK日誌分析系統
在索引名中輸入以前配置的output前綴「apache_access」,單擊「create」按鈕。
ELK日誌分析系統
用相同的方法添加apache_error-索引。
ELK日誌分析系統
選擇「discover」選項卡,在中間下拉表中選擇剛添加的apache_access-
索引,能夠查看相應的圖表及日誌信息,還能夠根據Fields進行歸類顯示。
ELK日誌分析系統

相關文章
相關標籤/搜索