Prometheus 配置文档
文档说明:
是本人在去年公司做监控系统的时候在网上查询各个论坛,Prometheus 官网等等地方整合而来,文档中有部分配置字段属于自己通过不断尝试得到的.
关于热加载文件
目前来说只能让 Prometheus 自身热加载,但是 alertmanager 告警规则热加载,在官网找到使用方法,但是自己尝试多次,无法进行热加载.所以这是本文目前存在的问题.
文档亮点
自定义字段,通过web.hook 推送到接收告警的服务上去.然后可以自己定义规则.这是之前在网上没有找到的.我是去年的时候整理的,现在没接触过,不知道Prometheus 现在是否有新的变化和操作.以下是文档全篇.有问题可以留言和私聊.
下载安装包(忽略)
服务配置
-
Prometheus (确保已下操作在服务目录下)
1. 服务-热启动
nohup ./prometheus --web.enable-lifecycle --config.file=prometheus.yml &
2. 检验配置信息
./promtool check config prometheus.yml
3. 保存热加载prometheus.yml
curl -XPOST ip:9090/-/reload
4. 访问地址
http://ip:9090
5. 动态配置数据规则
配置注意都是: 后面跟着一个空格
prometheus.yml 原配置(静态规则)
global: scrape_interval: 15s evaluation_interval: 15s scrape_timeout: 5s alerting: alertmanagers: - static_configs: - targets: - alertmanager:9093 rule_files: scrape_configs: - job_name: 'prometheus' scrape_interval: 5s static_configs: metrics_path: '/metrics' - targets: ['localhost:9090']
参数对应参照
对应参数 描述 默认值 scrape_interval 全局每次数据收集的间隔 15s evaluation_interval 规则扫描时间间隔是15秒 1m scrape_timeout 超时时间 5s alertmanager 基于告警插件,监听IP 端口 一般为部署alertmanager服务的ip端口 可以配置多个 job_name 监控的服务名称 一般为监控服务对应的名称 rule_files -scrape_interval 这里如果单独设定的话,会覆盖全局设定的参数 默认5秒 metrics_path 监视项访问的URL路径 基于 prometheus 设置的插件 默认 ‘/metrics’ - targets 监控服务ip端口 监控服务(可以为多个节点) prometheus.yml 服务发现配置
将目前的配置文件,拆分3种文件
-
核心集中配置文件(prometheus.yml)
global: scrape_interval: 15s evaluation_interval: 15s alerting: alertmanagers: - static_configs: - targets: - 127.0.0.1:9093 rule_files: - "/opt/prometheus/prometheus-2.21.0.linux-amd64/rules/*.rules" scrape_configs: config. - job_name: 'prometheus' metrics_path: '/metrics' file_sd_configs: - files: - /opt/prometheus/prometheus-2.21.0.linux-amd64/conf.d/prometheus.json - job_name: 'server' file_sd_configs: - files: - /opt/prometheus/prometheus-2.21.0.linux-amd64/conf.d/server.json - job_name: 'mysql' file_sd_configs: - files: - /opt/prometheus/prometheus-2.21.0.linux-amd64/conf.d/mysql.json
-
告警规则配置 (.rules)
groups: - name: mysql rules: - alert: DOWN-00001 expr: up{job="mysql"} == 0 for: 1m labels: severity: critical annotations: summary: "Mysql服务宕机,服务节点为:{{ $labels.ip }}:{{$labels.port}}" description: "" - alert: QPS-HIGH-00002 expr: rate(mysql_global_status_questions[5m]) > 120 for: 2m labels: severity: warning annotations: summary: "{{$labels.instance}}: Mysql_High_QPS detected" description: "{{$labels.instance}}: Mysql opreation is more than 500 per second ,(current value is: {{ $value }})" - alert: MANY-CONNECT-00003 expr: rate(mysql_global_status_threads_connected[5m]) > 200 for: 2m labels: severity: warning annotations: summary: "{{$labels.instance}}: Mysql Too Many Connections detected" description: "{{$labels.instance}}: Mysql Connections is more than 100 per second ,(current value is: {{ $value }})" - alert: SLOW-QUERY-00004 expr: rate(mysql_global_status_slow_queries[5m]) > 3 for: 2m labels: severity: warning annotations: summary: "{{$labels.instance}}: Mysql_Too_Many_slow_queries detected" description: "{{$labels.instance}}: Mysql slow_queries is more than 3 per second ,(current value is: {{ $value }})" - alert: THREAD-STOP-00005 expr: mysql_slave_status_slave_sql_running != 1 for: 1m labels: severity: critical annotations: summary: "Instance {{ $labels.instance }} Sync Binlog is enabled" description: "SQL thread has stopped. This is usually because it cannot apply a SQL statement received from the master."
参数对应参照
对应参数 描述 默认值 - name 需要配置监控名称 一般为监控服务名称 - alert 这个属于监控服务的具体问题 目前我们做了内部规则,详情参考<告警规则定义文件> 定义–服务监控告警规则编码 expr 监控服务检测具体触发规则表达式 for 持续时间,多久获取不到触发告警 1m serverity 报警规则 warning / info/ critical/ none summary 自定义摘要 目前我们只针对该字段进行配置 description 自定义具体描述 -
监控服务的 ip:port(.json)
[ { "targets": [ "20.1.121.131:9104" ], "labels": { "job":"mysql", "port":"3306", "ip":"20.1.11.158", "systemId":"SYSTEM-MYSQL-20001", "env":"linux", "type":"1" } } ]
参数对应参照
对应参数 描述 默认值 targets 监控节点服务端口 允许监控多个节点服务 labels 当前这个节点 可以进行拓展字段 port ip systemId type 为内部定义字段 job 该参数与rules 配置文件中的 - name 应该保持一致 port 监控服务的端口 对应监控服务的端口 ip 监控服务的ip 对应监控服务的ip systemId 属于内部监控规则 详情参考<告警规则定义文件> 定义–系统服务编码定义 type 告警类型 1.违规操作 2.入侵攻击 3.信息测探 4.系统状态 目前默认为4 env 环境 默认 linux -
-
Grafana (确保已下操作在服务目录下)
1. 访问地址
http://ip:3000
2. 账号密码
admin/admin
3. 启动
nohup ./grafana-server &
-
Alertmanager (确保已下操作在服务目录下)
1. 访问地址
./alertmanager --config.file=alertmanager.yml &
2. 校验 alertmanager 配置信息
./amtool check-config alertmanager.yml
3.配置告警规则
alertmanager.yml
global: resolve_timeout: 5m route: group_by: ['alertname'] group_wait: 10s group_interval: 10s repeat_interval: 1m receiver: 'web.hook' receivers: - name: 'web.hook' webhook_configs: - url: 'http://20.1.11.159:2110/web/hook' send_resolved: true inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']
参数对应参照
对应参数 描述 resolve_timeout 解析超时时间 (5分钟) 当告警的状态有firing变为resolve的以后还要呆多长时间,才宣布告警解除。 group_by 根据标签分组 group_wait 发送告警等待时间,为了合并相同告警一起发送 group_interval 发送告警间隔时间 repeat_interval 重复告警时间,控制发送告警频率,根据情况设置 receiver 定义web.hook name 定义web.hook 这个是说 PrometheUS把告警发送给webhook,也就是一个http的url,当然这个url需要我们自己定义服务实现了 url 定于推送到的告警服务路径 send_resolved 当告警问题解决了是否也要通知一下 -
node_exporter (确保已下操作在服务目录下)
1. 运行命令
nohup ./node_exporter &
-
mysql_exporter (确保已下操作在服务目录下)
1. 配置 .my.cnf 文件 (没有就在当前目录下创建)
[client] host=172.31.54.234 user=root password=dxyt123
2. 运行命令 (根据配置目录不同变更目前的路径)
nohup /home/soft/mysqld_exporter-0.12.1.linux-amd64/mysqld_exporter --config.my-cnf=/home/soft/mysqld_exporter-0.12.1.linux-amd64/.my.cnf &