Мониторинг оповещений Zabbix с помощью Alerta в CentOS 7

Alerta – это веб-приложение, которое систематизирует оповещения систем мониторинга и визуализирует их на одном экране. Alerta поддерживает интеграцию со многими известными инструментами мониторинга: Nagios, Zabbix, Sensu, InfluxData Kapacitor и т.п.

Данное руководство поможет установить Alerta и настроить отслеживание и сбор оповещений Zabbix.

Требования

  • Два сервера CentOS 7.
  • Пользователь sudo и настроенный брандмауэр на каждом сервере (все инструкции можно найти здесь).
  • Аккаунт GitHub (для защиты веб-интерфейса Alerta). Чтобы создать такой аккаунт, следуйте этим рекомендациям.

На сервере 1 нужно установить:

На сервере 2 установите:

1: Установка API-сервера Alerta

Alerta состоит из сервера и веб-интерфейса. Сервер Alerta отвечает за хранение и обработку оповещений и за обслуживание JSON через API. Веб-интерфейс Alerta позволяет просматривать список оповещений в браузере, благодаря чему вам не нужно самостоятельно интерпретировать JSON. Установите оба компонента на сервере 2, где уже установлены MongoDB и Nginx (в дальнейшем этот сервер будет называться сервером Alerta). Войдите на сервер как пользователь с доступом к sudo:

ssh 8host@your_alerta_server_ip

Для начала установите pip (пакетный менеджер Python) и файлы разработки Python. Чтобы извлечь исходный код Alerta с GitHub, установите Git.

Запустите следующую команду, чтобы установить эти пакеты:

sudo yum install python-pip python-devel gcc git

Теперь можно приступать к установке Alerta.

Установите alerta-server с помощью pip.

sudo pip install alerta-server

Запустите сервер в режиме разработки, чтобы убедиться, что он работает.

sudo alertad
* Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)

Примечание: Если вы используете FirewallD, разблокируйте порт 8080.

sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

Читайте также: Настройка брандмауэра FirewallD в CentOS 7

Откройте в браузере эту ссылку:

http://your_alerta_server_ip:8080

Вы увидите веб-страницу Alerta API, на которой можно найти некоторые примеры использования Alerta.

Убедившись, что сервер запущен, остановите его с помощью Ctrl+C. Далее его нужно настроить как сервис.

Сервер Alerta API установлен, теперь нужно установить веб-консоль.

2: Установка веб-интерфейса Alerta

Alerta предоставляет дашборд, который отображает оповещения в браузере.

Он отображает предупреждающие сообщения в таблицах, где их можно легко читать и сортировать. Вы можете настроить отображение сообщений в соответствии с вашими потребностями, фильтровать или сортировать их. Кроме того, вы можете просмотреть подробную информацию о каждом оповещении.

Установите интерфейс на один сервер с Alerta API.

Загрузите исходный код с Github:

git clone https://github.com/alerta/angular-alerta-webui.git

Скопируйте файлы приложения в каталог веб-сервера:

