--昨夜西風凋碧樹,獨上高樓,望盡天涯路
高效的監控和日志管理對保持生産系統持續穩定的運作以及排查問題至關重要。
-
Docker logs
Docker logs是Docker預設的日志功能。
對于一個運作的容器,Docker會将日志發送到容器的标準輸出裝置(STDOUT)和标準錯誤裝置(STDERR),STDOUT和STDERR實際上就是容器的控制台終端。
通過docker logs 檢視容器的log:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2Lc1TPB5UMrpnT4FleOpHOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zN4UzM1AjM2EzMxgDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
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日志資訊: