关于运维:Grafana-系列文章十三如何用-Loki-收集查看-Kubernetes-Events

3次阅读

共计 1901 个字符,预计需要花费 5 分钟才能阅读完成。

前情提要

  1. IoT 边缘集群基于 Kubernetes Events 的告警告诉实现
  2. IoT 边缘集群基于 Kubernetes Events 的告警告诉实现(二):进一步配置

概述

在剖析 K8S 集群问题时,Kubernetes Events 是超级有用的。

Kubernetes Events 能够被当做是日志来解决,格局也和日志很像,都包含:

  1. 工夫
  2. 组件
  3. 起因

然而,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, 如下图:

🎉🎉🎉

📝Notes:

我的 event-exporter 是部署在 monitoring NS 中的

❓️疑难解答

刚开始做的时候,发现的日志输入不对,格局实例如下:

2022-04-20T22:26:19.526448119+08:00 stderr F I0420 {...json...}

这是因为我用的 container runtime 是 CRI, 而非 Docker.

然而默认装置 Loki 的时候,配置文件里却用的是 docker 的 stage parser, 导致日志格局异样。初始的配置如下:

...
- job_name: kubernetes-pods-name
  pipeline_stages:
    - docker: {}
...    

Docker 的日志格局如下:

`{"log":"level=info ts=2019-04-30T02:12:41.844179Z caller=filetargetmanager.go:180 msg=\"Adding target\"\n","stream":"stderr","time":"2019-04-30T02:12:41.8443515Z"}`

CRI 的日志格局如下:

2019-01-01T01:00:00.000000001Z stderr P some log message

所以如上文所示,要依据本人的 container runtime 抉择适合的 stage parser.

对于 CRI, cri: {} 其实就是如下细节的一个 ” 语法糖 ”:

- regex:
    expression: "^(?s)(?P<time>\\S+?) (?P<stream>stdout|stderr) (?P<flags>\\S+?) (?P<content>.*)$"
- labels:
    stream:
- timestamp:
    source: time
    format: RFC3339Nano
- output:
    source: content

📚️参考文档

  • How Grafana Labs Effectively Pairs Loki and Kubernetes Events | Grafana Labs
  • Configuration | Grafana Labs
  • What is the correct way to parse json logs in loki, promtail – Grafana Loki – Grafana Labs Community Forums

Grafana 系列文章

Grafana 系列文章

三人行, 必有我师; 常识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

正文完
 0