Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ FreeBSD and Nix ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Установка 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

 

 


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.
Весь материал на сайте носит ознакомительный характер,
за его использование другими людьми, автор ответственности не несет.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект