• prometheus+alertmanager 企业微信告警


    一、应用安装启动

    1、软件准备

    alertmanager-0.24.0.linux-amd64.tar.gz
    blackbox_exporter-0.22.0.linux-amd64.tar.gz
    node_exporter-1.4.0.linux-amd64.tar.gz
    prometheus-2.40.0-rc.0.linux-amd64.tar.gz

    2、配置文件 

     cat /data/prometheus/prometheus.yml #根据自己情况更改

    1. global:
    2. scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
    3. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
    4. # scrape_timeout is set to the global default (10s).
    5. alerting:
    6. alertmanagers:
    7. - static_configs:
    8. - targets:
    9. - 这里填写alertmanagers的ip:9093
    10. # - alertmanager:9093
    11. rule_files:
    12. - "rules/*.rules" #这里定义rule文件
    13. # - "second_rules.yml"
    14. scrape_configs:
    15. # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
    16. - job_name: "prometheus"
    17. # metrics_path defaults to '/metrics'
    18. # scheme defaults to 'http'.
    19. static_configs:
    20. - targets: ["localhost:9090"]
    21. - job_name: '定义一个名称'
    22. metrics_path: /probe
    23. params:
    24. module: [blackbox_exporter里面的module名称]
    25. static_configs:
    26. - targets:
    27. - http://api的ip/api
    28. relabel_configs:
    29. - source_labels: [__address__]
    30. target_label: __param_target
    31. - source_labels: [__param_target]
    32. target_label: instance
    33. - target_label: __address__
    34. replacement: 这里填写blackbox_exporter的ip:9115
    35. - job_name: 'node'
    36. static_configs:
    37. - targets: ['localhost:9100']

     cat /data/prometheus/rules/node.rules #这是一个node 的rules配置,可以直接使用,无需更改

    1. groups:
    2. - name: 主机状态-监控告警
    3. rules:
    4. - alert: 主机状态
    5. expr: up == 0
    6. for: 1m
    7. labels:
    8. status: 非常严重
    9. severity: warning
    10. annotations:
    11. #summary: "服务器宕机"
    12. description: "服务器延时超过5分钟"
    13. - alert: CPU使用情况
    14. expr: 100-(avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by(instance)* 100) > 80
    15. for: 1m
    16. labels:
    17. status: 一般告警
    18. severity: warning
    19. annotations:
    20. #summary: "CPU使用率过高!"
    21. description: "CPU使用大于80%(目前使用:{{$value}}%)"
    22. - alert: 内存使用
    23. expr: round(100- node_memory_MemAvailable_bytes{instance!="10.152.120.25:9100"}/node_memory_MemTotal_bytes{instance!="10.152.120.25:9100"}*100) > 80
    24. for: 1m
    25. labels:
    26. status: 一般告警
    27. severity: warning
    28. annotations:
    29. # summary: "内存使用率过高"
    30. description: "内存使用率{{ $value }}%"
    31. - alert: 25-内存使用
    32. expr: round(100- node_memory_MemAvailable_bytes{instance=~"10.152.120.25:9100"}/node_memory_MemTotal_bytes{instance=~"10.152.120.25:9100"}*100) > 95
    33. for: 1m
    34. labels:
    35. status: 一般告警
    36. severity: warning
    37. annotations:
    38. #summary: "内存使用率过高"
    39. description: "内存使用率{{ $value }}%"
    40. - alert: IO性能
    41. expr: 100-(avg(irate(node_disk_io_time_seconds_total[1m])) by(instance)* 100) < 60
    42. for: 1m
    43. labels:
    44. status: 严重告警
    45. severity: warning
    46. annotations:
    47. # summary: "{{$labels.mountpoint}} 流入磁盘IO使用率过高!"
    48. description: "{{$labels.mountpoint }} 流入磁盘IO大于60%(目前使用:{{$value}})"
    49. - alert: 网络
    50. expr: ((sum(rate (node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 102400
    51. for: 1m
    52. labels:
    53. status: 严重告警
    54. severity: warning
    55. annotations:
    56. # summary: "{{$labels.mountpoint}} 流入网络带宽过高!"
    57. description: "{{$labels.mountpoint }}流入网络带宽持续2分钟高于100M. RX带宽使用率{{$value}}"
    58. - alert: TCP会话
    59. expr: node_netstat_Tcp_CurrEstab > 1000
    60. for: 1m
    61. labels:
    62. severity: warning
    63. status: 严重告警
    64. annotations:
    65. # summary: "{{$labels.mountpoint}} TCP_ESTABLISHED过高!"
    66. description: "{{$labels.mountpoint }} TCP_ESTABLISHED大于1000%(目前使用:{{$value}}%)"
    67. - alert: 磁盘容量
    68. expr: 100-(node_filesystem_free_bytes{fstype=~"ext4|xfs"}/node_filesystem_size_bytes {fstype=~"ext4|xfs"}*100) > 90
    69. for: 1m
    70. labels:
    71. status: 严重告警
    72. severity: warning
    73. annotations:
    74. # summary: "{{$labels.mountpoint}} 磁盘分区使用率过高!"
    75. description: "{{$labels.mountpoint }} 磁盘分区使用大于90%(目前使用:{{$value}}%)"

     cat /data/prometheus/rules/blackbox_http.rules  #这是自定义的api监控rules,需要根据自己情况更改

    1. groups:
    2. - name: 接口状态 #组的名字,在这个文件中必须要唯一
    3. rules:
    4. - alert: http-api #告警的名字,在组中需要唯一
    5. expr: probe_success{job="这里要对应job里面的名称"} == 0 #表达式, 执行结果为true: 表示需要告警
    6. for: 1s #超过多少时间才认为需要告警(即up==0需要持续的时间)
    7. labels:
    8. status: 非常严重
    9. severity: warning #定义标签
    10. annotations:
    11. description: "Job {{ $labels.job }} 中的接口 {{ $labels.instance }} 已经down掉."
    12. summary: '接口 {{ $labels.instance }} down ! ! !'

     cat /data/alertmanager/alertmanager.yml   #定义告警配置

    1. global:
    2. resolve_timeout: 5m #每5分钟检测一次是否恢复
    3. templates:
    4. - '/data/alertmanager/wechat.tmpl' # Alertmanager微信告警模板
    5. route:
    6. group_by: ['alertname']
    7. group_wait: 5s # 初次发送告警延时
    8. group_interval: 1m # 距离第一次发送告警,等待多久再次发送告警
    9. repeat_interval: 5m # 告警重发时间
    10. receiver: 'wechat'
    11. receivers:
    12. - name: 'wechat'
    13. wechat_configs:
    14. - corp_id: 'ww8f28' # 企业微信中企业ID
    15. to_party: '42' # 企业微信中创建的接收告警的告警部门ID
    16. # to_user: 'zhai' # 企业微信中创建的接收告警的单个人唯一ID
    17. agent_id: '100' # 企业微信中创建应用的AgentId
    18. api_secret: 'wiZIFkuo' # 企业微信中,Prometheus应用的Secret
    19. send_resolved: true
    20. inhibit_rules:
    21. - source_match:
    22. severity: 'critical'
    23. target_match:
    24. severity: 'warning'
    25. equal: ['alertname', 'dev', 'instance']

    cat /data/blackbox_exporter/blackbox.yml  

     

    1. modules:
    2. http_2xx:
    3. prober: http
    4. http_post_2xx:
    5. prober: http
    6. http:
    7. method: POST
    8. tcp_connect:
    9. prober: tcp
    10. pop3s_banner:
    11. prober: tcp
    12. tcp:
    13. query_response:
    14. - expect: "^+OK"
    15. tls: true
    16. tls_config:
    17. insecure_skip_verify: false
    18. grpc:
    19. prober: grpc
    20. grpc:
    21. tls: true
    22. preferred_ip_protocol: "ip4"
    23. grpc_plain:
    24. prober: grpc
    25. grpc:
    26. tls: false
    27. service: "service1"
    28. ssh_banner:
    29. prober: tcp
    30. tcp:
    31. query_response:
    32. - expect: "^SSH-2.0-"
    33. - send: "SSH-2.0-blackbox-ssh-check"
    34. irc_banner:
    35. prober: tcp
    36. tcp:
    37. query_response:
    38. - send: "NICK prober"
    39. - send: "USER prober prober prober :prober"
    40. - expect: "PING :([^ ]+)"
    41. send: "PONG ${1}"
    42. - expect: "^:[^ ]+ 001"
    43. icmp:
    44. prober: icmp
    45. icmp_ttl5:
    46. prober: icmp
    47. timeout: 5s
    48. icmp:
    49. ttl: 5
    50. ##################以上都是默认配置无需更改##############
    51. http_api: #定义模块名称,和prometheus的module一样
    52. prober: http
    53. timeout: 18s
    54. http:
    55. method: GET
    56. headers:
    57. token: 3579333KX4abK04i5
    58. Content-Type: application/json

    3、服务启动 

    1. #prometheus
    2. /data/prometheus/prometheus --config.file=prometheus.yml --log.level=debug &
    3. #备注 开启debug日志,方便差错
    4. #alertmanager
    5. /data/alertmanager/alertmanager --config.file=alertmanager.yml --log.level=debug &
    6. #blackbox_exporter
    7. /data/blackbox_exporter/blackbox_exporter --config.file=blackbox.yml &
    8. #node_exporter
    9. /data/node_exporter/node_exporter &

    二、企业微信配置

    企业ID

     部门ID

     告警AgentId和Secret

     

     配置可信ip(最新的必须加,否则连接失败)

     三、效果图

     

  • 相关阅读:
    [附源码]JAVA毕业设计高校学生社团管理(系统+LW)
    【微信读书】数据内容接口逆向调试01
    机器学习----奥卡姆剃刀定律
    linux常用命令
    Android问题笔记四十二:signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) 的解决方法
    基于vue+node+mysql的视频校对系统
    地理探测器原理介绍
    服务网格安全防护
    VOIP语音抓包、解码与带宽计算
    C#进阶06——多线程,预处理器指令
  • 原文地址:https://blog.csdn.net/zhangxueleishamo/article/details/127927362