转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247492374&idx=1&sn=d09f6db62374dd793158f660f332a19d&chksm=fdbaec0bcacd651d765d415d9e0fc7e33aa52f056ad7444fb42af032240488f057091c914477&cur_album_id=1837018771652149250&scene=190#rd

前文我们通过 Promtail 的 metrics 阶段的方式虽然可以实现我们的日志报警功能,但是还是不够直接,需要通过 Promtail 去进行处理,那么我们能否直接通过 Loki 来实现报警功能呢?其实在 Loki2.0 版本就提供了报警功能,其中有一个 Ruler 组件可以持续查询一个 rules 规则,并将超过阈值的事件推送给 AlertManager 或者其他 Webhook 服务,这也就是 Loki 自带的报警功能了,而且是兼容 AlertManager 的。

首先我们需要开启 Loki Ruler 组件,同样更新 loki-stack 安装的 Values 文件(可以去掉 metrics 阶段的方式):

# values-prod.yaml
loki:
enabled: true
persistence:
enabled: true
accessModes:
- ReadWriteOnce
size: 2Gi
storageClassName: nfs-storage
# Needed for Alerting: https://grafana.com/docs/loki/latest/alerting/
config:
ruler:
# rules规则存储
# 主要支持本地存储(local)和对象文件系统(azure, gcs, s3, swift)
storage:
type: local
local:
directory: /rules
rule_path: /tmp/scratch # rules临时规则文件存储路径
alertmanager_url: http://alertmanager-main.monitoring.svc:9093 # alertmanager地址
ring: # ruler服务的一致性哈希环配置,用于支持多实例和分片
kvstore:
store: inmemory
enable_api: true
# 配置报警规则
alerting_groups:
- name: nginx-rate
rules:
- alert: LokiNginxRate
expr: sum(rate({app="nginx"} |= "error" [1m])) by (job)
/
sum(rate({app="nginx"}[1m])) by (job)
> 0.01
for: 1m
labels:
severity: critical
annotations:
summary: loki nginx rate
description: high request latency promtail:
enabled: true grafana:
enabled: true
service:
type: NodePort
persistence:
enabled: true
storageClassName: nfs-storage
accessModes:
- ReadWriteOnce
size: 1Gi

我们首先通过 loki.config.ruler 对 Ruler 组件进行配置,比如指定 Alertmanager 的地址,规则存储方式等,然后通过 loki.alerting_groups 配置了报警规则,Loki 的 rulers 规则和结构与 Prometheus 是完全兼容,唯一的区别在于查询语句(LogQL)不同,在Loki中我们用 LogQL 来查询日志,一个典型的 rules 配置文件如下所示:

groups:
# 组名称
- name: xxxx
rules:
# Alert名称
- alert: xxxx
# logQL查询语句
expr: xxxx
# 产生告警的持续时间 pending.
[ for: | default = 0s ]
# 自定义告警事件的label
labels:
[ : ]
# 告警时间的注释
annotations:
[ : ]

比如我们这里配置的规则 sum(rate({app="nginx"} |= "error" [1m])) by (job) / sum(rate({app="nginx"}[1m])) by (job) > 0.01 表示通过日志查到 nginx 日志的错误率大于1%就触发告警,同样重新使用上面的 values 文件更新 Loki:

更新完成后我们查看 Loki 的日志可以看到一些关于上面我们配置的报警规则的信息:

$ kubectl logs -f loki-0 -n logging
......
level=info ts=2021-05-15T08:52:48.25436331Z caller=metrics.go:83 org_id=..data traceID=7a526c23619c6b4e latency=fast query="sum by(job)(rate({app=\"nginx\"} |= \"error\"[1m])) / sum by(job)(rate({app=\"nginx\"}[1m])) > 0.01" query_type=metric range_type=instant length=0s step=0s duration=6.615062ms status=200 throughput=2.3MB total_bytes=15kB
level=info ts=2021-05-15T08:53:08.271608857Z caller=metrics.go:83 org_id=..2021_05_15_08_49_25.017497657 traceID=2d7b255ccae2692e latency=fast query="sum by(job)(rate({app=\"nginx\"} |= \"error\"[1m])) / sum by(job)(rate({app=\"nginx\"}[1m])) > 0.01" query_type=metric range_type=instant length=0s step=0s duration=55.011001ms status=200 throughput=297kB total_bytes=16kB

同样在1m之内如果持续超过阈值,则会真正触发报警规则,触发后我们在 Alertmanager 也可以看到对应的报警信息了:

到这里我们就完成了使用 Loki 基于日志的监控报警。

