推薦閱讀:
思維導圖
概述
我們都知道,在生產環境中經常會遇到很多異常,報錯信息,需要查看日誌信息排查錯誤。現在的系統大多比較複雜,即使是一個服務背後也是一個集羣的機器在運行,如果逐臺機器去查看日誌顯然是很費力的,也不現實。
如果能把日誌全部收集到一個平臺,然後像百度,谷歌一樣通過關鍵字搜索出相關的日誌,豈不快哉。於是就有了集中式日誌系統。ELK就是其中一款使用最多的開源產品。
一、什麼是ELK
ELK其實是Elasticsearch,Logstash 和 Kibana三個產品的首字母縮寫,這三款都是開源產品。
ElasticSearch(簡稱ES),是一個實時的分佈式搜索和分析引擎,它可以用於全文搜索,結構化搜索以及分析。
Logstash,是一個數據收集引擎,主要用於進行數據收集、解析,並將數據發送給ES。支持的數據源包括本地文件、ElasticSearch、MySQL、Kafka等等。
Kibana,爲 Elasticsearch 提供了分析和 Web 可視化界面,並生成各種維度表格、圖形。
二、搭建ELK
環境依賴:CentOS7.5,JDK1.8,ElasticSearch7.9.3,Logstash 7.9.3,Kibana7.9.3。
2.1 安裝ElasticSearch
首先,到官網下載安裝包,然後使用tar -zxvf
命令解壓。
找到config目錄下的elasticsearch.yml文件,修改配置:
cluster.name: es-application
node.name: node-1
#對所有IP開放
network.host: 0.0.0.0
#HTTP端口號
http.port: 9200
#elasticsearch數據文件存放目錄
path.data: /usr/elasticsearch-7.9.3/data
#elasticsearch日誌文件存放目錄
path.logs: /usr/elasticsearch-7.9.3/logs
配置完之後,因爲ElasticSearch使用非root用戶啓動,所以創建一個用戶。
# 創建用戶
useradd yehongzhi
# 設置密碼
passwd yehongzhi
# 賦予用戶權限
chown -R yehongzhi:yehongzhi /usr/elasticsearch-7.9.3/
然後切換用戶,啓動:
# 切換用戶
su yehongzhi
# 啓動 -d表示後臺啓動
./bin/elasticsearch -d
使用命令netstat -nltp
查看端口號:
訪問http://192.168.0.109:9200/可以看到如下信息,表示安裝成功。
2.2 安裝Logstash
首先在官網下載安裝壓縮包,然後解壓,找到/config目錄下的logstash-sample.conf文件,修改配置:
input {
file{
path => ['/usr/local/user/*.log']
type => 'user_log'
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["http://192.168.0.109:9200"]
index => "user-%{+YYYY.MM.dd}"
}
}
input表示輸入源,output表示輸出,還可以配置filter過濾,架構如下:
配置完之後,要有數據源,也就是日誌文件,準備一個user.jar應用程序,然後後臺啓動,並且輸出到日誌文件user.log中,命令如下:
nohup java -jar user.jar >/usr/local/user/user.log &
接着再後臺啓動Logstash,命令如下:
nohup ./bin/logstash -f /usr/logstash-7.9.3/config/logstash-sample.conf &
啓動完之後,使用jps
命令,可以看到兩個進程在運行:
2.3 安裝Kibana
首先還是到官網下載壓縮包,然後解壓,找到/config目錄下的kibana.yml文件,修改配置:
server.port: 5601
server.host: "192.168.0.111"
elasticsearch.hosts: ["http://192.168.0.109:9200"]
和elasticSearch一樣,不能使用root用戶啓動,需要創建一個用戶:
# 創建用戶
useradd kibana
# 設置密碼
passwd kibana
# 賦予用戶權限
chown -R kibana:kibana /usr/kibana/
然後使用命令啓動:
#切換用戶
su kibana
#非後臺啓動,關閉shell窗口即退出
./bin/kibana
#後臺啓動
nohup ./bin/kibana &
啓動後在瀏覽器打開http://192.168.0.111:5601,可以看到kibana的web交互界面:
2.4 效果展示
全部啓動成功後,整個過程應該是這樣,我們看一下:
瀏覽器打開http://192.168.0.111:5601,到管理界面,點擊“Index Management”可以看到,有一個user-2020.10.31
的索引。
點擊Index Patterns
菜單欄,然後創建,命名爲user-*。
最後,就可以到Discover欄進行選擇,選擇user-*的Index Pattern,然後搜索關鍵字,就找到相關的日誌了!
三、改進優化
上面只是用到了核心的三個組件簡單搭建的ELK,實際上是有缺陷的。如果Logstash需要添加插件,那就全部服務器的Logstash都要添加插件,擴展性差。所以就有了FileBeat,佔用資源少,只負責採集日誌,不做其他的事情,這樣就輕量級,把Logstash抽出來,做一些濾處理之類的工作。
FileBeat也是官方推薦用的日誌採集器,首先下載Linux安裝壓縮包:
https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.9.3-linux-x86_64.tar.gz
下載完成後,解壓。然後修改filebeat.yml配置文件:
#輸入源
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/user/*.log
#輸出,Logstash的服務器地址
output.logstash:
hosts: ["192.168.0.110:5044"]
#輸出,如果直接輸出到ElasticSearch則填寫這個
#output.elasticsearch:
#hosts: ["localhost:9200"]
#protocol: "https"
然後Logstash的配置文件logstash-sample.conf,也要改一下:
#輸入源改成beats
input {
beats {
port => 5044
codec => "json"
}
}
然後啓動FileBeat:
#後臺啓動命令
nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &
再啓動Logstash:
#後臺啓動命令
nohup ./bin/logstash -f /usr/logstash-7.9.3/config/logstash-sample.conf &
怎麼判斷啓動成功呢,看Logstash應用的/logs目錄下的logstash-plain.log日誌文件:
寫在最後
目前,很多互聯網公司都是採用ELK來做日誌集中式系統,原因很簡單:開源、插件多、易擴展、支持數據源多、社區活躍、開箱即用等等。我見過有一個公司在上面的架構中還會加多一個Kafka的集羣,主要是基於日誌數據量比較大的考慮。但是呢,基本的三大組件ElasticSearch,Logstash,Kibana是不能少的。
希望這篇文章能幫助大家對ELK有一些初步的認識,感謝大家的閱讀。
覺得有用就點個贊吧,你的點贊是我創作的最大動力~