娃哈哈好喝-真的!
技术够用就行,吃好喝好睡好!

loki+alertmanager+telegram告警

loki+alertmanager(webhook)+telegram告警

1、软件环境:

loki:2.4.1,alertmanager:0.24

2、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目录下:

[root@centos fake]# pwd
/data/loki/rules/fake
[root@centos fake]# ls
alert.yml
[root@centos fake]# cat alert.yml
groups:
 - name: nginx500状态太多了
  rules:
   - alert: nginx500状态太多了2
    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 }} 状态码多了111"
      description:  "1分钟内 {{ $labels.job }} 状态码 {{ $labels.host }} 增多111"
[root@centos fake]#
#$labels变量的使用:需要在查询语句by后面加入要使用的标签,之后才可以在通过类似$labels.host的方式调用,instance、summary、description这些项目的内容需要写在引号内""单双都可以

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

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

3、alertmanager配置

配置文件:

[root@centos alertmanager]# ls
alertmanager alertmanager.yml amtool data LICENSE nohup.out NOTICE  restart.sh
[root@centos 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']
[root@centos 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版本,需要用的模块如下:

[root@centos ~]# 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)
[root@centos ~]#

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

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

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

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

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

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

完活

赞(0)
未经允许不得转载:娃哈哈好喝 » loki+alertmanager+telegram告警
分享到: 更多 (0)