在分析 K8S 叢集問題時,Kubernetes Events 是超級有用的。
Kubernetes Events 可以被當做是紀錄檔來處理,格式也和紀錄檔很像,都包括:
但是,Kubernetes 預設只持久化了一個小時的事件,以減少 etcd 的負載。所以,考慮利用 Loki 儲存和查詢這些 Events。
看過 我之前的文章 的可以知道,kubernetes-event-exporter 可以實現對 Kubernetes Events 的收集。
那我們就利用 kubernetes-event-exporter, 通過最簡單的 stdout
方式來輸出 json 格式的 event.
另外,再利用 Promtail 的 管道設定,將 NameSpace 作為附加標籤新增到匯出到 Loki 的紀錄檔中。
如下:
logLevel: error
logFormat: json
trottlePeriod: 5
route:
routes:
- match:
- receiver: "dump"
receivers:
- name: "dump"
stdout: { }
如下:
...
scrape_configs:
- job_name: kubernetes-pods-app
pipeline_stages:
- cri: {}
- match:
selector: '{app="event-exporter"}'
stages:
- json:
expressions:
namespace: involvedObject.namespace
- labels:
namespace: ""
...
上面的設定會從 Events 的 JSONPath involvedObject.namespace
中獲取 NameSpace ,並將其作為一個標籤 - namespace
新增。
至此,我可以只檢視特定 NameSpace(如emqx
) 的 Events, 如下圖: