前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Alertmanager对接Loki实现日志告警 | 坑我已经帮你们踩好了

Alertmanager对接Loki实现日志告警 | 坑我已经帮你们踩好了

作者头像
Lu说
发布2022-06-07 20:22:40
4.5K2
发布2022-06-07 20:22:40
举报

前言

很多情况下,反映一个服务的健康状态,单从其服务可用性并不完全准确,反而服务的某些日志可以准确的反映出这个服务是否处于亚健康状态,是否即将出现异常,从而从一定程度进行故障预测和干预。

如下图所检索出来的WARNING 日志,大量的WARNINGERROR或者OOM这样的日志可能预示着应用即将出现异常,这时候基于日志的告警功能就非常有必要。

Alertmanager对接Loki

我们知道Alertmanager是可以查询Loki的

修改Loki配置文件,在loki-local-config.yml 添加以下内容:

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

rule_path: /monitor/loki/rules-temp 为rules临时规则存储目录。

然后在/monitor/loki/rules 下创建名为fake的文件夹,将rule放在该文件夹下。为什么要创建名为fake的文件夹,这个因为Loki中定义单租户的Loki系统中,fake为其默认租户名,如果是多租户系统,则/monitor/loki/rules 下多个其他名字的文件夹也可以。

配置告警规则

这里以下面rule文件为例

代码语言:javascript
复制
# cat election-log-alert.yml 
groups:
  - name: Too-many-election-logs-alert
    rules:
    - alert: Too-many-election-logs-alert
      expr: count_over_time({host=~"db01|db02|db03|db04"}|~"election"[10m]) > 10
      for: 2m
      labels:
        severity: warnning
        instance: " 主机{{ $labels.host }}的日志:  {{ $labels.filename }}"
      annotations:
        summary: Too many election logs in dolphindb logs
        description:  10分钟之内DolphinDB日志内election日志出现10次以上

重启Loki,重启脚本在上一篇推文中有写到。看下企业微信,现在可以收到告警啦!

值得注意的是,修改rule配置文件并不需要重启Loki,在Loki的运行日志里面可以看到如下日志,提示rule文件正在被修改

如果不确定rule中的表达式写的是否正确,可以在Grafana先进行预跑,如下图所示:

Loki告警消息格式

Loki告警消息内容示例如下:

代码语言:javascript
复制
{
    'receiver': 'wechat-bot',
     'status': 'firing',
     'alerts': [
        {
            'status': 'firing',
             'labels': {
                'alertname': '大量报错日志',
                 'filename': '/ssd/ssd0/agentlog/P1-node1.log',
                 'host': 'db01',
                 'instance': 'logs',
                 'severity': 'page'
            },
             'annotations': {
                'description': 'Too many error logs',
                 'summary': 'Too many error logs'
            },
             'startsAt': '2022-03-24T12:15:50.94Z',
             'endsAt': '0001-01-01T00:00:00Z',
             'generatorURL': '/graph?g0.expr=%28count_over_time%28%7Bhost%3D%22db01%22%7D%5B1m%5D%29+%3E%3D+0%29&g0.tab=1',
             'fingerprint': '84a77cf1f548f633'
        },

上面labels的元素包含了rule所定义的元素和Promtail收集时候定义的元素。filename即是path下的文件名。相关配置文件如下所示:

代码语言:javascript
复制
[root@db15 fake]# cat rate-alert.yml 
groups:
  - name: rate-alerting
    rules:
    - alert: 大量报错日志
      expr: count_over_time(({host="db01"})[2m]) <0 
      for: 30m
      labels:
        severity: warnning
        instance: "logs"
      annotations:
        summary: Too many error logs
        description: Too many error logs
代码语言:javascript
复制
[root@db01 promtail]# cat promtail-local-config.yml 
...
- job_name: dolphindb-datanodelog
  static_configs:
  - targets:
      - localhost
    labels:
#      #job: datanodelog
      host: db01
      __path__: /ssd/ssd0/agentlog/P*node*.log
...

如果想知道Loki有哪些告警,他们的详细信息是什么,可以查询其API:

代码语言:javascript
复制
curl -s http://localhost:3100/prometheus/api/v1/alerts

相关文档在这里:https://grafana.com/docs/loki/latest/api

总结

好了,运维的工作目的无非就是解放双手,不要等问题出现再来手忙脚乱,应该节约出更多时间投入到系统优化和运维智能化上面去。

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

本文分享自 Hadoop集群运维 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Alertmanager对接Loki
  • 配置告警规则
  • 总结
相关产品与服务
Grafana 服务
Grafana 服务(TencentCloud Managed Service for Grafana,TCMG)是腾讯云基于社区广受欢迎的开源可视化项目 Grafana ,并与 Grafana Lab 合作开发的托管服务。TCMG 为您提供安全、免运维 Grafana 的能力,内建腾讯云多种数据源插件,如 Prometheus 监控服务、容器服务、日志服务 、Graphite 和 InfluxDB 等,最终实现数据的统一可视化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档