Prometheus + Alertmanager +Grafana¶
Пролог¶
Описываем процесс развертывания системы мониторинга (сбора метрик) на базе компонентов:
- Prometheus - сборщик (база данных) метрик от клиентов
- Alertmanager - служба оповещений
- Grafana - визуализатор метрик
- XMPP-WebHook - коннектор для отправки уведомлений в Snikket
- Node exporter - клиент Linux для Prometheus
- Windows exporter -клиент Windows для Prometheus
1. Подготовка ОС¶
- Ставим Ubuntu 22.04
- Обновляем пакеты:
sudo apt update - Устанавливаем недостающие пакеты:
sudo apt install openresolv wget ca-certificates curl - Устанавливаем часовой пояс:
sudo timedatectl set-timezone 'Asia/Yekaterinburg' - Ставим Docker
- Даем права на директорию:
sudo install -m 0755 -d /etc/apt/keyrings - Скачиваем ключ:
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc - Даем всем пользователям права на чтение:
sudo chmod a+r /etc/apt/keyrings/docker.asc - Добавляем репозиторий:
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF - Снова обновляем список пакетов:
sudo apt update - Ставим докер:
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- Даем права на директорию:
2. Устанавливаем, непосредственно, системы¶
- Создаем рабочие директории:
sudo mkdir -p /opt/prometheus_stack/{prometheus,grafana,alertmanager,blackbox,jelmer-xmpp} - Создаем файл docker-compose.yml:
sudo touch /opt/prometheus_stack/docker-compose.yml - Идем в рабочую директорию:
cd /opt/prometheus_stack/ - Открываем файл на редактирование:
sudo nano docker-compose.yml
и приводим к следующему виду:
services:prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus/etc:/etc/prometheus/
- ./prometheus/data:/prometheus
container_name: prometheus
hostname: prometheus
command:
- --config.file=/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
restart: unless-stopped
environment:
TZ: "Asia/Yekaterinburg"node-exporter:
image: prom/node-exporter
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
container_name: node-exporter
hostname: exporter
command:
- --path.procfs=/host/proc
- --path.sysfs=/host/sys
- --collector.filesystem.ignored-mount-points
- ^(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)
ports:
- "9100:9100"
restart: unless-stopped
environment:
TZ: "Asia/Yekaterinburg"grafana:
image: grafana/grafana
user: root
depends_on:
- prometheus
ports:
- "3000:3000"
volumes:
- ./grafana:/var/lib/grafana
- ./grafana/provisioning/:/etc/grafana/provisioning/
container_name: grafana
hostname: grafana
restart: unless-stopped
environment:
TZ: "Asia/Yekaterinburg"alertmanager:
image: prom/alertmanager:v0.31.1
user: root
ports:
- "9093:9093"
volumes:
- ./alertmanager/:/etc/alertmanager/
container_name: alertmanager
hostname: alertmanager
environment:
TZ: "Asia/Yekaterinburg"
restart: unless-stopped
command:
- '--config.file=/etc/alertmanager/config.yml'
- '--storage.path=/etc/alertmanager/data'xmpp-bot:
image: ghcr.io/jelmer/prometheus-xmpp-alerts
container_name: xmpp-bot
user: 1000:1000
ports:
- "9199:9199"
volumes:
- ./jelmer-xmpp/prometheus/config.yaml:/config.yaml:ro - Создаем конфигурационный файл:
sudo mkdir -p ./prometheus/etc
sudo nano ./prometheus/etc/prometheus.yml
со следующим содержанием:
scrape_configs:
- job_name: node
scrape_interval: 5s
static_configs:
- targets: ['node-exporter:9100']
- job_name: windows_servers
scrape_interval: 5s
static_configs:
- targets: ['192.168.100.20:9182', '192.168.10.13:9182', '192.168.100.23:9182']
rule_files:
- 'alert.rules'
alerting:
alertmanagers:
- scheme: http
static_configs:
- targets:
- "alertmanager:9093" - Создаем директорию для данных Prometheus:
sudo mkdir -p ./prometheus/data - Устанавливаем разрешения:
sudo chown 65534:65534 ./prometheus/data - Создаем файл с правилами для Promtheus:
sudo mkdir - p ./prometheus/etc/alert.rules
следующего содержания:
groups:
- name: InstanceState
rules:
- alert: PrometheusTargetMissing
expr: up == 0
for: 0m
labels:
severity: critical
annotations:
summary: "Prometheus target missing (instance {{ $labels.instance }})"
description: "A Prometheus target has disappeared. An exporter might be crashed. VALUE = {{ $value }} LABELS: {{ $labels }}" - Создаем конфигурационный файл для Alertmanager:
sudo nano alertmanager/config.yml
следующего содержания:global:
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 1m
repeat_interval: 2m
receiver: 'team-alerts'
receivers:
- name: 'team-alerts'
email_configs:
- to: 'dkurnaev@krovelson.ru'
from: 'informer@krovelson.ru'
smarthost: 'mx01.krovelson.ru:465'
auth_username: 'informer@krovelson.ru'
auth_identity: 'informer@krovelson.ru'
auth_password: 'Rjkj,jr-1'
webhook_configs:
- url: 'http://xmpp-bot:9199/alert' - Создаем конфигурационный файл для XMPP-Hook:
sudo nano ./jelmer-xmpp/prometheus/config.yaml
следующего содержания:
@jid: 'alert-bot@f-drive.krovelson.ru'
password: 'Vbrhj<bjkjubz'
to_jid: 'dkurnaev@f-drive.krovelson.ru'
listen_address: '0.0.0.0'
listen_port: 9199
text_template: | {{ status.upper() }}: {{ labels.alertname }} at {{ labels.host or labels.instance }}:\ {{ annotations.message }}. {{ generatorURL }}@
- Запускаем сборку контейнеров:
sudo docker compose up -d - Если все прошло удачно, то по адресам:
- http://<your_ip>:9090/metrics - будут метрики Prometheus
- http://<your_ip>:9093 - будет Alertmanager
- http://<your_ip>:3000 - будет Grafana
- http://<your_ip>:9100 - будет Node-exporter
PS¶
Для Windows машин скачиваем программу Windows exporter и устанавливаем её в качестве службы, открыв соответствующий порт в брандмауэре.
PPS¶
Уведомления будут приходить в Snikket от имени alert-bot пользователю dkurnaev
Updated by Дмитрий Курнаев 27 days ago · 1 revisions