使用ELK收集k8s平台日志
1.收集哪些日志?
- K8S系統的組件日志
- K8S Cluster里面部署的應用程序日志
- 標准輸出
- 日志文件 (輸出到指定文件里)
- 日志輪轉(本地保留30天)
- 日志格式 (json,kv)
如果是kubeadm方式部署的k8s 日志是收集的 /var/log/message
如果是二進制部署的k8s 日志是配置文件中定義的日志路徑
應用容器日志
/var/lib/docker/contianers/*/*-json.log
docker配置文件中定義了 默認日志格式為json
pod的日志路徑
/var/lib/kubelet/pods/*/volumes/
2.ELK收集日志架構
其中logstash 是非必選的組件,如果日志場景比較復雜的時候可以加上logstash做出更好的預處理然后存入ES。
3.容器中的日志怎么收集
方案一:
Node上部署一個日志收集程序
- DaemonSet方式部署日志收集程序
- 對本節點/var/log/kubelet/pods和 /var/lib/docker/containers/兩個目錄下的日志進 行采集
- Pod中容器日志目錄掛載到宿主機統一目錄上
方案二:
Pod中附加專用日志收集的容器
- 每個運行應用程序的Pod中增加一個日志 收集容器,使用emtyDir共享日志目錄讓 日志收集程序讀取到。
方案三:
應用程序直接推送日志
- 超出Kubernetes范圍
方案比較:
方式 |
優點 |
缺點 |
方案一:Node上部署一個日志收集程序 |
每個Node僅需部署一個日志收集程序, 資源消耗少,對應用無侵入 |
應用程序日志如果寫到標准輸出和標准錯誤輸出, 那就不支持多行日志。 |
方案二:Pod中附加專用日志收集的容器 |
低耦合 |
每個Pod啟動一個日志收集代理,增加資源消耗, 並增加運維維護成本 |
方案三:應用程序直接推送日志 | 無需額外收集工具 | 浸入應用,增加應用復雜度 |
4.k8s部署efk
mkdir efk && cd efk
elasticsearch.yaml
apiVersion