ELK|Managing Docker Logs to ELK Stack

瀏覽人次: 1788
2021-08-04 更新

ELK Logo

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 查看,所以:

kibana create index pattern

kibana discover

Visualize Data

這邊主要根據個人需求規劃想要看的 Visualize,以利後面的 Dashboard 組合。

在我們的例子中需要:

  • 2 個 Metrics,針對 source_host、image_name 的數量,分別各建立 1 個 Metric。
  • 1 個 Gauge,使用 message 中 grok 出來的 status code,分別看除了 200 以外是否有其他的錯誤代碼。
  • 1 個 Vertical Bar,使用 message 中 grok 出來的 api endpoint,count api 存取次數。
  • 1 個 Datatable,查看 log 的一些詳細資訊,比如 message,endpoint 等等。

以 Datatable 為例子(如右圖),因為我們在 Logstash 中有透過 grok 進一步解析欄位,所以在這裡就可以切三個欄位,可以方便我們看到 API Endpoint,跟一些訊息。

Kibana Visualize

Kibana Visualize Datatable

Kibana Dashboard

我們可以至 Dashboard,選擇剛剛建立的 Visualize,組合成您滿意的儀表版,所以:

Kibana Dashboard add Visualize

Conclusion

  1. 覆寫 docker logging 設定 driver 為 gelf
  2. logstash 接收 log,透過 gork 解析,並傳送至 elasticsearch
  3. 建立 index pattern,並至 discover 查看 log
  4. 根據 grok 的內容,建立多個 visualize 
  5. 組合 visualize 成最後的 dashboard

有任何問題,或是想看新主題?

聯絡我們

快速跳轉目錄

✦ 集先鋒 Bimap – 企業建置高速穩定的海量日誌分析平台✦

集中不同的結構化資料和非結構化日誌,並進行關聯性的大數據整合,客製化儀表版、自訂事件告警、機器學習等等,以滿足各種大數據的應用場景和解決方案。