Grafana 系列文章(十三):如何用 Loki 收集檢視 Kubernetes Events

2023-02-10 12:00:41

前情提要

  1. IoT 邊緣叢集基於 Kubernetes Events 的告警通知實現
  2. IoT 邊緣叢集基於 Kubernetes Events 的告警通知實現(二):進一步設定

概述

在分析 K8S 叢集問題時,Kubernetes Events 是超級有用的。

Kubernetes Events 可以被當做是紀錄檔來處理,格式也和紀錄檔很像,都包括:

  1. 時間
  2. 元件
  3. 原因
  4. ...

但是,Kubernetes 預設只持久化了一個小時的事件,以減少 etcd 的負載。所以,考慮利用 Loki 儲存和查詢這些 Events。

實現

看過 我之前的文章 的可以知道,kubernetes-event-exporter 可以實現對 Kubernetes Events 的收集。

那我們就利用 kubernetes-event-exporter, 通過最簡單的 stdout 方式來輸出 json 格式的 event.

另外,再利用 Promtail 的 管道設定,將 NameSpace 作為附加標籤新增到匯出到 Loki 的紀錄檔中。

kubernetes-event-exporter 設定

如下:

logLevel: error
logFormat: json
trottlePeriod: 5
route:
  routes:
    - match:
        - receiver: "dump"
receivers:
  - name: "dump"
    stdout: { }

Promtail 設定

如下:

...
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, 如下圖: