閱讀475 返回首頁    go 阿裏雲 go 技術社區[雲棲]


容器內日誌收集方案示例

容器內日誌收集方案示例

ELK(Elasticsearch+Logstash+Kibana)是流行的一體化日誌方案,提供日誌收集、處理、存儲、搜索、展示等全方位功能。

基於docker部署ELK非常方便,有各種現成的image可用,比如https://elk-docker.readthedocs.org/

但因為容器的隔離性,收集容器內的日誌很不方便。本文的方案可以讓用戶通過簡單的配置實現這一功能。

原理

本方案借助docker的Volume功能。在host機器上開辟一個固定目錄D;產生日誌的容器將日誌文件所在目錄mount到D目錄下的子目錄中;收集日誌的容器再把目錄D mount到自己容器內。
這樣日誌收集容器就能訪問到所有日誌文件了。如下圖所示:

_2015_12_18_17_34_10

另外,為了收集容器的stdout、stderr日誌,還需要將host的/var/lib/docker/目錄mount到日誌收集容器中,可以收集到json日誌。

部署方法

可以通過下麵這個容器編排文件實現一鍵部署。

#elk包含了Elasticsearch+Logstash+Kibana三個應用
elk:
  image: registry.aliyuncs.com/testhub/elk:0.1
  ports:
    - '5601:5601'
    - '9200:9200'
    - '5000:5000'
  restart: always
  labels:
#aliyun.logs標示需要收集的目錄,沒有該標識的容器不會收集日誌。多個目錄之間用分號;分隔,目錄與文件pattern之間用冒號:分隔,不帶pattern則收集目錄下所有文件。
#下麵這行表示收集/var/log/elasticsearch目錄下所有文件,/var/log/test/目錄下所有.txt文件。
    aliyun.logs: /var/log/elasticsearch;/var/log/test/:*.txt
#aliyun.logs裏出現的每一個目錄,都要有相應的volume。
#host目錄必須是/container_logs/開頭。
  volumes:
    - /container_logs/elasticsearch/:/var/log/elasticsearch/
    - /container_logs/elktest/:/var/log/test/
logstash-forwarder:
  image: registry.aliyuncs.com/testhub/logstash-forwarder:0.2
  restart: always
  links: 
    - elk:logstash
  labels:
#aliyun.global: true是阿裏雲擴展的功能,有該標識的容器每個host上有且僅有一個
    aliyun.global: 'true'
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - /container_logs/:/container_logs/
    - /var/lib/docker/:/var/lib/docker/

部署教程

在這之前,需要先創建一個集群。可以在容器服務控製台https://cs.console.aliyun.com/ 完成。
1. 創建編排文件

1
2
2. 用編排文件創建應用

3
4
3. 查看狀態,找到elk服務的節點IP

5
6
4. 訪問https://節點IP:5601/,開始搜索日誌

7

最後更新:2017-04-01 13:51:26

  上一篇:go 創新之歌該如何唱
  下一篇:go 從傳統物流模式到“互聯網+物流”