ELK|Managing Docker Logs to ELK Stack
Elasticsearch Version: 7.10.1
Docker Engine Version: 20.10.7
Setting Docker Logging
Docker 預設使用 json-file 的方式,將 container 的 log 以 json 的方式做暫存在系統中。
我們可以覆寫 logging 的設定,這邊以修改 gelf 的為例,所以:
version: "3"
services:
frontend:
build: ./your-project
restart: always
ports:
- 4000:80
logging:
driver: gelf
options:
gelf-address: "udp://172.16.0.7:12201"
tag: "tcbank_backend"
Setting Logstash Pipeline
此時,Docker 將 log 以 gelf 格式,發送至 Logstash,並將實際的 log 置於 message key 中,可以試著透過 Grok 進一步解析,以利後面的 Dashboard 製作。
所以我們可以開始寫 Logstash 接收 Docker Log 並送至 Elasticsearch,所以:
input {
gelf {
port => 12201
}
}
filter {
grok {
match => {"message" => [
"%{LOGLEVEL:log_level}:%{SPACE}%{HOSTNAME:hostname}:%{POSINT:port}%{SPACE}-%{SPACE}\"%{WORD:method}%{SPACE}%{URIPATH:path}%{URIPARAM:params}%{SPACE}%{NOTSPACE:schema}\"%{SPACE}%{NUMBER:status_code}%{SPACE}%{GREEDYDATA:result}",
"%{LOGLEVEL:log_level}:%{SPACE}%{HOSTNAME:hostname}:%{POSINT:port}%{SPACE}-%{SPACE}\"%{WORD:method}%{SPACE}%{URIPATH:path}%{SPACE}%{NOTSPACE:schema}\"%{SPACE}%{NUMBER:status_code}%{SPACE}%{GREEDYDATA:result}"
]}
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => ["http://10.99.1.138:9200"]
index => "%{[tag]}-%{+YYYY.MM.dd}"
}
}
Kibana Discover
我們已經可以在 Elasticsearch 接收到 Logstash 送進來的 Log。
還需要建立 index pattern,才可在 discover 查看,所以: