prometheus alertmanager 部署监控(二)

2022-05-25 13:56:19 浏览数 (1)

上回已经讲好快速部署prometheus alertmanager 这回接着如果配置报警,本文我主要以接入mysql报警为案例 进行全面的讲解 软加载监控报警

1、首先讲解一下prometheus.yml文件

代码语言:javascript复制
global:
  scrape_interval:     1s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 1s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration 主要连接alertmanage
alerting:
  alertmanagers:
  - static_configs:
    - targets:
       - localhost:9093   
# 这里我设置了默认的alertmanager装在同一机器上
# -localhost:9093 
# 大家可以替换成 alertmanager_server_ip:9093      

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
# 装载的 具体报警规则
rule_files:
  -  /usr/local/prometheus/rules/*.rules
  # - "first_rules.yml"
  # - "second_rules.yml"
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    static_configs:
    - targets: ['172.17.0.159:9090']
  - job_name: mysql
  # 这里的加载方式主要用了file_sd_configs 
  #  软加载了配置文件 consul方法更佳  欢迎大神普及
    file_sd_configs:
     - files: ['/usr/local/prometheus/mysql/*.json']

2、讲解一下alertmanager文件

可以用邮箱 webhook 企业微信等等 我这里以钉钉为例

代码语言:javascript复制
global:
  resolve_timeout: 1m
  smtp_smarthost: 'smtp.qiye.aliyun.com:465'
  smtp_from: 'monitor@xx.com'
  smtp_auth_username: 'monitor@xx.com'
  smtp_auth_password: 'xxxxxxxx#'
  smtp_require_tls: false
route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 10m
  receiver: 'webhook'
receivers:
- name: 'webhook'
 # email_configs:
 # - to: 'wml@zmjx.com'
  webhook_configs:
  #  没有什么可以讲的主要讲一下这个URL
  - url: 'http://localhost:8060/dingtalk/webhook1/send'
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

2.1 prometheus-webhook-dingtalk git仓库地址

我躺了很多坑了 当然要感谢作者无限付出 希望作者能努力优化

1、推荐大家不要用会转义的字符

2、postman时候先试一下

3、最后使用releases 自己编译很坑 用docker启动可能会有转义问题(笔者测试的时候坑了 无数次 )

rpm -ivh prometheus-webhook-dingtalk-0.3.0.linux-amd64.tar.gz

2.2 添加机器人获取webhook地址 (该机器需要连接钉钉接口外网)

代码语言:javascript复制
nohup ./prometheus-webhook-dingtalk --ding.profile="webhook1=https://oapi.dingtalk.com/robot/send?access_token=你机器人的token" &

这样就启动获取了一个URL地址:注意这个webhoo1 很关键的URL路径

代码语言:javascript复制
http://启动机器的ip:8060/dingtalk/webhook1/send

3、配置服务器的规则及客户端的agent(可以配置任何一台机器)

3.1 prometheus 下面配置如下

代码语言:javascript复制
     ###在该文件夹下添加json
     ##     - files: ['/usr/local/prometheus/mysql/*.json']
     ###   不要修改其他文件名 必须以*.json为结尾不然动态加载不出来
[root@grafana prometheus]# cat /usr/local/prometheus/mysql/usercenter.json
[
  {
    "targets": [
      "IP:9104"
    ],
    "labels": {
      "alias": "usercenter-master-mysql",
      "group": "mysql"
    }
  },
  {
    "targets": [
      "IP:10000"
    ],
    "labels": {
      "alias": "usercenter-slave-mysql",
      "group": "mysql"
    }
  }
]

3.2下载mysql_export(根据自己的需求,下载不同的版本)

代码语言:javascript复制
 https://github.com/prometheus/mysqld_exporter

3.3启动agent代理配置

代码语言:javascript复制
nohup /usr/local/prometheus/mysql/mysqld_exporter-0.12.0.linux-amd64/mysqld_exporter --config.my-cnf="/usr/local/prometheus/mysql/.trade.11000.master.cnf" --web.listen-address=":11000" &
代码语言:javascript复制
[root@grafana prometheus]# cat /usr/local/prometheus/mysql/.my.cnf
[client]
user=DB_USER
password=DB_PASSWORD
host=DB_URL

3.4 查看prometheus下面的状态 监控的数据就会出现 state UP 状态证明prometheus已经捕获得DB信息 证明已经连接成功

3.5 测试报警webhook报警

首先这个需要要使用prometheus这个语法 以up为例

代码语言:javascript复制
http://prometheus_server_ip:9093/graph?g0.range_input=1h&g0.expr=mysql_up&g0.tab=

使用例子

mysql_up

3.6最后设置rule规则

(不同的prometheus版本rule规则不一样 大家需要注意)

给个一个样本 大家自己参照

代码语言:javascript复制
groups:
- name: OS info #规则组名称
  rules:
  - alert: MYSQL_UP
    expr: mysql_up < 1
    for: 1m
    labels:
      project: alias
    annotations:
      summary: " mysql is down {{$labels.alias}}"
      description: "mysql is down  VALUE = {{ $value }}n  LABELS: {{ $labels }}"

3.7 钉钉出现报警 解决完出现 RESOLVED

另外推荐下面二个rule地址 非常全面 涉及覆盖点linux zk jmx mysql 希望能帮助 大家

代码语言:javascript复制
https://awesome-prometheus-alerts.grep.to/rules.html
https://github.com/samber/awesome-prometheus-alerts

结合上下文总结 本方案有如下几点缺点

1、rule不能做到动态加载 需要重启prometheus

2、file_sd_config 方法手工配置较为麻烦 随着机器数量增加不足 较为麻烦

3、prometheus本身 对分布式支持不太友好(笔者自己认为)

最后谢谢过程中 帮助我的 好朋友 好基友 我这次踩坑也踩的比较严重!!

兑吧-小徐 二维火-糯米 微拍堂-男神等等基友 过程帮我解决问题的朋友!!!

0 人点赞