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

news2024/12/29 16:55:11

前情提要

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

来自 emqx NameSpace 的 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 编写.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/336928.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows 10 Creators版本中的11个大亮点

导读微软在近日公布了有关明年Windows 10更新部分的大量功能&#xff0c;但该公司在其Creators更新版本中悄悄隐藏了远超出11项新的功能。其实&#xff0c;在这个更新包中还将包含许多内容&#xff0c;包括增加一个新的应用程序&#xff0c;以及针对Edge浏览器、地图应用程序和…

蓝牙耳机什么牌子好用又便宜?好用不贵的蓝牙耳机推荐

随着时代的进步&#xff0c;数码产品在人们日常生活中的使用频率越来越高&#xff0c;一部手机&#xff0c;一副耳机似乎已然成为人们出行必备。蓝牙耳机的发展速度很快&#xff0c;在众多的蓝牙耳机牌子中&#xff0c;什么牌子好用又便宜&#xff1f;下面&#xff0c;我来给大…

MySQL的四种安装

一、仓库安装 1、添加MySQL仓库 将MySQL-Yum存储库添加到系统的存储库列表中。这是一个一次性操作&#xff0c;可以通过安 装MySQL提供的RPM来执行。转到MySQL Yum存储库页面在MySQL开发板块。可以通过Web下载然后转到自己的RHEL9.1虚拟机上&#xff1b;也可以使用RHEL9上使用…

Java常见关键字总结

final,static,this,super 关键字总结 final 关键字static 关键字this 关键字super 关键字参考 static 关键字详解 static 关键字主要有以下四种使用场景 修饰成员变量和成员方法(常用)静态代码块静态内部类静态导包 补充内容 静态方法与非静态方法static{}静态代码块与{}非静态…

apache和nginx的TLS1.0和TLS1.1禁用处理方案

1、TLS1.0和TLS1.1是什么&#xff1f; TLS协议其实就是网络安全传输层协议&#xff0c;用于在两个通信应用程序之间提供保密性和数据完整性&#xff0c;TLS 1. 0 和TLS 1. 1 是分别是96 年和 06 年发布的老版协议。 2、为什么要禁用TLS1.0和TLS1.1传输协议 TLS1.0和TLS1.1协…

项目实战-NewFixedThreadPool线程池

目录 什么是线程池 线程池的类型 1.CachedThreadPool 2.FixedThreadPool 3.ScheduledThreadPool 4.SingleThreadPool 5.newWorkStealingPool 线程池的好处 1、线程池的重用 2、控制线程池的并发数 3、线程池可以对线程进行管理 线程池的示例 1.Client启动类 2.具体…

Linux中man手册的使用

在linux中&#xff0c;不管是库函数还是系统调用&#xff0c;都用到man手册来查看函数的三要素(功能、参数、返回值)&#xff0c;这里就详细的介绍一下man手册的使用。这里需要注意的是&#xff1a;对于初学者来说,不能将手册页当教程&#xff0c;因为它只是简明的参考资料. Li…

Linux进程控制详解

目录前言一、进程创建1.1 fork函数初识1.2 写时拷贝1.3 fork常规用法1.4 fork调用失败的原因二、进程终止2.1 进程终止时&#xff0c;操作系统做了什么&#xff1f;&#xff1f;2.2 进程终止的常见方式有哪些&#xff1f;&#xff1f;2.3 如何用代码终止一个进程三、进程等待3.…

Linux学习之操作系统认识

目录操作系统概念初识“管理”总结系统函数和库函数操作系统 概念 操作系统&#xff08;英语&#xff1a;Operating System&#xff0c;缩写&#xff1a;OS&#xff09;是一组主管并控制计算机操作、运用和运行硬件、软件资源和提供公共服务来组织用户交互的相互关联的系统软件…

了解并发编程

