搭建ELK日誌分析系統詳解

日誌分析是咱們運維解決系統故障、發現問題的主要手段。爲了能夠集中管理多臺服務器的日誌記錄,開源實時日誌分析ELK平臺應用而生,ELK由Elasticsearch、Logstash和Kibana三個開源工具組成,這三個工具能夠分別部署在不一樣的服務器上,而且相互關聯,不過須要收集哪臺服務器的日誌,就必須在該服務器上部署Logstash。ELK的官網是:https://www.elastic.co/cn/
.前端

ELK的工做原理以下(懂得其中原理,纔可部署一個高可用的ELK平臺):
Logstash收集APPServer(應用服務器)產生的log,並存放到Elasticsearch羣集中,而Kibana則從Elasticsearch羣集中查詢數據生成圖表,在返回給browser(瀏覽器)。簡單來講,進行日誌處理分析,通常須要如下幾個步驟:java

  • Logstash將日誌進行集中化管理。
  • 將日誌格式化(Logstash)並輸出到Elasticsearch。
  • Elasticsearch對格式化後的數據進行索引和存儲。
  • Kibana對前端數據的展現。

搭建ELK平臺:node

1、準備工做:
搭建ELK日誌分析系統詳解linux

一、Node一、Node2節點內存最少分配4G,Apache節點無所謂。
二、下載所需軟件包:https://pan.baidu.com/s/1aP7GDiRBdXzCZBbgiP1fAw
提取碼:spuh
複製這段內容後打開百度網盤手機App,操做更方便哦三臺服務器都要掛載我提供的.iso文件。
三、修改節點服務器名稱,並經過本地/etc/hosts配置域名解析,檢查Java環境,必須是Java 1.8或更高的版本
四、放行防火牆相關端口的流量,爲了方便我直接關閉了防火牆。
五、全部服務器的時間最好同步,能夠搭建時間同步服務器,也可手動同步。
node1節點配置:數據庫

[root@node1 /]# hostname                       # 修改主機名
node1
[root@node1 /]# vim /etc/hosts               # 配置解析文件,添加以下兩行
............................
192.168.1.10    node1
192.168.1.20    node2
[root@node1 /]# java -version              # 檢查Java環境
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)

node2節點配置(跟node1基本類似):apache

[root@node2 /]# hostname           # 修改主機名
node2
[root@node2 /]# vim /etc/hosts           # 編寫解析配置文件
..............................
192.168.1.10    node1                  # 添加
192.168.1.20    node2                  # 添加
[root@node2 /]# java -version             # 檢查Java環境
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)

2、安裝Elasticsearch:
一、node1配置:npm

[root@node1 /]# mount /dev/sr0 /media/             # 掛載elk軟件包
[root@node1 /]# cd /media/
[root@node1 media]# cp * /usr/src/            # 複製全部文件
[root@node1 media]# cd /usr/src/
[root@node1 src]# rpm -ivh elasticsearch-5.5.0.rpm           # 安裝
[root@node1 src]# systemctl daemon-reload 
[root@node1 src]# systemctl enable elasticsearch.service 
[root@node1 /]# vim /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                                      #偵聽端口
discovery.zen.ping.unicast.hosts: ["node1", "node2"]             #羣集發現經過單播實現
[root@node1 /]# mkdir -p /data/elk_data             #建立數據存放目錄    
[root@node1 /]# chown elasticsearch:elasticsearch            #更改屬主及屬組 /data/elk_data/
[root@node1 /]# systemctl start elasticsearch.service            # qi'do啓動服務
[root@node1 /]# netstat -anpt | grep 9200        #端口號不會立馬看到,啓動服務後再等待十秒左右纔可查看到     
tcp6       0      0 :::9200                 :::*                    LISTEN      3992/java

二、node2配置:bootstrap

