前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Grafana 系列文章(十三):如何用 Loki 收集查看 Kubernetes Events

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

作者头像
东风微鸣
发布2022-04-22 14:36:21
9180
发布2022-04-22 14:36:21
举报
文章被收录于专栏:东风微鸣技术博客

前情提要

1.基于 Kubernetes Events 的告警通知实现[1]

概述

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

Kubernetes Events 可以被当做是日志来处理,格式也和日志很像,都包括:

1.时间

2.组件

3.原因

4....

但是,Kubernetes 默认只持久化了一个小时的事件,以减少 etcd 的负载。所以,考虑利用 Loki 存储和查询这些 Events。

实现

看过 我之前的文章[2] 的可以知道,kubernetes-event-exporter[3] 可以实现对 Kubernetes Events 的收集。

那我们就利用 kubernetes-event-exporter, 通过最简单的 stdout 方式来输出 json 格式的 event.

另外,再利用 Promtail 的 管道配置[4],将 NameSpace 作为附加标签添加到导出到 Loki 的日志中。

kubernetes-event-exporter 配置

如下:

代码语言:javascript
复制
logLevel: error
logFormat: json
trottlePeriod: 5
route:
  routes:
    - match:
        - receiver: "dump"
receivers:
  - name: "dump"
    stdout: { }

Promtail 配置

如下:

代码语言:javascript
复制
...
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, 如下图:

来自 emqx NameSpace 的 Events

🎉🎉🎉

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

❓️疑难解答

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

错误的日志格式

代码语言:javascript
复制
2022-04-20T22:26:19.526448119+08:00 stderr F I0420 {...json...}

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

但是默认安装 Loki 的时候,配置文件里却用的是 docker 的 stage parser, 导致日志格式异常。初始的配置如下:

代码语言:javascript
复制
...
- job_name: kubernetes-pods-name
  pipeline_stages:
    - docker: {}
...    

Docker 的日志格式如下:

代码语言:javascript
复制
`{"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 的日志格式如下:

代码语言:javascript
复制
2019-01-01T01:00:00.000000001Z stderr P some log message

所以如上文所示,要根据自己的 container runtime 选择合适的 stage parser.

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

代码语言:javascript
复制
- 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[5]

•Configuration | Grafana Labs[6]

•What is the correct way to parse json logs in loki, promtail - Grafana Loki - Grafana Labs Community Forums[7]

Grafana 系列文章

Grafana 系列文章[8]

References

[1] 基于 Kubernetes Events 的告警通知实现: https://ewhisper.cn/posts/48832/ [2] 我之前的文章: https://ewhisper.cn/posts/48832/ [3] kubernetes-event-exporter: https://github.com/opsgenie/kubernetes-event-exporter [4] 管道配置: https://grafana.com/docs/loki/latest/clients/promtail/pipelines [5] How Grafana Labs Effectively Pairs Loki and Kubernetes Events | Grafana Labs: https://grafana.com/blog/2019/08/21/how-grafana-labs-effectively-pairs-loki-and-kubernetes-events/ [6] Configuration | Grafana Labs: https://grafana.com/docs/loki/latest/clients/promtail/configuration/ [7] What is the correct way to parse json logs in loki, promtail - Grafana Loki - Grafana Labs Community Forums: https://community.grafana.com/t/what-is-the-correct-way-to-parse-json-logs-in-loki-promtail/51974 [8] Grafana 系列文章: https://ewhisper.cn/tags/Grafana/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 东风微鸣技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前情提要
  • 概述
  • 实现
    • kubernetes-event-exporter 配置
      • Promtail 配置
      • ❓️疑难解答
      • 📚️参考文档
      • Grafana 系列文章
        • References
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档