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日誌收集平臺部署