Prometheus. Alerts using Alertmanager: различия между версиями
Cless (обсуждение | вклад) (Новая страница: «Категория:Prometheus __ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__») |
Cless (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
[[Категория:Prometheus]] | [[Категория:Prometheus]] | ||
__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__ | __ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__ | ||
= Configuring = | |||
Add Recording Rules. They are the kind of templates for big calculating values. | |||
<code>nano /etc/prometheus/prometheus_rules.yml</code> | |||
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. | |||
<code>nano /etc/prometheus/alert_rules.yml</code> | |||
groups: | |||
- name: alert_rules | |||
<nowiki> </nowiki> rules: | |||
<nowiki> </nowiki> - alert: InstanceDown | |||
<nowiki> </nowiki> expr: up == 0 | |||
<nowiki> </nowiki> for: 1m | |||
<nowiki> </nowiki> labels: | |||
<nowiki> </nowiki> severity: critical | |||
<nowiki> </nowiki> annotations: | |||
<nowiki> </nowiki> summary: "Instance <nowiki>[{{ $labels.instance }}]</nowiki> down" | |||
<nowiki> </nowiki> description: "<nowiki>[{{ $labels.instance }}]</nowiki> of job <nowiki>[{{ $labels.job }}]</nowiki> has been down for more than 1 minute." | |||
<nowiki> </nowiki> - alert: NodeCPUUsage | |||
<nowiki> </nowiki> expr: node_cpuUsedTotal_percent > 30 | |||
<nowiki> </nowiki> for: 1m | |||
<nowiki> </nowiki> labels: | |||
<nowiki> </nowiki> severity: critical | |||
<nowiki> </nowiki> annotations: | |||
<nowiki> </nowiki> summary: High CPU usage detected CPU usage is above 30% | |||
<code>systemctl restart prometheus</code> | |||
Download and install Alertmanager service. | |||
<code>wget <nowiki>https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz</nowiki></code> | |||
<code>tar -xzf alertmanager-0.25.0.linux-amd64.tar.gz</code> | |||
<code>cd alertmanager-0.25.0.linux-amd64</code> | |||
<code>mkdir /etc/alertmanager</code> | |||
<code>cp alertmanager amtool /usr/local/bin/</code> | |||
<code>cp alertmanager.yml /etc/alertmanager/</code> | |||
<code>mv /etc/alertmanager/alertmanager.yml /etc/alertmanager/alertmanager.yml.ORIG</code> | |||
Add alertmanager rules. In this example we are going to push notifications via Telegram. | |||
<code>nano /etc/alertmanager/alertmanager.yml</code> | |||
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 | |||
<nowiki> </nowiki> api_url: <nowiki>https://api.telegram.org</nowiki> | |||
<nowiki> </nowiki> chat_id: 25***73 # chat_id | |||
<nowiki> </nowiki> parse_mode: <nowiki>''</nowiki> | |||
inhibit_rules: | |||
- source_match: | |||
<nowiki> </nowiki> severity: 'critical' | |||
<nowiki> </nowiki> target_match: | |||
<nowiki> </nowiki> severity: 'warning' | |||
<nowiki> </nowiki> equal: ['alertname', 'dev', 'instance'] | |||
Test alertmanager rules | |||
<code>amtool check-config /etc/alertmanager/alertmanager.yml</code> | |||
Add alertmanager service | |||
<code>nano /etc/systemd/system/alertmanager.service</code> | |||
[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 | |||
<code>systemctl daemon-reload</code> | |||
<code>systemctl restart alertmanager</code> | |||
Add rule files into prometheus config. | |||
<code>nano /etc/prometheus/prometheus.yml</code> | |||
... | |||
rule_files: | |||
... | |||
- "prometheus_rules.yml" | |||
- "alert_rules.yml" | |||
... | |||
alerting: | |||
alertmanagers: | |||
- static_configs: | |||
- targets: | |||
- localhost:9093 | |||
... | |||
<code>systemctl restart prometheus</code> | |||
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. | |||
Текущая версия на 21:14, 31 мая 2023
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.