ELK日誌分析方案
阿新 • • 發佈:2018-11-01
針對公司專案微服務化,隨著專案及伺服器的不斷增多,決定採用ELK(Elasticsearch+Logstash+Kibana)日誌分析平臺進行微服務日誌分析。
1.ELK整體方案
1.1 ELK架構圖
1.2 ELK工作流程
1.在微服務伺服器上部署Logstash,作為Shipper的角色,對微服務日誌檔案資料進行資料採集,將採集到的資料輸出到Redis訊息佇列。
2.在另外一臺伺服器上部署Logstash,作為Indexer的角色,從Redis訊息佇列中讀取資料(可以對資料進行處理),輸出到Elasticsearch-Master主節點。
3.Elasticsearch-Master主節點內部與副節點同步資料。(Elasticsearch叢集建議3個服務以上奇數)
4.Kibana部署一臺伺服器內,讀取Elasticsearch叢集資料,展示Web查詢頁面,提供資料展示。
2.訊息佇列選型
2.1 Redis
在我這個最終方案中,選擇了使用Redis作為訊息佇列進行緩衝,降低Elasticsearch壓力,起到削峰作用,主要原因還是由於公司考慮成本問題,日誌收集也是隻針對我們單個專案組來使用,所以選擇了公司現在就已經有的Redis叢集進行復用。
2.2 Kafka
最初方案中,在訊息佇列上選擇的是Kafka,畢竟Kafka天生就是做為訊息佇列的,具體二者的畢竟在這裡我就不多說了,百度上一大堆。
3.安裝
這裡就不在這裡寫出來了,提供三個地址僅供參考:
Linux安裝Logstash
Linux安裝Kibana
Linux安裝Elasticsearch
4.Logstash配置
4.1 log2redis
從日誌檔案讀取到redis
#從日誌檔案讀取資料
#file{}
#type 日誌型別
#path 日誌位置
# 可以直接讀取檔案(a.log)
# 可以所有後綴為log的日誌(*.log)
# 讀取資料夾下所有檔案(路徑)
#start_position 檔案讀取開始位置 (beginning)
#sincedb_path 從什麼位置讀取(設定為/dev/null自動從開始位置讀取)
input {
file {
type => "log"
path => ["/root/logs/info.log"]
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
#根據時間戳分隔日誌
#grok 區分日誌中得欄位
filter {
multiline {
pattern => "^%{TIMESTAMP_ISO8601} "
negate => true
what => previous
}
#定義資料的格式
grok {
match => { "message" => "%{DATA:datetime} - %{DATA:logLevel} - %{DATA:serviceName} - %{DATA:ip} - %{DATA:pid} - %{DATA:thread} - %{DATA-msg}"}
}
}
#輸出資料到Redis
#host Redis主機地址
#port Redis埠
#db Redis資料庫編號
#data_type Redis資料型別
#key Redis的key
#password Redis密碼
output {
redis {
host => "ip"
port => "6379"
db => "6"
data_type => "list"
password => "password"
key => "test_log"
}
}
複製程式碼
4.2 redis2es
從redis讀取到es
#從redis內讀取資料
#host Redis主機ip
#port Redis埠
#data_type Redis資料型別
#batch_count
#password Redis密碼
#key Redis讀取Key
input {
redis {
host => "ip"
port => "6379"
db => "6"
data_type => "list"
password => "password"
key => "test_log"
}
}
#資料的輸出我們指向了es叢集
#hosts Elasticsearch主機地址
#index Elasticsearch索引名稱
output {
elasticsearch {
hosts => "ip:9200"
index => "logs-%{+YYYY.MM.dd}"
}
}
複製程式碼
5 其他
其他剩下的就是Es叢集和Kibana了,這兩個沒什麼特別值得注意的地方,上網隨便搜,一大堆文章。
以上僅僅代表本人專案使用方案,不一定完美適合所有場景,僅供參考。