Установка Prometheus + Node Exporter + Alertmanager на Linux Ubuntu
Установка Prometheus + Node Exporter + Alertmanager на Linux Ubuntu
Подготовка
apt update && apt install wget tar chrony
systemctl enable chrony
systemctl start chrony
Вариант 1:
firewall-cmd --permanent --add-port=9090/tcp --add-port=9093/tcp --add-port=9094/{tcp,udp} --add-port=9100/tcp
firewall-cmd --reload
Вариант 2:
iptables -I INPUT -p tcp --match multiport --dports 9090,9093,9094,9100 -j ACCEPT
iptables -I INPUT -p udp --dport 9094 -j ACCEPT
Далее сохраняем правила:
apt install iptables-persistent
netfilter-persistent save
Вариант 3:
ufw allow 9090,9093,9094,9100/tcp
ufw allow 9094/udp
ufw reload
Проверяем SELinux:
getenforce
Ответ:
Enforcing
Тогда отключаем:
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
Prometheus
Страница загрузки, берете нужный релиз:
https://prometheus.io/download/
wget https://github.com/prometheus/prometheus/releases/download/v2.53.4/prometheus-2.53.4.linux-amd64.tar.gz
mkdir /etc/prometheus /var/lib/prometheus
tar -zxf prometheus-*.linux-amd64.tar.gz
cd prometheus-*.linux-amd64
cp prometheus promtool /usr/local/bin/
cp prometheus.yml /etc/prometheus
cd .. && rm -rf prometheus-*.linux-amd64/ && rm -f prometheus-*.linux-amd64.tar.gz
useradd --no-create-home --shell /bin/false prometheus
chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
chown prometheus:prometheus /usr/local/bin/{prometheus,promtool}
Проверка:
sudo -u prometheus /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/
Смотрим лог запуска и открываем браузер http://<IP-адрес сервера>:9090
Должна загрузится консоль Prometheus
vi /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Service
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl enable prometheus
systemctl start prometheus
systemctl status prometheus
Node Exporter
Страница загрузки, берете нужный релиз:
https://prometheus.io/download/#node_exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.10.2/node_exporter-1.10.2.linux-amd64.tar.gz
tar -zxf node_exporter-*.linux-amd64.tar.gz
cd node_exporter-*.linux-amd64
cp node_exporter /usr/local/bin/
cd .. && rm -rf node_exporter-*.linux-amd64/ && rm -f node_exporter-*.linux-amd64.tar.gz
useradd --no-create-home --shell /bin/false nodeusr
chown -R nodeusr:nodeusr /usr/local/bin/node_exporter
vi /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter Service
After=network.target
[Service]
User=nodeusr
Group=nodeusr
Type=simple
ExecStart=/usr/local/bin/node_exporter
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl enable node_exporter
systemctl start node_exporter
systemctl status node_exporter
Открываем браузер http://<IP-адрес сервера или клиента>:9100/metrics
Отобразит метрики
Свяжем Prometheus с мониторингом Node Exporter
Добавим в конфигурационный файл свой ip (пподставьте сами)
Имя группы - node_exporter_servers
vi /etc/prometheus/prometheus.yml
scrape_configs:
...
- job_name: 'node_exporter_servers'
scrape_interval: 5s
static_configs:
- targets:
- 1.1.1.25:9100
- 2.2.2.52:9100
systemctl restart prometheus
Далее в http://<IP-адрес сервера>:9090
Консоль prometheus, раздел Status - Targets
Должны увидеть группу хостов и сервер с установленным node_exporter
Статус должен быть UP
Alertmanager
Страница загрузки, берете нужный релиз:
https://prometheus.io/download/#alertmanager
wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz
mkdir -p /etc/alertmanager /var/lib/prometheus/alertmanager
tar -zxf alertmanager-*.linux-amd64.tar.gz
cd alertmanager-*.linux-amd64
cp alertmanager amtool /usr/local/bin/
cp alertmanager.yml /etc/alertmanager
cd .. && rm -rf alertmanager-*.linux-amd64/
useradd --no-create-home --shell /bin/false alertmanager
chown -R alertmanager:alertmanager /etc/alertmanager /var/lib/prometheus/alertmanager
chown alertmanager:alertmanager /usr/local/bin/{alertmanager,amtool}
vi /etc/systemd/system/alertmanager.service
[Unit]
Description=Alertmanager Service
After=network.target
[Service]
EnvironmentFile=-/etc/default/alertmanager
User=alertmanager
Group=alertmanager
Type=simple
ExecStart=/usr/local/bin/alertmanager \
--config.file=/etc/alertmanager/alertmanager.yml \
--storage.path=/var/lib/prometheus/alertmanager \
--cluster.advertise-address=0.0.0.0:9093 \
$ALERTMANAGER_OPTS
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl enable alertmanager
systemctl start alertmanager
Открываем браузер http://<IP-адрес сервера>:9093
Загрузится консоль alertmanager
Правила тревог
Создадим правило, отслеживающее доступность сервера
Файл правил:
vi /etc/prometheus/alert.rules.yml
groups:
- name: alert.rules
rules:
- alert: InstanceDown
expr: up == 0
for: 1m
labels:
severity: critical
annotations:
description: '{{ $labels.instance }} of job {{ $labels.job }} has been down
for more than 1 minute.'
summary: Instance {{ $labels.instance }} down
Подключим файл правил в конфигурационном файле prometheus:
vi /etc/prometheus/prometheus.yml
...
rule_files:
- "alert.rules.yml"
...
systemctl restart prometheus
Далее в http://<IP-адрес сервера>:9090
Консоль prometheus, раздел Alerts
Попробуйте выключить сервер или Node Exporter, должен будет появиться алерт
Уведомления
На почту
vi /etc/alertmanager/alertmanager.yml
global:
...
smtp_from: monitoring@domain.ru
route:
group_by: ['alertname', 'instance', 'severity']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'web.hook'
routes:
- receiver: send_email
match:
alertname: InstanceDown
- name: send_email
email_configs:
- to: admin@domain.ru
smarthost: localhost:25
require_tls: false
Выше был добавлен маршрут, отслеживающий событие InstanceDown из alert.rules.yml
Отследив алерт - запустит отправку для send_email
systemctl restart alertmanager
vi /etc/prometheus/prometheus.yml
...
alerting:
alertmanagers:
- static_configs:
- targets:
- 127.0.0.1:9093
127.0.0.1 — IP адрес сервера alertmanager
systemctl restart prometheus
Уведомления в telegram
Пишем @BotFather
/newbot
domain_prometheus — имя бота
domainPrometheusBot — имя учетной записи бота, обязательно Bot в конце
В полученном сообщении сохраните токен бота типа того будет:
123..:ABCDEF...
Открываем телеграм чат или канал
Добавляем созданного бота, чтоб он смог отправлять в него сообщения
Тестовая отправка:
curl https://api.telegram.org/bot<BotID>/sendMessage?chat_id=<ChannelName>\&text=<Text>
vi /etc/alertmanager/alertmanager.yml
...
route:
group_by: ['alertname', 'instance', 'severity']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'web.hook'
routes:
- receiver: telegram
receivers:
...
- name: telegram
telegram_configs:
- chat_id: <ID чата>
bot_token: "<Полученный токен для бота>"
api_url: "https://api.telegram.org"
send_resolved: true
parse_mode: ''
message: 'Warning, Achtung, Karamba!'
systemctl restart alertmanager
systemctl status alertmanager
cat /etc/prometheus/prometheus.yml
...
alerting:
alertmanagers:
- static_configs:
- targets:
- 127.0.0.1:9093
127.0.0.1 — IP адрес сервера alertmanager
systemctl restart prometheus
Комментарии пользователей
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!