Docker | 日誌管理 |
--昨夜西風凋碧樹,獨上高樓,望盡天涯路
高效的監控和日誌管理對保持生產系統持續穩定的執行以及排查問題至關重要。
-
Docker logs
Docker logs是Docker預設的日誌功能。
對於一個執行的容器,Docker會將日誌傳送到容器的標準輸出裝置(STDOUT)和標準錯誤裝置(STDERR),STDOUT和STDERR實際上就是容器的控制檯終端。
通過docker logs 檢視容器的log:
docker logs能夠打印出自容器啟動以來完整的日誌,並且-f引數可以繼續列印楚新產生的日誌,效果和Linux命令tail -f一樣。
-
Docker logging driver
Docker提供了多種日誌機制(logging driver)來從容器中獲取日誌資訊,將容器日誌傳送到STDOUT和STDERR
Docker的預設日誌行為。
Docker的預設logging driver是json-file:
json-file會將容器的日誌儲存在json檔案中,Docker負責格式化其內容並輸出到STDOUT和STDERR。
我們可以在Host的容器目錄中找到這個檔案,容器路徑為/var/lib/docker/containers/<contarier ID>/<contariner ID>-json.log。
-
ELK
ELK包含了Elasticsearch、Logstash、Kibana。
1.Elasticsearch
實時查詢的全文搜尋引擎。處理和搜尋巨量的日誌資料
2.Logstash
讀取原始日誌,並對其進行分析和過濾,然後將其轉發給其他元件(比如Elasticsearch)進行索引或儲存。Logstash支
豐富的Input和Output型別,能夠處理各種應用的日誌。
3.Kibana
基於JavaScript的Web圖形介面程式,專門用於視覺化ElasticSearch的資料。
日誌處理流程:
Logstash負責從各個Docker容器中提取日誌,並將日誌轉發到Elasticsearch進行索引和儲存,Kinaba分析和視覺化資料。
通過如下命令執行ELK(這種是打包成一體,最小方案執行ELK,如果生產環境,單個安裝配置):
docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk
容器啟動後ELK各元件將分別監聽如下埠:
5601:Kibana web 介面
9200:Elasticsearch JSON介面
5044:Logstash 日誌接收介面
這有個小插曲,啟動的時候會報錯:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解決方案:修改/etc/下面的sysctl.conf檔案:
訪問Kibana:http://[Host IP]:5601/
當前Kibana沒有資料,只是因為當前的Elasticsearch沒有任何日誌資料。
訪問Elasticsearch的JSON介面:http://[Host IP]:9200/_search?pretty
4.安裝Filebeat(注意和elk的版本匹配)
Docker會將容器日誌記錄到/var/lib/docker/containers/<container ID>/<container ID>-json.log,我們通過Filebeat傳送該檔案給ELK進行日誌管理。
Filebeat能夠將指定路徑下的日誌檔案轉發給ELK(進行監控,實時轉發)。
執行如下命令:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.3.2-x86_64.rpm
首先在/etc/filebeat/下面修改配置:
這裡我們只是簡單演示,不通過logstash過濾,直接傳送到elasticsearch:
現在Filebeat已經執行起來了,重新整理http://192.168.46.116:9200/_search?pretty
Elasticsearch已經建立了日誌的索引並儲存下來了,下面我們在Kibana中配置一個index pattern,即告訴Kibana查詢和分析Elasticsearch中哪些日誌:
之後點選Discovery,可以看到容器和syslog日誌資訊: