1. 程式人生 > >ELK日誌收集平臺部署

ELK日誌收集平臺部署

elk 日誌收集

需求背景

一位朋友的公司研發最近有一些苦惱。由於他們公司的後臺服務有三臺,每當後臺服務運行異常,需要看日誌排查錯誤的時候,都必須開啟3個ssh窗口進行查看,研發們覺得很不方便,於是便有了統一日誌收集與查看的需求。

這裏,我用ELK集群,通過收集三臺後臺服務的日誌,再統一進行日誌展示,實現了這一需求。

當然,當前只是進行了簡單的日誌采集,如果後期相對某些日誌字段進行分析,則可以通過logstash以及Kibana來實現。


部署環境

系統:CentOS 7

軟件:

elasticsearch-6.1.1

logstash-6.1.1

kibana-6.1.1

下載地址:https://www.elastic.co/cn/products



搭建步驟

一:elasticsearch:

elasticsearch是用於存儲日誌的數據庫。

下載elasticsearch軟件,解壓:

# tar -zxvf elasticsearch-6.1.1.tar.gz 
# mv elasticsearch-6.1.1 /opt/apps/elasticsearch

由於elasticsearch建議使用非root用戶啟動,使用root啟動會報錯,故需創建一個普通用戶,並進行一些簡單配置:

# useradd elk
# vi /opt/apps/elasticsearch/config/elasticsearch.yml
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"

啟動,並驗證:

# su - elk
$ nohup /opt/apps/elasticsearch/bin/elasticsearch &
# netstat -ntpl | grep 9200
tcp        0      0 0.0.0.0:9200            0.0.0.0:*               LISTEN      6637/java    
#curl 'localhost:9200/_cat/health?v'
epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1514858033 09:53:53  elasticsearch yellow          1         1    241 241    0    0      241             0                  -                 50.0%



二:logstash

logstash用於收集各服務器上的日誌,然後把收集到的日誌,存儲進elasticsearch。收集日誌的方式有很多種,例如結合redis或者filebeat,這裏我們使用redis收集的方式。

安裝logstash:

在所有服務器上:
# tar -zxvf logstash-6.1.1.tar.gz
# mv logstash-6.1.1 /opt/apps/logstash/

配置後臺服務器,收集相關的日誌:

在三臺後臺服務器上新建logstash文件,配置日誌收集:
# vi /opt/conf/logstash/logstash.conf    
input {
        file {
                        #指定type
                type => "web_stderr"       
                #匹配多行的日誌        
                codec => multiline {
                        pattern => "^[^0-9]"
                        what => "previous"
                }
                #指定本地的日誌路徑
                path => [ "/opt/logs/web-stderr.log"]
                sincedb_path => "/opt/logs/logstash/sincedb-access"
        }
        file {
                type => "web_stdout"
                codec => multiline {
                        pattern => "^[^0-9]"
                        what => "previous"
                }
                path => [ "/opt/logs/web-stdout.log"]
                sincedb_path => "/opt/logs/logstash/sincedb-access"
        }
        #收集nginx日誌
        file {
                type => "nginx"
                path => [ "/opt/logs/nginx/*.log"]
                sincedb_path => "/opt/logs/logstash/sincedb-access"
        }
}
output {
    #指定輸出的目標redis
  redis {
    host => "xx.xx.xx.xx"
    port => "6379"
    data_type => "list"
    key => "logstash"
  }
}

配置elk日誌服務器上的logstash,從redis隊列中讀取日誌,並存儲到elasticsearch中:

# vi /opt/conf/logstash/logstash-server.conf
#配置從redis隊列中讀取收集的日誌
input {
  redis {
    host => "xx.xx.xx.xx"
    port => "6379"
    type => "redis-input"
    data_type => "list"
    key => "logstash"
    threads => 10
  }
}
#把日誌輸出到elasticsearch中
output {
        elasticsearch {
                        hosts => "localhost:9200"
                        index => "logstash-%{type}.%{+YYYY.MM.dd}"
        }
        
        #這裏把日誌收集到本地文件
        file {
                path => "/opt/logs/logstash/%{type}.%{+yyyy-MM-dd}"
                codec => line { format => "%{message}"}
        }
}

啟動logstash進程:

後臺服務器:
# nohup /opt/apps/logstash/bin/logstash -f /opt/conf/logstash/lmb.conf --path.data=/opt/data/logstash/lmb &
elk日誌服務器:
# nohup /opt/apps/logstash/bin/logstash -f /opt/conf/logstash/logstash-server.conf --path.data=/opt/data/logstash/logstash-server &



三:kibana

kibana用於日誌的前端展示。

安裝、配置kibana:

# tar -zxvf kibana-6.1.1-linux-x86_64.tar.gz
# mv kibana-6.1.1-linux-x86_64 /opt/apps/kibana
配置elasticsearch鏈接:
# vi /opt/apps/kibana/config/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
#配置elasticsearch鏈接:
elasticsearch.url: "http://localhost:9200"

啟動kibana:

nohup /opt/apps/kibana/bin/kibana &

訪問kibana:

http://localhost:5601

技術分享圖片

可以根據我們在logstash中配置的type,創建索引:

技術分享圖片

可以根據我們創建的索引,進行查看(這裏查看nginx日誌):

技術分享圖片



後記:

當然了,結合logstash和kibana不單單僅能實現收集日誌的功能,通過對字段的匹配、篩選以及結合kibana的圖標功能,能對我們想要的字段進行分析,實現相應的數據報表等。

ELK的功能十分強大,以後有機會,繼續和大家探討!!


ELK日誌收集平臺部署