ELK企業日誌分析系統

一、ELK概述

1.1、 ELK是什麼?

ELK 是elastic公司提供的一套完整的日誌收集、展示解決方案,是三個產品的首字母縮寫,分別是ElasticSearch、Logstash 和 Kibana。

在這裏插入圖片描述
1、ElasticSearch

  • ElasticSearch是一個基於Lucene的開源分佈式搜索服務器。它的特點有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。
  • Elasticsearch是用Java開發的,並作爲Apache許可條款下的開放源碼發佈,是第二流行的企業搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
  • 在elasticsearch中,所有節點的數據是均等的。

2、Logstash

  • Logstash是一個完全開源的工具,它可以對你的日誌進行收集、過濾、分析,支持大量的數據獲取方法,並將其存儲供以後使用(如搜索)。
  • logstash帶有一個web界面,搜索和展示所有日誌。一般工作方式爲c/s架構,client端安裝在需要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操作在一併發往elasticsearch上去。

3、Kibana

  • Kibana 是一個基於瀏覽器頁面的Elasticsearch前端展示工具,也是一個開源和免費的工具。
  • Kibana可以爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,可以幫助您彙總、分析和搜索重要數據日誌。

1.2、ELK工作原理

在這裏插入圖片描述
如上圖:Logstash收集AppServer產生的Log,並存放到ElasticSearch集羣中,而Kibana則從ES集羣中查詢數據生成圖表,再返回給Browser。

二、ELK部署

2.1、部署環境準備

配置和安裝ELK日誌分析系統,安裝集羣方式,2個elasticsearch節點,1個kibaha節點,監控apache服務器日誌。

主機名 IP地址 主要軟件
node1 192.168.100.131 Elasticsearch + Kibana
node2 192.168.100.132 Elasticsearch
apache 192.168.100.133 Logstash Apache
  • 部署ELK所需要的安裝包已經放在百度雲盤上。
    鏈接:https://pan.baidu.com/s/1pUnMeojBue9DHxpX78C9aA
    提取碼:w4qz

2.2、配置elasticsearch服務器

  • 這裏有兩個elasticsearch服務器 node1 和 node2 需要配置,IP地址分別是192.168.100.131 和192.168.100.132。

2.2.1、配置elasticsearch環境

  • 更改主機名,配置域名解析,安裝環境編譯包,查看Java版本
  • node1和node2的配置相同,這裏就不重複介紹了
[root@node1 ~]# hostnamectl set-hostname node1     #更改主機名

[root@node2 ~]# hostnamectl set-hostname node2

[root@node1 ~]#  vi /etc/hosts
192.168.100.131   node1
192.168.100.132   node2

#安裝編譯包
[root@node1 ~]# yum -y install gcc-c++ gcc make pcre
[root@node1 ~]# yum install -y java-1.8.0
[root@node1 ~]# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

在這裏插入圖片描述
在這裏插入圖片描述

2.2.2、部署elasticsearch軟件

1、安裝elasticsearch—rpm包
上傳elasticsearch-5.5.0.rpm到/opt目錄下
[root@node1 ~]# cd /opt
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm 

2、加載系統服務
[root@node1 opt]# systemctl daemon-reload    
[root@node1 opt]# systemctl enable elasticsearch.service

3、更改elasticsearch主配置文件
[root@node1 opt]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak   #備份配置文件,以防出錯無法恢復
[root@node1 opt]#  vi /etc/elasticsearch/elasticsearch.yml
cluster.name: my-elk-cluster                   ####集羣名字
node.name: node1                                  ####節點名字
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"]           ####集羣發現通過單播實現

[root@node1 opt]#  grep -v "^#" /etc/elasticsearch/elasticsearch.yml

在這裏插入圖片描述
在這裏插入圖片描述

4、創建數據存放路徑並授權
[root@node1 opt]# mkdir -p /data/elk_data
[root@node1 opt]# chown elasticsearch:elasticsearch /data/elk_data/

5、啓動elasticsearch是否成功開啓
[root@node1 elasticsearch]# systemctl daemon-reload    #修改了配置文件,要重新加載
[root@node1 elasticsearch]# systemctl start elasticsearch.service
[root@node1 opt]# netstat -antp | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      7124/java   