使用 Loki 进行日志报警(二)的更多相关文章

  1. 使用 Loki 进行日志报警(一)

    转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247492352&idx=1&sn=9c0cc7927b ...

  2. 学习Coding-iOS开源项目日志(二)

    继续前篇:<学习Coding-iOS开源项目日志(一)>,接着本第二篇<学习Coding-iOS开源项目日志(二)>讲解Coding-iOS开源项目. 前言:作为初级程序员,想 ...

  3. yhd日志分析(二)

    yhd日志分析(二) 继续yhd日志分析,统计数据 日期 uv pv 登录人数 游客人数 平均访问时长 二跳率 独立ip数 1 分析 登录人数 count(distinct endUserId) 游客 ...

  4. SpringBoot初始教程之日志处理(二)

    SpringBoot初始教程之日志处理(二) 1.介绍 SpringBoot默认是采用logback进行日志处理.Logback是由log4j创始人设计的又一个开源日志组件.Logback是由log4 ...

  5. Docker 部署ELK之Sentinl日志报警

    前篇文章简单介绍了Docker 部署ELK,以及使用filebeat收集java日志.这篇我们介绍下日志报警配置,这里我们使用Sentinl插件. 1.修改kibana参数 进入elk容器,修改对应参 ...

  6. 基于Flask框架搭建视频网站的学习日志(二)

    基于Flask框架搭建视频网站的学习日志(二)2020/02/02 一.初始化 所有的Flask程序都必须创建一个程序实例,程序实例是Flask类的对象 from flask import Flask ...

  7. docker容器使用loki收集日志

    docker-compose安装loki套件(loki+promtail+grafana) loki进行日志聚合处理  类似elk中的es promtail是日志收集,类似elk中的logstash ...

  8. ELK日志报警插件ElastAlert并配置钉钉报警

    文章转载自:https://www.cnblogs.com/uglyliu/p/13118386.html ELK日志报警插件ElastAlert 它通过将Elasticsearch与两种类型的组件( ...

  9. 安装 loki 轻量级日志监控系统

    文章转载自:https://www.cnblogs.com/flypig666/archive/2004/01/13/14151801.html 从本文中学习到的是docker-compose相关命令 ...

随机推荐

  1. python单元测试框架笔记

    目录 单元测试概述 什么是单元测试 单元测试什么进行? 单元测试由谁负责? 单元测试需要注意 单元测试覆盖类型 python 单元测试框架 unittest pytest 测试框架 单元测试概述 什么 ...

  2. 基于MATLAB静态目标分割的药板胶囊检测

    一.目标 1 将药板从黑色背景中分离(药板部分显示为白色,背景显示为黑色): 2 根据分割结果将药板旋转至水平: 3 提取药板中的药丸的位置信息: 二.方法描述 处理图像如下: (1)首先将图像转为灰 ...

  3. 快来体验快速通道,netty中epoll传输协议详解

    目录 简介 epoll的详细使用 EpollEventLoopGroup EpollEventLoop EpollServerSocketChannel EpollSocketChannel 总结 简 ...

  4. APISpace 全球快递物流查询API接口 免费好用

    前言   随着我国电子商务的迅猛发展,物流行业也开始突飞猛进,人们的日常生活越来越离不开快递服务,查快递.寄快递的需求越来越大,随之而来,常用快递接口的需求也越来越大. 全国快递查询接口,支持各大快递 ...

  5. CSDN 原力(声望,影响力) -- 设计草案

    目标 CSDN 希望成为开发者学习,成长和成就的平台.我们已经有很多功能来支持开发者的职业成长了, 如何衡量成就呢?我们希望用 原力 (以前也叫 影响力,声望) 来体现用户的成就, 并希望用原力来帮助 ...

  6. Stream流中的常用方法

    count package com.yang.Test.StreamStudy; import java.util.stream.Stream; /** * 统计荷属:count * 正如旧集合Col ...

  7. python将命令输出写入文件或临时缓存

    python将命令输出写入文件 将文件写入到对应文件,方便后期处理或保存 def write_file(file_path): with open(file=file_path, mode=" ...

  8. PKUSC 2022 口胡题解

    \(PKUSC\ 2022\)口胡题解 为了更好的在考试中拿分,我准备学习基础日麻知识(为什么每年都考麻将 啊啊啊) 首先\(STO\)吉老师\(ORZ,\)真的学到了好多 观察标签发现,这套题覆盖知 ...

  9. Spring的简单使用(3)

    一:SM框架的整合: 所需要的依赖: <dependency> <groupId>junit</groupId> <artifactId>junit&l ...

  10. 高效能团队的Java研发规范(进阶版)

    目前大部分团队是使用的阿里巴巴Java开发规范,不过在日常开发中难免遇到覆盖不到的场景,本文在阿里巴巴Java开发规范基础上,补充一些常用的规范,用于提升代码质量及增强代码可读性. 编程规约 1.基础 ...