Prometheus. Alerts using Alertmanager

Материал из Wiki
Перейти к навигации Перейти к поиску


Configuring

Add Recording Rules. They are the kind of templates for big calculating values.

nano /etc/prometheus/prometheus_rules.yml

groups:
  - name: custom_rules
    rules:
      - record: node_cpuUsedTotal_percent
        expr: 100 - ((rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)

      - record: node_memory_MemFree_percent
        expr: 100 - (100 * node_memory_MemFree_bytes / node_memory_MemTotal_bytes)

      - record: node_memory_MemUsed_percent
        expr: (100 * node_memory_MemFree_bytes / node_memory_MemTotal_bytes)

      - record: node_filesystem_free_percent
        expr: 100 * node_filesystem_free_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}

Add alert rules for each event.

nano /etc/prometheus/alert_rules.yml

groups:

  - name: alert_rules
    rules:
      - alert: InstanceDown
        expr: up == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "Instance [{{ $labels.instance }}] down"
          description: "[{{ $labels.instance }}] of job [{{ $labels.job }}] has been down for more than 1 minute."

      - alert: NodeCPUUsage
        expr: node_cpuUsedTotal_percent > 30
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: High CPU usage detected CPU usage is above 30%

systemctl restart prometheus

Download and install Alertmanager service.

wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz

tar -xzf alertmanager-0.25.0.linux-amd64.tar.gz

cd alertmanager-0.25.0.linux-amd64

mkdir /etc/alertmanager

cp alertmanager amtool /usr/local/bin/

cp alertmanager.yml /etc/alertmanager/

mv /etc/alertmanager/alertmanager.yml /etc/alertmanager/alertmanager.yml.ORIG

Add alertmanager rules. In this example we are going to push notifications via Telegram.

nano /etc/alertmanager/alertmanager.yml

global:
  resolve_timeout: 5m

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1m
  receiver: telegram

receivers:
- name: 'telegram'
  telegram_configs:
  - bot_token: 46***71:AAG***YCY # bot_token
    api_url: https://api.telegram.org
    chat_id: 25***73 # chat_id
    parse_mode: ''

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']

Test alertmanager rules

amtool check-config /etc/alertmanager/alertmanager.yml

Add alertmanager service

nano /etc/systemd/system/alertmanager.service

[Unit]
Description=Prometheus Alert Manager Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/alertmanager \
        --config.file=/etc/alertmanager/alertmanager.yml

[Install]
WantedBy=multi-user.target

systemctl daemon-reload

systemctl restart alertmanager

Add rule files into prometheus config.

nano /etc/prometheus/prometheus.yml

...
rule_files:
...
  - "prometheus_rules.yml"
  - "alert_rules.yml"

...
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - localhost:9093
...

systemctl restart prometheus

Ok. Now, when some Instance (monitored server) will down or node_cpuUsedTotal_percent will greater than 30%, the trigger will be triggered and notification will come to Telegram.