技术迫于生活!
生活迫于诗和远方!

loki+alertmanager(webhook)+telegram告警

1、软件环境:

loki:2.4.1,alertmanager:0.24,alertmanager-webhook-telegram-python:0.4

2、loki配置

loki的全部配置,主要看告警配置,loki怎么用可以参考本站其他文章

auth_enabled: false

server:
  http_listen_port: 3100
  grpc_listen_port: 9096

common:
  path_prefix: /data/loki
  storage:
      filesystem:
          chunks_directory: /data/loki/chunks
          rules_directory: /data/loki/rules
  replication_factor: 1
  ring:
      instance_addr: 127.0.0.1
      kvstore:
          store: inmemory

schema_config:
  configs:
       - from: 2022-08-08
        store: boltdb-shipper
        object_store: filesystem
        schema: v11
        index:
            prefix: index_
            period: 24h
#告警配置
ruler:
storage:
  type: local
  local:
    directory: /data/loki/rules
rule_path: /data/loki/rules/tmp
alertmanager_url: http://172.20.20.169:9093
ring:
  kvstore:
    store: inmemory
enable_api: true
enable_alertmanager_v2: true

limits_config:
reject_old_samples: true   # 是否拒绝旧样本
reject_old_samples_max_age: 72h   # 72小时之前的样本被拒绝

chunk_store_config:
max_look_back_period: 72h  # 为避免查询超过保留期的数据,必须小于或等于下方的时间值
table_manager:
retention_deletes_enabled: true   # 保留删除开启
retention_period: 72h  # 超过72h的块数据将被删除

directory: /data/loki/rules 这个目录是保存告警规则配置文件的,需要在这个目录下创建一个fake目录,为什么是fake而不是其他名字,查了资料说是单服务的loki是使用fake这个用户起的服务,而分布式的不需要此目录,需要将告警规则配置文件放在fake目录下:

[[email protected] fake]# pwd
/data/loki/rules/fake
[[email protected] fake]# ls
alert.yml
[[email protected] fake]# cat alert.yml 
groups:
  - name: nginx500状态太多了
    rules:
    - alert: nginx500状态太多了
      expr: sum by (host,job,status) (count_over_time({host=~"20.161"} | json |status = 200 |  __error__="" [1m])) > 0
      for: 1m
      labels:
        severity: warnning
        instance: "{{ $labels.host }}"
      annotations:
        summary: "{{ $labels.status }} 状态码多了"
        description:  "1分钟内 {{ $labels.job }} 状态码 {{ $labels.host }} 增多"
[[email protected] fake]# 
#$labels变量的使用:需要在查询语句by后面加入要使用的标签,之后才可以在通过类似$labels.host的方式调用,instance、summary、description这些项目的内容需要写在引号内""单双都可以

上面的告警规则是测试监控nginx状态码为500和304在1分钟内的数量大于100机会触发

rule_path: /data/loki/rules/tmp 这个是告警规则临时目录

3、alertmanager配置

配置文件:

[[email protected] alertmanager]# ls
alertmanager  alertmanager.yml  amtool  data  LICENSE  nohup.out  NOTICE  restart.sh
[[email protected] alertmanager]# cat alertmanager.yml 
route:
  # 报警分组
  group_by: ['alertname']
  # 在组内等待所配置的时间,如果同组内,10秒内出现相同报警,在一个组内出现。
  group_wait: 10s
  # 如果组内内容不变化,合并为一条警报信息,1m后发送。
  group_interval: 1m
  # 发送报警间隔,如果指定时间内没有修复,则重新发送报警。
  repeat_interval: 1m
  receiver: 'web.hook'
receivers:
  - name: 'web.hook'
    webhook_configs:
      - url: 'http://172.20.20.169:9119/alert'
        send_resolved: true
        #这里要根据下一步中web认证来配置
        http_config:
          basic_auth:
            username: 'alert'
            password: '123456'
​
# 抑制器配置
inhibit_rules:
  # 源标签警报触发时抑制含有目标标签的警报,在当前警报匹配 severity: 'critical'
  - source_match:
      severity: 'critical'
    # 目标标签值正则匹配,可以是正则表达式如: ".*MySQL.*"
    target_match:
      severity: 'warning'
    # 确保这个配置下的标签内容相同才会抑制,也就是说警报中必须有这三个标签值才会被抑制。
    equal: ['alertname', 'dev', 'instance']
[[email protected] alertmanager]#

告警使用webhook方式,url地址为python版的telegram接口

4、alertmanager-webhook-telegram-python

脚本下载地址:

https://github.com/nopp/alertmanager-webhook-telegram-python

下载后脚本需要修改的地方

#配置web访问认证,true为开启,如果这里开启了认证需要在alertmanager配置中添加认证的配置,见上一步配置文件中的说明
app.config['BASIC_AUTH_FORCE'] = True
app.config['BASIC_AUTH_USERNAME'] = 'alert'
app.config['BASIC_AUTH_PASSWORD'] = '123456'

# bot机器人的id
bot = telegram.Bot(token="56XXXXXXXXXXXXXXXXXXXXXU")
#监听地址和端口
app.run(host='0.0.0.0', port=9119)

安装需要的依赖,首先需要使用python3版本,需要用的模块如下:

[[email protected] ~]# pip3 list
certifi (2022.6.15)
Flask (2.0.3)
Flask-BasicAuth (0.2.0)
python-dateutil (2.8.2)
python-telegram-bot (13.12)
telegram (0.0.1)
[[email protected] ~]#

没有的可以通过pip3 install安装,启动程序

[[email protected] alertmanager-telegram]# pwd
/data/alertmanager-telegram
[[email protected] alertmanager-telegram]# ls
docker nohup.out README.md requirements.txt telegramalert.py
[[email protected] alertmanager-telegram]# python3 ./telegramalert.py

telegramalert.py这个文件是被我改了名字,可以使用默认的名字

[r[email protected] alertmanager-telegram]# netstat -tunlap| grep python3
tcp        0      0 0.0.0.0:9119            0.0.0.0:*               LISTEN      93847/python3      
[[email protected] alertmanager-telegram]#
5、测试

当有告警触发时可以通过alertmanager管理页面看到此告警

同时在telegram中也会收到告警信息

完活

赞(1) 打赏
转载请说明出处:娃哈哈好喝 » loki+alertmanager(webhook)+telegram告警
分享到: 更多 (0)