sudo mkdir -p /var/www/html/
sudo cp -r angular-alerta-webui/app/* /var/www/html/

По умолчанию веб-интерфейс Alerta может взаимодействовать с API-интерфейсом сервера разработки, который работает на порту 8080. Его можно настроить для производства. Для этого сделайте API-интерфейс сервера Alerta доступным в конечной точке /api; статический контент веб-консоли нужно обслуживать по тому же домену, чтобы избежать ошибок CORS или HTTPS.

Откройте конфигурационный файл config.js:

sudo vi /var/www/html/config.js

В endpoint укажите /api.

'use strict';
angular.module('config', [])
.constant('config', {
'endpoint'    : "/api",
'provider'    : "basic", // google, github, gitlab, keycloak or basic
...

Остальные опции можно оставить по умолчанию. Некоторые из них нужно откорректировать позже, во время настройки авторизации OAuth.

3: Запуск Alerta с помощью uWSGI и Nginx

Стандартный сервер разработки alertad можно использовать для тестирования, но не в среде производства. Поскольку приложение Alerta написано на Python, для производства рекомендуется использовать сервер WSGI. Здесь вы узнаете, как запустить Alerta с помощью uWSGI и прокси-сервера Nginx по ссылке:

http://your_alerta_server_ip/api

Установите сервер приложений uWSGI:

sudo pip install uwsgi

Затем создайте файл wsgi.py, с помощью которого сервер связывается с приложением. Откройте файл в редакторе:

sudo vi /var/www/wsgi.py

Добавьте в файл следующую строку, которая запускает приложение Alerta.

from alerta.app import app

Затем нужно настроить сам сервер uWSGI. Создайте каталог, в котором uWSGI может хранить файл сокета, и убедитесь, что процесс Nginx имеет к нему доступ:

sudo mkdir /var/run/alerta
sudo chown -R nginx.nginx /var/run/alerta/

Создайте конфигурационный файл /etc/uwsgi.ini:

sudo vi /etc/uwsgi.ini

Этот файл указывает место хранения приложения и параметры сокета для взаимодействия с Nginx.

Добавьте в файл следующие строки:

[uwsgi]
chdir = /var/www
mount = /api=wsgi.py
callable = app
manage-script-name = true
master = true
processes = 5
logger = syslog:alertad
socket = /var/run/alerta/uwsgi.sock
chmod-socket = 664
uid = nginx
gid = nginx
vacuum = true
die-on-term = true

Полный список опций uWSGI можно найти в документации.

Создайте unit-файл для приложения, чтобы иметь возможность управлять им с помощью systemctl.

sudo vi /etc/systemd/system/alerta-app.service

В unit-файле должны находиться директивы, которые описывают сервис и определяют его поведение. Вставьте в файл:

[Unit]
Description=uWSGI service for Alerta
After=syslog.target
[Service]
ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi.ini
RuntimeDirectory=uwsgi
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
[Install]
WantedBy=multi-user.target

Читайте также: Основы Systemd: управление сервисами и журналирование

Запустите сервис alerta-app:

sudo systemctl start alerta-app

Запросите его состояние:

systemctl status alerta-app
alerta-app.service - uWSGI service for Alerta
Loaded: loaded (/etc/systemd/system/alerta-app.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2017-04-07 12:15:21 EEST; 2min 25s ago
Main PID: 15935 (uwsgi)
Status: "uWSGI is ready"
CGroup: /system.slice/alerta-app.service
├─15935 /usr/bin/uwsgi --ini /etc/uwsgi.ini
├─15946 /usr/bin/uwsgi --ini /etc/uwsgi.ini
├─15947 /usr/bin/uwsgi --ini /etc/uwsgi.ini
├─15948 /usr/bin/uwsgi --ini /etc/uwsgi.ini
├─15949 /usr/bin/uwsgi --ini /etc/uwsgi.ini
└─15950 /usr/bin/uwsgi --ini /etc/uwsgi.ini

По умолчанию сервис отключен, он не запускается автоматически. Включите его:

sudo systemctl enable alerta-app

Теперь нужно настроить Nginx для перенаправления запросов к your_alerta_server_ip/api на сервер uWSGI.

Вместо изменения файлов Nginx конфигурации лучше разместить в отдельном файле Alerta.

sudo vi /etc/nginx/conf.d/alerta.conf

Добавьте следующие строки в файл. Вместо server_name укажите IP-адрес сервера Alerta.

server {
listen  80;
server_name  your_alerta_server_ip;
location /api { try_files $uri @api; }
location @api {
include uwsgi_params;
uwsgi_pass unix:/var/run/alerta/uwsgi.sock;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
root /var/www/html;
}
error_page  500 502 503 504  /50x.html;
location = /50x.html {
root  /usr/share/nginx/html;
}
}

Читайте также: Настройка виртуальных хостов Nginx в CentOS 7

Сохраните и закройте файл.

Убедитесь, что в файле Nginx нет ошибок:

sudo nginx -t

Если ошибок нет, команда вернет:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если вы получили сообщения об ошибках, исправьте их и повторите проверку.

Перезапустите Nginx:

sudo nginx -s reload

Откройте в браузере ссылку:

http://your_alerta_server_ip

На экране появится дашборд Alerta.

Если вы устанавливаете Alerta на общедоступном сервере, вы должны настроить аутентификацию. Рассмотрим несколько способов сделать это.

4: Базовая аутентификация Alerta

По умолчанию любой пользователь, который знает адрес сервера Alerta, может просматривать все оповещения. Это приемлемо в тестовой среде, но не в производстве. Чтобы настроить аутентификацию, откройте файл alertad.conf:

sudo vi /etc/alertad.conf

Добавьте в файл следующий код:

AUTH_REQUIRED = True
SECRET_KEY = 'secret_key'

В SECRET_KEY введите любую случайную строку символов.

Сохраните и закройте файл. Перезапустите сервис:

sudo systemctl restart alerta-app

Перезагрузите страницу веб-интерфейса Alerta и выберите в меню ссылку Login. Появится сообщение Please login to continue. Нажмите Create an account и создайте новую учетную запись. После этого вы получите доступ к панели управления Alerta.

После включения аутентификации для доступа к Alerta API понадобится ключ API. Выберите меню Configuration и нажмите API keys.

Введите имя приложения, которому нужен доступ к API. В данном случае это zabbix. Затем выберите read-write в выпадающем списке и нажмите кнопку Create new API Key. Будет создан новый ключ. Скопируйте этот ключ – он понадобится позже.

Кроме того, вы можете настроить аутентификацию OAuth и использовать свои учетные данные GitHub или Google для входа в пользовательский интерфейс Alerta. Если обычной аутентификации достаточно, вы можете пропустить следующий раздел.

5: Защита Alerta с помощью OAuth (опционально)

Веб-интерфейс Alerta поддерживает аутентификацию OAuth для Google, GitHub, Gitlab и Keycloak. Попробуйте настроить аутентификацию через учетную запись GitHub.

Зарегистрируйте новое приложение на GitHub. Откройте свою учетную запись GitHub и перейдите на страницу New Application.

Заполните форму:

  • Application name: Alerta или другое описательное имя.
  • Homepage URL: http://your_alerta_server_ip/
  • Authorization callback URL: http://your_alerta_server_ip/
  • Нажмите Register application, чтобы сохранить параметры.
  • Скопируйте Client ID и Client Secret со следующего экрана.

Отредактируйте конфигурационный файл Alerta, чтобы включить поддержку OAuth.

sudo vi /etc/alertad.conf

Вставьте в конец файла:

OAUTH2_CLIENT_ID = 'your_github_client_id'
OAUTH2_CLIENT_SECRET = 'your_github_client_secret'
ALLOWED_GITHUB_ORGS = ['your_github_organization']

Укажите GitHub Client ID, Client Secret и GitHub Organization.

Важно! Если вы опустите опцию GitHub Organization, любой пользователь GitHub сможет открыть вашу панель управления Alerta. Создайте организацию GitHub и добавьте в нее соответствующих пользователей, чтобы ограничить доступ к данным.

Сохраните и закройте файл. Перезапустите сервис:

sudo systemctl restart alerta-app

Затем измените средство аутентификации веб-интерфейса.

sudo vi /var/www/html/config.js

Найдите следующий раздел и измените значение параметра provider с basic на github. Введите GitHub Client ID:

...
'provider'    : "github",
'client_id'   : "INSERT-CLIENT-ID-HERE",
...

Откройте веб-интерфейс Alerta:

http://your_alerta_server_ip

Вы увидите сообщение Please login to continue. Нажмите Login, приложение запросит доступ к аккаунту GitHub. разрешите доступ, чтобы пройти аутентификацию.

6: Отправка тестового сообщения

Единый инструмент командной строки Alerta можно использовать для отправки тестового оповещения. Сначала установите клиент командной строки:

sudo pip install alerta

Затем создайте конфигурационный файл, в котором можно указать конечную точку Alerta API и API key.

vi ~/.alerta.conf

Вставьте в файл:

[DEFAULT]
endpoint = http://your_alerta_server_ip/api
key=your_alerta_api_key

В опции key укажите ключ, установленный в разделе 4.

Отправьте тестовое оповещение.

alerta send --resource webserver01 --event down --environment Production --service Website01 --severity major --text "Web server 01 is down." --value ERROR
1015fca2-eff6-441d-8c66-6abf9368b830 (indeterminate -> major)

Откройте в браузере ссылку:

http://your_alerta_server_ip

В панели появится оповещение. Чтобы получить подробную информацию, кликните по нему.

Сервер Alerta запущен и готов принимать новые сообщения. Теперь нужно настроить Zabbix.

7: Установка шлюза Zabbix-Alerta

Теперь нужно настроить систему мониторинга Zabbix для отправки оповещений на сервер Alerta.

Перейдите на сервер 1 (на нем уже установлена система Zabbix).

ssh 8host@your_zabbix_server_ip

По умолчанию Zabbix может отправлять уведомления по электронной почте, SMS или через Jabber, но с помощью сценариев можно добавить новые обработчики уведомлений. Разработчики Alerta предлагают готовый сценарий. Чтобы установить его, клонируйте репозиторий zabbix-alerta и установите его с помощью сценария установки:

git clone https://github.com/alerta/zabbix-alerta.git
cd zabbix-alerta
sudo python setup.py install

Создайте символьную ссылку на сценарий zabbix-alerta в каталоге, в котором Zabbix хранит сценарии. Путь к нему можно найти в файле /etc/zabbix/zabbix_server.conf.

sudo grep -e '^AlertScriptsPath' /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts

По умолчанию Zabbix ищет сценарии в /usr/lib/zabbix/alertscripts. Создайте символьную ссылку:

sudo ln -s `which zabbix-alerta` /usr/lib/zabbix/alertscripts

Теперь нужно настроить интеграцию Alerta. Откройте интерфейс Zabbix:

http://your_zabbix_server_ip/zabbix/.

В главном меню кликните Administration, выберите Media Types и нажмите кнопку Create Media Type.

Заполните форму:

  • Name: Alerta
  • Type: Script
  • Script name: zabbix-alerta
  • В Script parameters укажите:

{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

  • Поставьте флажок в Enabled.
  • Нажмите кнопку Add.

Добавьте новое медиа в аккаунт пользователя. Выберите Administration, затем Users. Кликните по имени своего пользователя и выберите вкладку Media. Введите следующие данные:

  • Type: Alerta
  • Send to: введите http://your_alerta_server_ip/api и ключ API из раздела 4.

Нажмите Update.

Теперь настройте отправку сообщений. Выберите Configuration в главном меню, затем выберите Actions. Нажмите кнопку Create Action.

Во вкладке Action в поле Name укажите Forward to Alerta.

Во вкладке Operations выберите такие опции:

  • Default subject: {TRIGGER.STATUS}: {TRIGGER.NAME}
  • Default message:

Default message
resource={HOST.NAME1}
event={ITEM.KEY1}
environment=Production
severity={TRIGGER.SEVERITY}
status={TRIGGER.STATUS}
ack={EVENT.ACK.STATUS}
service={TRIGGER.HOSTGROUP.NAME}
group=Zabbix
value={ITEM.VALUE1}
text={TRIGGER.STATUS}: {TRIGGER.NAME}
tags={EVENT.TAGS}
attributes.ip={HOST.IP1}
attributes.thresholdInfo={TRIGGER.TEMPLATE.NAME}: {TRIGGER.EXPRESSION}
type=zabbixAlert
dateTime={EVENT.DATE}T{EVENT.TIME}Z

Zabbix отправит сообщения в указанном формате в случае возникновения проблем и заменит выражения в фигурных скобках соответствующими значениями. Все эти поля позволяют Alerta получать предупреждения и правильно отображать их.

Создайте новую операцию. Кликните New в поле Operations и введите следующие значения:

  • Send to Users: укажите имя пользователя.
  • Send only to: выберите Alerta.
  • Во вкладке Recovery operations вместо Default укажите следующее сообщение:

Recovery operations
resource={HOST.NAME1}
event={ITEM.KEY1}
environment=Production
severity={TRIGGER.SEVERITY}
status={TRIGGER.STATUS}
ack={EVENT.ACK.STATUS}
service={TRIGGER.HOSTGROUP.NAME}
group=Zabbix
value={ITEM.VALUE1}
text={TRIGGER.STATUS}: {ITEM.NAME1}
tags={EVENT.RECOVERY.TAGS}
attributes.ip={HOST.IP1}
attributes.thresholdInfo={TRIGGER.TEMPLATE.NAME}: {TRIGGER.EXPRESSION}
attributes.moreInfo=<a href="http://x.x.x.x/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.RECOVERY.ID}">Zabbix console</a>
type=zabbixAlert
dateTime={EVENT.RECOVERY.DATE}T{EVENT.RECOVERY.TIME}Z

Это сообщение такое же, как предыдущее. Оно будет отправлено, когда проблема будет устранена.

Чтобы завершить настройку, нажмите Add.

Zabbix может отправлять оповещения в Alerta.

8: Тестовое оповещение

Теперь нужно убедиться, что Zabbix и Alerta интегрированы.

Сгенерируйте тестовое оповещение. По умолчанию Zabbix отслеживает объем свободного места на сервере. Создайте достаточно большой файл, чтобы вызвать предупреждение Zabbix об использовании файловой системы.

Примечание: Это нужно сделать на сервере Zabbix.

Затем определите, сколько свободного места у вас на сервере. Для этого можно использовать команду df:

df -h

Вы увидите такой вывод:

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        20G  1.5G   18G   9% /

В этом случае свободное пространство составляет 18 ГБ.

Используйте команду fallocate, чтобы создать файл, который занимает более 80% свободного места на диске. Это должно запустить отправку оповещений:

fallocate -l 16G /tmp/temp.img

Через несколько минут Zabbix выдаст оповещение о количестве свободного места на диске и запустит настроенное ранее действие, отправив уведомление в Alerta. Вы увидите это новое уведомление на панели управления Alerta.

Теперь можно удалить временный файл:

rm -f /tmp/temp.img

Через минуту Zabbix отправит оповещение о восстановлении. Предупреждение исчезнет из панели; все закрытые предупреждения можно найти во вкладке Closed.

Tags: , , , ,