6、查看節點信息 用真機的瀏覽器打開 http://192.168.100.131:9200 顯示節點的信息
在這裏插入圖片描述
在這裏插入圖片描述

2.2.3、檢查集羣信息

1、檢查羣集健康情況
在真機瀏覽器192.168.100.1 打開 http://192.168.100.131:9200/_cluster/health?pretty
在這裏插入圖片描述
2、檢查羣集狀態信息
輸入http://192.168.100.131:9200/_cluster/state?pretty
在這裏插入圖片描述

2.2.4、安裝elasticsearch-head插件

上面查看集羣的方式不太方便,但是我們可以通過安裝 elasticsearch-head 插件後,來管理集羣。
elasticsearch-head是一個界面化的集羣操作和管理工具,可以對集羣進行傻瓜式操作。你可以通過插件把它集成到elasticsearch(5.0版本後不支持此方式),也可以安裝成一個獨立webapp。

node1、node2都要安裝head插件,步驟相同。

//上傳node-v8.2.1.tar.gz到/opt
  編譯安裝node組件依賴包,耗時比較長,大約30分鐘。
[root@localhost opt]# cd /opt
[root@node1 opt]# tar xzvf node-v8.2.1.tar.gz
[root@node1 opt]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure 
[root@node1 node-v8.2.1]# make -j3    #j3參數指多線程編譯,編譯速度會大大提高
[root@node1 node-v8.2.1]# make install

// 安裝phantomjs
上傳軟件包到/usr/local/src/
[root@localhost node-v8.2.1]# cd /usr/local/src/
[root@localhost src]# tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@localhost src]# cd phantomjs-2.1.1-linux-x86_64/bin
[root@localhost bin]# cp phantomjs /usr/local/bin

###安裝elasticsearch-head###
[root@localhost bin]# cd /usr/local/src/
[root@localhost src]# tar xzvf elasticsearch-head.tar.gz
[root@localhost src]# cd elasticsearch-head/
[root@localhost elasticsearch-head]# npm install

設置 elasticsearch 跨域訪問

[root@localhost ~]# cd ~
[root@localhost ~]# vi /etc/elasticsearch/elasticsearch.yml   ####下面配置文件,插末尾##
http.cors.enabled: true
http.cors.allow-origin: "*"
[root@localhost ~]# systemctl restart elasticsearch

//啓動elasticsearch-head 服務器
[root@localhost ~]# cd /usr/local/src/elasticsearch-head/
[root@localhost elasticsearch-head]# npm run start &      ####切換到後臺運行

在這裏插入圖片描述在這裏插入圖片描述

[root@localhost elasticsearch-head]# netstat -lnupt |grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      114739/grunt        
[root@localhost elasticsearch-head]# netstat -lnupt |grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      114626/java     

在這裏插入圖片描述

2.2.5、使用elasticsearch-head

在真機上打開瀏覽器輸入node1和node2的地址查看集羣狀況。http://192.168.100.131:9100/
http://192.168.100.132:9100/
在這裏插入圖片描述
在這裏插入圖片描述
模擬在node1節點命令上創建索引、類型,查看網頁版elasticsearch。

