vps交流

【alertmanager】微信告警,监控云小鸡状态


本帖最后由 rogerskys 于 2022-2-14 19:54 编辑

原文:https://i4t.com/5260.html

效果图
【alertmanager】微信告警,监控云小鸡状态

使用方法
AlertManager 安装
部署Alertmanager目前包含二进制包、容器以及源码方式安装,官方推荐使用docker容器运行,这里默认我就安装docker容器运行

AlertManager配置文件编写

mkdir /etc/prometheus/alertmanager
vim /etc/prometheus/alertmanager/config.yml
global:
  resolve_timeout: 5m
  http_config:
    follow_redirects: true
  smtp_hello: localhost
  smtp_require_tls: true
  pagerduty_url: ‘https://events.pagerduty.com/v2/enqueue’
  opsgenie_api_url: ‘https://api.opsgenie.com/’
  wechat_api_url: ‘https://qyapi.weixin.qq.com/cgi-bin/ ‘
  wechat_api_corp_id: wwcxxxxxxxx #企业id
  victorops_api_url: ‘https://alert.victorops.com/integrations/generic/20131114/alert/’
route:
  receiver: abcdocker #对应下面receivers中的name
  continue: false
  group_wait: 30s
  group_interval: 3m
  repeat_interval: 3m
receivers:
– name: abcdocker
  wechat_configs:
  – send_resolved: true
    http_config:
      follow_redirects: true
    api_secret: f2xxxxx # 申请企业微信应用后生成的密码
    corp_id: wwc1xxx
    message: ‘{{ template "wechat.default.message" . }}’
    api_url: https://qyapi.weixin.qq.com/cgi-bin/
    to_user: CongYuHong #发送到某一用户也可以 @all 就是群组全员发送
    to_party: ‘{{ template "wechat.default.to_party" . }}’
    to_tag: ‘{{ template "wechat.default.to_tag" . }}’
    agent_id: "1000004" #申请企业微信应用id
    message_type: text
