此係列文章將會描述Java框架Spring Boot、服務治理框架Dubbo、應用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等開源框架,其中穿插着Spring Boot中日誌切面等技術的實現,然後通過gitlab-CI以持續集成爲Docker鏡像。
本文爲Logstash 使用文檔
本系列文章中所使用的框架版本爲Spring Boot 2.0.3-RELEASE,Spring 5.0.7-RELEASE,Dubbo 2.6.2。
Logstash
Logstash 是開源的服務器端數據處理管道,能夠同時從多個來源採集數據,轉換數據,然後將數據發送到存儲庫中。(ELK套件中存儲庫爲ES)
Logstash 啓動
pipelines
目錄下存放了logstash
所有的數據處理管道配置文件,故會啓動所有流水線
--config.reload.automatic
參數,自動重載配置
nohup ./bin/logstash --config.reload.automatic -f ./pipelines/ &
!> 目前爲nohup
實現後臺啓動,後續可考慮統一至supervisor
管理
Logstash input
爲了接收到日誌信息,需要配置input
插件
tcp
若日誌信息爲
json
格式,則codec
爲json
,文本爲plain
input {
tcp {
host => "172.16.7.7"
port => "5045"
codec => "json"
}
}
beat
input{
beats {
host => "172.16.7.7"
port => "5044"
add_field => ["log_channel", "nginx"]
}
}
Logstash filter
Logstash filter
插件在事件執行的中間過程進行相關的數據處理,通常根據事件的特徵選擇性地使用相應的過濾器。
Filter插件列表詳見Logstash Filter
grok
簡述
Grok可以將非結構化日誌數據解析爲結構化和可查詢的內容。
此工具非常適用於syslog日誌,apache和其他Web服務器日誌,mysql日誌,以及通常爲人類而非計算機使用而編寫的任何日誌格式。
Logstash默認提供約120種模式。詳見grok原生正則,亦可在patterns_dir
參數使用自定義的正則模式串
工作原理
Grok的工作原理是將文本模式組合成與日誌匹配的內容。grok模式的語法是 %{SYNTAX:SEMANTIC}
示例
55.3.244.1 GET /index.html 15824 0.043
上述HTTP日誌可使用以下模式匹配
%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}
對應Logstash文件爲
input {
file {
path => "/var/log/http.log"
}
}
filter {
grok {
match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
}
}
經過grok過濾後,日誌事件解析爲以下字段
- client: 55.3.244.1
- method: GET
- request: /index.html
- bytes: 15824
- duration: 0.043
json
skip_on_invalid_json
:允許對無效json
不進行過濾操作source
:進行json
轉換的字段remove_field
:刪除字段(可用於剔除轉換前的字段)
json {
skip_on_invalid_json => true
source => "message"
remove_field => ["message"]
}
詳細配置見Json filter plugin
geoip
geoip
過濾器根據Maxmind geolite2數據庫的數據,轉換相應IP地址地理位置的信息。
geoip {
source => "client_ip"
}
詳細配置見Geoip filter plugin
FAQ
- 數據處理管道配置文件會在啓動時自動merge,注意各pipeline中的操作會應用在所有流水線中