上一節已經部署了容器化的 ELK,本節討論如何將日誌導入 ELK 並進行圖形化展現。html
幾乎全部的軟件和應用都有本身的日誌文件,容器也不例外。前面咱們已經知道 Docker 會將容器日誌記錄到 /var/lib/docker/containers/<contariner ID>/<contariner ID>-json.log
,那麼只要咱們可以將此文件發送給 ELK 就能夠實現日誌管理。docker
要實現這一步其實不難,由於 ELK 提供了一個配套小工具 Filebeat,它能將指定路徑下的日誌文件轉發給 ELK。同時 Filebeat 很聰明,它會監控日誌文件,當日志更新時,Filebeat 會將新的內容發送給 ELK。json
下面在 Docker Host 中安裝和配置 Filebeat。curl
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.4.0-amd64.debsudo dpkg -i filebeat-5.4.0-amd64.deb
當你看到這篇文章時,Filebeat 可能已經有了更新的版本,請參考最新的安裝文檔 https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-installation.htmlide
Filebeat 的配置文件爲 /etc/filebeat/filebeat.yml
,咱們須要告訴 Filebeat 兩件事:工具
監控哪些日誌文件?學習
將日誌發送到哪裏?ui
首先回答第一個問題。url
在 paths
中咱們配置了兩條路徑:spa
/var/lib/docker/containers/*/*.log
是全部容器的日誌文件。
/var/log/syslog
是 Host 操做系統的 syslog。
接下來告訴 Filebeat 將這些日誌發送給 ELK。
Filebeat 能夠將日誌發送給 Elasticsearch 進行索引和保存;也能夠先發送給 Logstash 進行分析和過濾,而後由 Logstash 轉發給 Elasticsearch。
爲了避免引入過多的複雜性,咱們這裏將日誌直接發送給 Elasticsearch。
若是要發送給 Logstash,可參考後半部分的註釋。
當前的日誌處理流程以下圖所示:
Filebeat 安裝時已經註冊爲 systemd 的服務,能夠直接啓動服務。
systemctl start filebeat.service
Filebeat 啓動後,正常狀況下會將監控的日誌發送給 Elasticsearch。刷新 Elasticsearch 的 JSON 接口 http://[Host IP]:9200/_search?pretty 進行確認。
此次咱們可以看到 filebeat-*
的 index
,以及 Filebeat 監控的那兩個路徑下的日誌。
好,Elasticsearch 已經建立了日誌的索引並保存起來,接下來是在 Kibana 中展現日誌。
首先須要配置一個 index pattern
,即告訴 Kibana 查詢和分析 Elasticsearch 中的哪些日誌。
指定 index pattern
爲 filebeat-*
,這與 Elasticsearch 中的 index
一致。
Time-field name
選擇 @timestamp
。
點擊 Create
建立 index pattern
。
點擊 Kibana 左側 Discover
菜單,即可看到容器和 syslog 日誌信息。
下面咱們啓動一個新的容器,該容器將向控制檯打印信息,模擬日誌輸出。
docker run busybox sh -c 'while true; do echo "This is a log message from container busybox!"; sleep 10; done;'
刷新 Kibana 頁面或者點擊右上角 圖標,立刻就能看到 busybox 的日誌。
Kibana 也提供了強大的查詢功能,好比輸入關鍵字 busybox
能搜索出全部匹配的日誌條目。
咱們這裏只是簡單地將日誌導入 ELK 並樸素地顯示出來,實際上 ELK 還能夠對日誌進行歸類彙總、分析聚合、建立炫酷的 Dashboard 等,能夠挖掘的內容不少,玩法很豐富。因爲這個教程的重點是容器,這裏就不過多展開。下面這張圖能夠感覺一下 ELK 的能力,更多的功能留給你們本身去探索。
ELK 我們就討論到這裏,下一節學習 Fluentd。
書籍:
1.《天天5分鐘玩轉Docker容器技術》
https://item.jd.com/16936307278.html
2.《天天5分鐘玩轉OpenStack》
https://item.jd.com/12086376.html