并发与并行的概念: 并发:一段时间内(假设只有一个CPU)执行多个线程,多个线程时按顺序执行 并行:同个时间点上,多个线程同时执行(多个CPU) 什么是并发编程? 在现代互联网的应用中,会出现多个请求同时对共享资源的访问情况,例如在买票,秒杀与抢购的场景中 此时就会出现线程安…

【排序算法】选择排序(Selection sort)

选择排序(Selection sort)是一种简单直观的排序算法。选择排序介绍它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素&#xff0c;然后将其存放到数列的起始位置&#xff1b;接着&#xff0c;再从剩余未排序的元素中继续寻找最小(or最大)元素&#xff0c;然后放到已排…

c/c++开发,无可避免的宏定义使用案例

一、c/c宏定义的来源 宏定义&#xff0c;就是用一个标识符来表示一个字符串&#xff0c;如果在后面的代码中出现了该标识符&#xff0c;那么就全部替换成指定的字符串。通常c/c宏定义这几处出处&#xff1a; 1&#xff09;最常见的就是来自于开发者编码过程中采用宏定义命令“#…

发烧友实测 | 飞凌嵌入式OKA40i-C开发板试用体验之远程视频监控

本篇试用报告由发烧友zealsoft提供&#xff0c;感谢zealsoft的支持。飞凌嵌入式会在电子发烧友和电路城论坛持续开展开发板有奖试用活动&#xff0c;更有京东E卡等着你&#xff01;欢迎大家的持续关注。“感谢飞凌嵌入式公司提供了本次OKA40i-C开发板的评测机会。上次我们介绍了…

网络流量传输MTU解析

基本概念 以太网的链路层对数据帧的长度会有一个限制&#xff0c;其最大值默认是1500字节&#xff0c;链路层的这个特性称为MTU&#xff0c;即最大传输单元 Maximum Transmission Unit&#xff0c;最大传输单元&#xff0c;指的是数据链路层的最大payload&#xff0c;由硬件网…

高压放大器在孔道灌浆非线性超声测试中的应用

实验名称&#xff1a;高压放大器在孔道灌浆非线性超声测试中的应用研究方向&#xff1a;无损检测测试目的&#xff1a;超声波作为频率高于20kHz的声波被广泛应用于各类结构的无损检测中&#xff0c;以超声波作为探伤波的无损检测法称为超声波无损检测法&#xff0c;简称超声波法…

嵌入式开发:通过嵌入式虚

嵌入式虚拟化为实现多核处理能力的优势提供了一种可扩展的机制。嵌入式应用中的虚拟化与其企业和桌面应用有许多共同之处。独特的嵌入式使用案例和专业的底层技术为嵌入式开发人员提供了优化性能和响应设计的新机会。在台式机、数据中心以及现在的嵌入式设计中采用多核技术可以…

React hooks之useState用法(一)

系列文章目录 学习React已经有很长的一段时间了&#xff0c;今天决定重新回顾一下跟React相关的一些知识点 文章目录系列文章目录结构如下一、hooks是什么&#xff1f;useState可以能做什么二、如何使用useState&#xff08;&#xff09;第一步&#xff1a;创建【函数组件&…

java 代码

java 分层架构的由来目录概述需求&#xff1a;设计思路实现思路分析参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive. ha…

运维必会:ansible剧本(piaybook)

playbooks 概述以及实例操作 Playbooks 组成部分&#xff1a; Inventory Modules Ad Hoc Commands Playbooks Tasks: 任务&#xff0c;即调用模块完成的某些操作 Variables: 变量 Templates: 模板 Handlers: 处理器&#xff0c;由某时间触发执行的操作 Roles: 角色 YAML 介绍…

Individual Tree Segmentation from LiDAR Point Clouds for Urban Forest Inventory

Abstract 本研究的目的是使用 LiDAR 点云数据开发单棵树级别的自动化城市森林清单的新算法。激光雷达数据包含三维结构信息&#xff0c;可用于估算树高、基高、树冠深度和树冠直径。这使得精确的城市森林库存可以细化到单棵树。与大多数已发布的从 LiDAR 派生的栅格表面检测单…