templates:
– /etc/alertmanager/template/*.tmpl #告警模板路径

编写发送企业微信告警模板

mkdir /etc/prometheus/alertmanager/template -p
vim /etc/prometheus/alertmanager/template/WeChat.tmpl
{{ define "wechat.default.message" }}
{{- if gt (len .Alerts.Firing) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
**********告警通知**********
告警类型: {{ $alert.Labels.alertname }}
告警级别: {{ $alert.Labels.severity }}
{{- end }}
=====================
告警主题: {{ $alert.Annotations.summary }}
告警详情: {{ $alert.Annotations.description }}
故障时间: {{ $alert.StartsAt.Local }}
{{ if gt (len $alert.Labels.instance) 0 -}}故障实例: {{ $alert.Labels.instance }}{{- end -}}
{{- end }}
{{- end }}
{{- if gt (len .Alerts.Resolved) 0 -}}
{{- range $index, $alert := .Alerts -}}
{{- if eq $index 0 -}}
**********恢复通知**********
告警类型: {{ $alert.Labels.alertname }}
告警级别: {{ $alert.Labels.severity }}
{{- end }}
=====================
告警主题: {{ $alert.Annotations.summary }}
告警详情: {{ $alert.Annotations.description }}
故障时间: {{ $alert.StartsAt.Local }}
恢复时间: {{ $alert.EndsAt.Local }}
{{ if gt (len $alert.Labels.instance) 0 -}}故障实例: {{ $alert.Labels.instance }}{{- end -}}
{{- end }}
{{- end }}
{{- end }}
docker运行alertmanager,这里我挂载写的是目录,因为告警格式也需要挂载下

docker run -d -p 9103:9093 –name alertmanager   
-v /etc/prometheus/alertmanager:/etc/alertmanager   
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime  
docker.io/prom/alertmanager:latest   
–config.file=/etc/alertmanager/config.yml
#由于时区问题,我们将alertmanager时区挂载为上海
安装完alertmanager可以直接访问 IP:9013

四 、告警规则设置
创建我们创建目录 (最好和prometheus配置文件在一个目录)

mkdir /etc/prometheus/rules    #创建高级规则目录
接下来我们添加Node exporter告警规则

[root@prometheus rules]# vim /etc/prometheus/rules/node_exporter.yaml
groups:
    – name: 主机状态-监控告警
      rules:
      – alert: 主机状态
        expr: up == 0
        for: 1m
        labels:
          status: 很是严重
        annotations:
          summary: "{{$labels.instance}}:服务器宕机"
          description: "{{$labels.instance}}:服务器延时超过5分钟"
      – alert: CPU使用状况
        expr: 100-(avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by(instance)* 100) > 60
        for: 1m
        labels:
          status: 通常告警
        annotations:
          summary: "{{$labels.mountpoint}} CPU使用率太高!"
          description: "{{$labels.mountpoint }} CPU使用大于60%(目前使用:{{$value}}%)"
      – alert: 内存使用
        expr: 100 -(node_memory_MemTotal_bytes -node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes ) / node_memory_MemTotal_bytes * 100> 80
        for: 1m
        labels:
          status: 严重告警
        annotations:
          summary: "{{$labels.mountpoint}} 内存使用率太高!"
          description: "{{$labels.mountpoint }} 内存使用大于80%(目前使用:{{$value}}%)"
      – alert: IO性能
        expr: 100-(avg(irate(node_disk_io_time_seconds_total[1m])) by(instance)* 100) < 60
        for: 1m
        labels:
          status: 严重告警
        annotations:
          summary: "{{$labels.mountpoint}} 流入磁盘IO使用率太高!"
          description: "{{$labels.mountpoint }} 流入磁盘IO大于60%(目前使用:{{$value}})"
      – alert: 网络
        expr: ((sum(rate (node_network_receive_bytes_total{device!~’tap.*|veth.*|br.*|docker.*|virbr*|lo*’}[5m])) by (instance)) / 100) > 102400
        for: 1m
        labels:
          status: 严重告警
        annotations:
          summary: "{{$labels.mountpoint}} 流入网络带宽太高!"
          description: "{{$labels.mountpoint }}流入网络带宽持续2分钟高于100M. RX带宽使用率{{$value}}"
      – alert: 网络
        expr: ((sum(rate (node_network_transmit_bytes_total{device!~’tap.*|veth.*|br.*|docker.*|virbr*|lo*’}[5m])) by (instance)) / 100) > 102400
        for: 1m
        labels:
          status: 严重告警
        annotations:
          summary: "{{$labels.mountpoint}} 流出网络带宽太高!"
          description: "{{$labels.mountpoint }}流出网络带宽持续2分钟高于100M. RX带宽使用率{{$value}}"
      – alert: TCP会话
        expr: node_netstat_Tcp_CurrEstab > 1000
        for: 1m
        labels:
          status: 严重告警
        annotations:
          summary: "{{$labels.mountpoint}} TCP_ESTABLISHED太高!"
          description: "{{$labels.mountpoint }} TCP_ESTABLISHED大于1000%(目前使用:{{$value}}%)"
      – alert: 磁盘容量
        expr: 100-(node_filesystem_free_bytes{fstype=~"ext4|xfs"}/node_filesystem_size_bytes {fstype=~"ext4|xfs"}*100) > 80
        for: 1m
        labels:
          status: 严重告警
        annotations:
          summary: "{{$labels.mountpoint}} 磁盘分区使用率太高!"
          description: "{{$labels.mountpoint }} 磁盘分区使用大于80%(目前使用:{{$value}}%)"
后续如果我们还需要添加别的告警,我们可以直接在/etc/prometheus/rules目录下单独创建一个yaml设置告警即可

五、Prometheus 集成 AlertManager
我们需要重新修改Prometheus容器,将/etc/prometheus整个挂载到prometheus容器上去

docker run -d   -p 9090:9090   
–restart=always
  –name prometheus
  -v /data/prometheus:/data/prometheus
  -v /etc/prometheus:/etc/prometheus/
  registry.cn-beijing.aliyuncs.com/abcdocker/prometheus:v2.18.1
  –config.file=/etc/prometheus/prometheus.yml  
  –storage.tsdb.path=/data/prometheus  
  –web.enable-admin-api  
  –web.enable-lifecycle
  –storage.tsdb.retention.time=30d
接下来是prometheus配置文件的修改

vim /etc/prometheus/prometheus.yml
rule_files:
  – ‘rules/*.yaml’
#添加告警规则路径,我这里使用了docker 挂载并且prometheus.yaml和rules是同一个目录,所以直接写相对路由,也可以写成绝对路径
Prometheus 配置文件添加alertmanager地址

alerting:
  alertmanagers:
    – static_configs:
        – targets: [‘10.0.24.13:9103’]     #alertmanager地址+端口号
完整配置文件如下

global:
  scrape_interval:     60s
  evaluation_interval: 20s
  scrape_timeout: 15s
rule_files:
  – ‘rules/*.yaml’
scrape_configs:
  – job_name: abcdocker_node   
    scrape_interval: 3s
    static_configs:
      – targets: [‘11111:9090’]
        labels:
          instance: prometheus-server
      – targets: [‘11111.frps.cn’]
        labels:
          instance: 博客服务器
      – targets: [‘1.1.1.61:9100’]
        labels:
          instance: ukx服务器
      – targets: [‘1.1.1.1:9100’]
        labels:
          instance: 海外下载站
      – targets: [‘82.1xxxxx:9100’]
        labels:
          instance: frp服务器
alerting:
  alertmanagers:
    – static_configs:
        – targets: [‘10.0.24.13:9103’]
修改完配置文件,重启prometheus,我们就可以在Alert中看到监控项了

https://i4t.com/5260.html
原文看的更清楚

支持一下
支持一下下
感谢分享
tg告警有木有?
这次必须支持

https://www.wake.wiki/article/2021/10/27/98.html
网上找的逻辑实际上一样