[root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

在這裏插入圖片描述
下圖可以看見索引默認被分片5個,並且有一個副本
在這裏插入圖片描述
進入數據瀏覽可以查看索引名稱和類型。
在這裏插入圖片描述

2.3、安裝 logstash服務器

2.3.1、配置環境

更改主機名、關閉防火牆、關閉核心防護

1、更改主機名
hostnamectl set-hostname apache
su

2、關閉防火牆
systemctl stop firewalld
setenforce 0

3、關閉核心防護
sed -i '7s/enforcing/disabled/' /etc/sysconfig/selinux

2.3.1、安裝Apahce、logstash

1、安裝Apahce服務(httpd)
[root@apache ~]# yum -y install httpd
[root@apache ~]# systemctl start httpd

2、安裝Java環境
[root@apache ~]# java -version        ###如果沒有裝,安裝yum -y install java-1.8.0
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

3、安裝logstash
上傳logstash-5.5.1.rpm到/opt目錄下
[root@apache ~]# cd /opt
[root@apache opt]# rpm -ivh logstash-5.5.1.rpm                                                  ##安裝logstash
[root@apache opt]# systemctl start logstash.service                                              ##啓動logstash
[root@apache opt]# systemctl enable logstash.service
[root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/          ##建立logstash軟連接

2.4、logstash與elasticsearch對接

使用 logstash 命令測試 logstash 和 elasticsearch 是否功能正常,完成對接
字段描述解釋:
●	-f  通過這個選項可以指定logstash的配置文件,根據配置文件配置logstash
●	-e  後面跟着字符串 該字符串可以被當做logstash的配置(如果是” ”,則默認使用stdin做爲輸入、stdout作爲輸出)
●	-t  測試配置文件是否正確,然後退出

//使用logstash將信息寫入elasticsearch中輸入 輸出 對接
[root@apache opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.100.131:9200"] } }'
。。。。。。。。省略。。。。。。。
The stdin plugin is now waiting for input:
10:40:06.558 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com                    ###輸入內容
www.sina.com.cn                   ###輸入內容
www.google.com.cn                ###輸入內容

登錄宿主機打開瀏覽器 輸入http://192.168.100.131:9100/ 查看索引信息,會多出 logstash-2020.03.25索引。
在這裏插入圖片描述
點擊數據瀏覽查看響應的內容就是在命令行輸入的信息。
在這裏插入圖片描述

【登錄192.168.100.133  Apache主機 做對接配置】
Logstash配置文件主要由三部分組成:input、output、filter(根據需要)

[root@apache opt]# chmod o+r /var/log/messages    #給其他用戶一個只讀權限
[root@apache opt]# ll /var/log/messages
-rw----r--. 1 root root 572555 4月  16 23:50 /var/log/messages
[root@apache opt]# vi /etc/logstash/conf.d/system.conf 
input {
       file{
        path => "/var/log/messages"
        type => "system"
        start_position => "beginning"
        }
      }
output {
        elasticsearch {
          hosts => ["192.168.100.131:9200"]
          index => "system-%{+YYYY.MM.dd}"
          }
        }

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

登錄192.168.100.1 真機
打開瀏覽器 輸入http://192.168.100.131:9100/ 查看索引信息,會多出 system-2020.03.25
在這裏插入圖片描述

2.5、在node1主機安裝kibana

上傳kibana-5.5.1-x86_64.rpm 到/usr/local/src目錄
[root@node1 ~]# cd /usr/local/src/
[root@node1 src]# rpm -ivh kibana-5.5.1-x86_64.rpm
[root@node1 src]# cd /etc/kibana/
[root@node1 kibana]# cp kibana.yml kibana.yml.bak
[root@node1 kibana]# vi kibana.yml
server.port: 5601                #### kibana打開的端口
server.host: "0.0.0.0"           ####kibana偵聽的地址
elasticsearch.url: "http://192.168.100.131:9200"             ###和elasticsearch建立聯繫
kibana.index: ".kibana"              ####在elasticsearch中添加.kibana索引
[root@node1 kibana]# systemctl start kibana.service    ###啓動kibana服務
[root@node1 kibana]# systemctl enable kibana.service   ###開機啓動kibana服務

登錄宿主機使用瀏覽器輸入192.168.100.131:5601
首次登錄創建一個索引名字:system-* 這是對接系統日誌文件
然後點擊create即可
在這裏插入圖片描述

然後點最左上角的Discover按鈕,再點下面的 host旁邊的add 右面的圖中只顯示 Time 和host 選項。
在這裏插入圖片描述

2.6、對接Apache主機的Apache 日誌文件

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

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

在這裏插入圖片描述
登錄宿主機打開瀏覽器輸入http://192.168.100.133
再次打開瀏覽器 輸入http://192.168.100.131:9100/ 連接,查看索引信息
能發現apache_access-2020.03.25、apache_error-2020.03.25

打開瀏覽器 輸入http://192.168.100.131:5601
點擊左下角有個management選項-----index patterns----create index pattern----分別創建apache_error-* 和 apache_access-* 的索引
在這裏插入圖片描述
到了這裏我們的ELK日誌分析已經搭建成功,也介紹了使用方法,可以通過ELK完成日誌分析了。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章