使用Logstash收集Kubernetes的應用日誌
前言
本文同步更新到Github倉庫 ofollow,noindex">kubernetes-handbook 中。
很多企業內部都有自己的ElasticSearch叢集,我們沒有必要在kubernetes叢集內部再部署一個,而且這樣還難於管理,因此我們考慮在容器裡部署logstash收集日誌到已有的ElasticSearch叢集中。
方案選擇
Kubernetes官方提供了EFK的日誌收集解決方案,但是這種方案並不適合所有的業務場景,它本身就有一些侷限性,例如:
- 所有日誌都必須是out前臺輸出,真實業務場景中無法保證所有日誌都在前臺輸出
- 只能有一個日誌輸出檔案,而真實業務場景中往往有多個日誌輸出檔案
- Fluentd並不是常用的日誌收集工具,我們更習慣用logstash
- 我們已經有自己的ELK叢集且有專人維護,沒有必要再在kubernetes上做一個日誌收集服務
基於以上幾個原因,我們決定使用自己的ELK叢集。
Kubernetes叢集中的 日誌 收集解決方案
編號 | 方案 | 優點 | 缺點 |
---|---|---|---|
1 | 每個app的映象中都整合日誌收集元件 | 部署方便,kubernetes的yaml檔案無須特別配置,可以為每個app自定義日誌收集配置 | 強耦合,不方便應用和日誌收集元件升級和維護且會導致映象過大 |
2 | 單獨建立一個日誌收集元件跟app的容器一起執行在同一個 pod 中 | 低耦合,擴充套件性強,方便維護和升級 | 需要對kubernetes的yaml檔案進行單獨配置,略顯繁瑣 |
3 | 將所有的Pod的日誌都掛載到宿主機上,每臺主機上單獨起一個日誌收集Pod | 完全解耦,效能最高,管理起來最方便 | 需要統一日誌收集規則,目錄和輸出方式 |
綜合以上優缺點,我們選擇使用方案二。
該方案在擴充套件性、個性化、部署和後期維護方面都能做到均衡,因此選擇該方案。

我們建立了自己的logstash映象。建立過程和使用方式見 https://github.com/rootsongjc/docker-images
映象地址: index.tenxcloud.com/jimmy/logstash:5.3.0
測試
我們部署一個應用對logstash的日誌收集功能進行測試。
建立應用yaml檔案 logstash-test.yaml
。
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: logstash-test namespace: default spec: replicas: 3 template: metadata: labels: k8s-app: logstash-test spec: containers: - image: sz-pg-oam-docker-hub-001.tendcloud.com/library/logstash:5.3.0 name: logstash resources: requests: cpu: 100m memory: 500M volumeMounts: - name: app-logs mountPath: /log env: - name: LogFile value: '["/log/*","/log/usermange/common/*"]' - name: ES_SERVER value: 172.23.5.255:9200 - name: INDICES value: logstash-docker - name: CODEC value: plain - image: sz-pg-oam-docker-hub-001.tendcloud.com/library/analytics-docker-test:Build_8 name : app volumeMounts: - name: app-logs mountPath: /usr/local/TalkingData/logs volumes: - name: app-logs emptyDir: {}
注意事項
- 將app的
/usr/local/TalkingData/logs
目錄掛載到logstash的/log
目錄下。 - logstash容器大概需要500M以上記憶體。
- 該檔案可以在
manifests/test/logstash-test.yaml
找到。 - 我使用了自己的私有映象倉庫,測試時請換成自己的應用映象。
- logstash的環境變數的值配置請參考 https://github.com/rootsongjc/docker-images
建立應用
部署Deployment
kubectl create -f logstash-test.yaml
檢視 http://172.23.5.255:9200/_cat/indices
將可以看到列表有這樣的indices:
green open logstash-docker-2017.05.16 VkFWx3b_Ss6n4keDmXm-TQ 5 1 2078 0 1.6mb 795.3kb
訪問Kibana的web頁面,檢視 logstash-docker-2017.05.16
的索引,可以看到logstash收集到了app日誌。

本文轉自中文社群- 使用Logstash收集Kubernetes的應用日誌