[root@node2 /]# mount /dev/sr0 /media/          # 掛載elk軟件包
[root@node2 /]# cd /media/
[root@node2 media]# cp * /usr/src/
[root@node2 /]# cd /usr/src/
[root@node2 src]# rpm -ivh elasticsearch-5.5.0.rpm           # 安裝
[root@node2 src]# systemctl daemon-reload 
[root@node2 src]# systemctl enable elasticsearch.service 
[root@node2 /]# scp root@192.168.1.10:/etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/               # 將node1配置文件複製過來
The authenticity of host '192.168.1.10 (192.168.1.10)' can't be established.
ECDSA key fingerprint is 68:df:0f:ac:c7:75:df:02:88:7d:36:6a:1a:ae:27:23.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.10' (ECDSA) to the list of known hosts.
root@192.168.1.10's password:          # 輸入密碼
elasticsearch.yml                                    100% 2853     2.8KB/s   00:00    
[root@node2 /]# vim /etc/elasticsearch/elasticsearch.yml           #稍做修改
node.name: node2                #就更改一下節點名稱便可,其他不變
[root@node2 /]# mkdir -p /data/elk_data                # 建立數據存放目錄
[root@node2 /]# chown elasticsearch:elasticsearch  /data/elk_data/               # 設置屬主屬組
[root@node2 /]# systemctl start elasticsearch.service 
[root@node2 /]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      4074/java

三、查看節點信息:
node1:
搭建ELK日誌分析系統詳解
node2:
搭建ELK日誌分析系統詳解
訪問http://192.168.1.10:9200/_cluster/health?pretty 查看羣集的健康狀態:
搭建ELK日誌分析系統詳解
訪問http://192.168.1.10:9200/_cluster/state?pretty 查看羣集的狀態信息:
搭建ELK日誌分析系統詳解
經過以上方式查看羣集狀體對咱們顯示的並不友好,能夠經過安裝Elasticsearch-head插件,能夠更方便的管理羣集:
.
在node1安裝Elasticsearch-head插件(須要提早安裝node和phantomjs):
vim

