loki的告警规则同步方案

前言

很多情况下,反映一个服务的健康状态,单从其服务可用性并不完全准确,反而服务的某些日志可以准确的反映出这个服务是否处于亚健康状态,是否即将出现异常,从而达到提前发现服务问题进行解决的效果,那么这时候基于日志的告警功能就非常有必要

loki的告警对接

我们这里使用alertmanager对接loki的告警
在loki的配置文件中添加如下选项

# rules规则存储
# 主要支持本地存储(local)和对象文件系统(azure, gcs, s3, swift)
ruler:
  storage:
    type: local
    local:
      directory: /opt/loki/rules # Loki告警规则存储路径
  rule_path: /opt/loki/rules-temp
  alertmanager_url: http://alertmanager:9093 # alertmanager地址和端口
  ring:
    kvstore:
      store: inmemory
  enable_api: true
  enable_alertmanager_v2: true

这里有几点需要注意的:

  1. loki会将ruler.storage.local.directory里指定的里面的规则文件加载到自己的文件目录: ruler.rule_path
  2. 修改完规则文件不需要重启loki,loki默认1分钟会加载一次规则文件到自己的文件临时目录
  3. 我们的规则文件地址要放到fake目录下,原因是cortextool was intended to run against multi-tenant Loki, commands need an --id= flag set to the Loki instance ID or set the environment variable CORTEX_TENANT_ID. If Loki is running in single tenant mode, the required ID is fake (yes we know this might seem alarming but it’s totally fine, no it can’t be changed), loki是支持多租户的,如果我们是单租户的话,是需要在ruler.storage.local.directory指定的目录下面新建一个fake目录,我们的规则文件要存储到这个目录

loki规则做到页面上去统一操作

背景:

  1. 我们需要叫用户不需要登录环境去看配置文件就知道有哪些规则文件已经在生效
  2. 我们存在几十个环境,每个环境的规则配置都不完全一致,如果用普通文件的方式维护,维护人员工作量巨大

方案:

由于环境巨多,采用对象文件系统的话需要为每个环境配置不同的文件系统,所以使用本地local的方式进行管理,那么这时候就需要一个同步规则的工具来进行同步

以监控平台为中心的架构

我们以监控平台作为loki的告警规则管理中心,以同步工具为媒介连接监控平台与loki
请添加图片描述
通过k8s的边车模式在同一个pod中启动两个容器(loki and sync_rule_agent),两个容器挂载同一个volume用于同步告警规则

监控平台和规则同步工具的通信方式

请添加图片描述
最终效果:

  1. 将规则放到平台上管理既降低了管理难度同时由于规则在保存时会做校验,保证了规则的正确性
  2. 更好的做好规则的审计
  3. 可以做到在一到两分钟生效新增的规则
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值