[root@node1 /]# cd /usr/src/
[root@node1 src]# tar zxf node-v8.2.1.tar.gz             # 解壓node源碼包
[root@node1 src]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure && make && make install 
#安裝,時間較長,約需40分鐘左右
[root@node1 src]# tar jxf  phantomjs-2.1.1-linux-x86_64.tar.bz2 
[root@node1 src]# cd phantomjs-2.1.1-linux-x86_64/bin/
[root@node1 bin]# cp phantomjs /usr/local/bin/            #複製該文件到指定目錄
[root@node1 src]# tar zxf elasticsearch-head.tar.gz 
[root@node1 src]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install             # 安裝依賴包
[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml                 
#編輯主配置文件,在任意位置添加以下兩行:
http.cors.enabled: true                #添加該行,開啓跨域訪問支持
http.cors.allow-origin: "*"             #添加該行,跨域訪問容許的域名地址
[root@node1 elasticsearch-head]# systemctl restart elasticsearch.service               # 重啓服務使配置生效
[root@node1 elasticsearch-head]# npm run start &        
#設置服務後臺啓動,若是前臺啓動,一旦關閉中斷,服務也將關閉。
#而且啓動服務時,必須在解壓後的elasticsearch-head下啓動服務,
#進程會讀取該目錄下的一個文件,不然可能啓動失敗。
[root@node1 /]# netstat -anpt | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      49967/grunt         
[root@node1 /]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      49874/java

經過瀏覽器訪問http://192.168.1.10:9100 來查看羣集信息:
搭建ELK日誌分析系統詳解
四、安裝Kibana(可單獨安裝在一臺服務器上,本人囊中羞澀、資源有限,因此安裝在了node1上):跨域

[root@node1 /]# cd /usr/src/
[root@node1 src]# rpm -ivh kibana-5.5.1-x86_64.rpm 
[root@node1 src]# systemctl enable kibana.service 
[root@node1 src]# vim /etc/kibana/kibana.yml 
........................              // 省略部份內容
server.port: 5601          #Kibana打開的端口
server.host: "0.0.0.0"               #Kibana偵聽的地址,0.0.0.0表明該主機上的全部地址
elasticsearch.url: "http://192.168.1.10:9200"                   #和Elasticsearch創建鏈接
kibana.index: ".kibana"                      #在Elasticsearch中添加.kibana索引
[root@node1 src]# systemctl start kibana.service

五、配置apache服務器(自行搭建網站):

[root@Web ~]# systemctl start httpd         #啓動httpd服務
[root@Web ~]# java -version                  #檢查Java環境是否爲1.8
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@Web ~]# mount /dev/cdrom /media           #掛載我提供的.iso文件
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@Web ~]# cd /media
[root@Web media]# rpm -ivh logstash-5.5.1.rpm                #安裝logstash
[root@Web media]# systemctl daemon-reload  
[root@Web media]# systemctl enable logstash.service         #設置開機自啓動
[root@Web media]# cd /etc/logstash/conf.d/               #切換至指定路徑
[root@Web conf.d]# vim apache_log.conf        #編輯採集apache日誌文件和系統日誌
#如下就以系統日誌爲例作解釋,其他的照着來就行,格式都差很少
input {
      file{
        path => "/var/log/messages"             #指定要收集的日誌文件
  type => "system"  #指定類型爲system,能夠自定義,type值和output{ } 中的type對應便可
        start_position => "beginning"       #從開始處收集
        }
      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] == "system" {           #若是type爲system,
           elasticsearch {                  #就輸出到Elasticsearch服務器
             hosts => ["192.168.1.10:9200"]               #Elasticsearch監聽地址及端口
             index => "system-%{+YYYY.MM.dd}"           #指定索引格式
                }
             }
        if [type] == "access" {
  elasticsearch {
             hosts => ["192.168.1.10:9200"]
             index => "apache_access-%{+YYYY.MM.dd}"
               }
             } 
        if [type] == "error" {
          elasticsearch {
             hosts => ["192.168.1.10:9200"]
             index => "apache_error-%{+YYYY.MM.dd}"
             }
          }  
        } 
#寫完保存退出便可。
[root@Web ~]# chmod o+r /var/log/messages           #賦予該目錄其餘人的讀權限        
[root@Web conf.d]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ 
#建立命令軟鏈接
[root@Web conf.d]# systemctl start logstash             #啓動服務
[root@Web conf.d]# logstash -f apache_log.conf &    
#指定剛纔編寫文件爲Logstash的配置文件,而且在後臺運行

六、建立索引:
一、經過瀏覽器訪問 http://192.168.1.10:9100 查看索引是否建立:
搭建ELK日誌分析系統詳解
關於索引,有幾個很重要的概念:

  • 索引:相似於關係數據庫中的「庫」;
  • Type(編寫Logstash時指定的type):相似於關係數據庫中的「表」;

剛纔建立的索引,在我標記紅框中,能夠看到node1和node2對應的位置,都有綠色背景的0、一、二、三、四、5表示是該索引被分爲了5個分片,其中由於在Logstash中指定的Elasticsearch服務器是node1,因此node1的分片是主分片,node2會自動同步node1的分片,node2的分片爲備份分片,稱爲副本,用來提供數據冗餘及負載分擔。默認狀況下,Elasticsearch自動對索引請求進行負載分擔。

.
如今訪問http://192.168.1.10:5601 登陸到Kibana,添加索引:
搭建ELK日誌分析系統詳解
搭建ELK日誌分析系統詳解
搭建ELK日誌分析系統詳解
搭建ELK日誌分析系統詳解
關於apache的錯誤日誌索引,自行添加便可,添加完畢後,單擊「discover」便可,在下面的下拉列表選擇一個索引,如apache_access-,能夠查看相應的圖表及日誌信息:
搭建ELK日誌分析系統詳解

相關文章
相關標籤/搜索