Мониторинг оповещений Zabbix с помощью Alerta в Ubuntu 16.04
Без категорий | Комментировать запись
Alerta – это веб-приложение, которое систематизирует оповещения систем мониторинга и визуализирует их на одном экране. Alerta поддерживает интеграцию со многими известными инструментами мониторинга: Nagios, Zabbix, Sensu, InfluxData Kapacitor и т.п.
Данное руководство поможет установить Alerta и настроить отслеживание и сбор оповещений Zabbix.
Требования
- Два сервера Ubuntu 16.04.
- Пользователь sudo и настроенный брандмауэр на каждом сервере (все инструкции можно найти здесь).
- Аккаунт GitHub (для защиты веб-интерфейса Alerta). Чтобы создать такой аккаунт, следуйте этим рекомендациям.
На сервере 1 нужно установить:
- Стек LAMP (руководство по установке стека вы найдете по этой ссылке).
- Сервер Zabbix (инструкции по установке можно найти в статье Мониторинг удалённых серверов с помощью Zabbix в Ubuntu 16.04).
На сервере 2 установите:
- Nginx (обратитесь к статье Установка Nginx на Ubuntu 16.04).
- MongoDB (инструкции по установке – здесь).
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 apt-get install python-pip python-dev 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)
Примечание: Если вы используете UFW, разблокируйте порт 8080.
sudo ufw allow 8080/tcp
Читайте также: Настройка брандмауэра UFW на сервере Ubuntu 16.04
Откройте в браузере эту ссылку:
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 cp -r angular-alerta-webui/app/* /var/www/html/
По умолчанию веб-интерфейс Alerta может взаимодействовать с API-интерфейсом сервера разработки, который работает на порту 8080. Его можно настроить для производства. Для этого сделайте API-интерфейс сервера Alerta доступным в конечной точке /api; статический контент веб-консоли нужно обслуживать по тому же домену, чтобы избежать ошибок CORS или HTTPS.
Откройте конфигурационный файл config.js:
sudo nano /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 nano /var/www/wsgi.py
Добавьте в файл следующую строку, которая запускает приложение Alerta.
from alerta.app import app
Затем нужно настроить сам сервер uWSGI.
Создайте конфигурационный файл /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 = /tmp/uwsgi.sock
chmod-socket = 664
uid = www-data
gid = www-data
vacuum = true
die-on-term = true
Полный список опций uWSGI можно найти в документации.
Создайте unit-файл для приложения, чтобы иметь возможность управлять им с помощью systemctl.
sudo nano /etc/systemd/system/alerta-app.service
В unit-файле должны находиться директивы, которые описывают сервис и определяют его поведение. Вставьте в файл:
[Unit]
Description=uWSGI service for Alerta
After=syslog.target
[Service]
ExecStart=/usr/local/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: enabled)
Active: active (running) since Fri 2017-06-09 07:02:14 UTC; 4s ago
Main PID: 19807 (uwsgi)
Status: "uWSGI is ready"
Tasks: 8
Memory: 29.7M
CPU: 477ms
CGroup: /system.slice/alerta-app.service
├─19807 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
├─19819 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
├─19820 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
├─19821 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
├─19822 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
└─19823 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
По умолчанию сервис отключен, он не запускается автоматически. Включите его:
sudo systemctl enable alerta-app
Теперь нужно настроить Nginx для перенаправления запросов к your_alerta_server_ip/api на сервер uWSGI.
Вместо изменения файлов Nginx конфигурации лучше разместить в отдельном файле Alerta.
sudo nano /etc/nginx/sites-available/alerta
Добавьте следующие строки в файл. Вместо 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:/tmp/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;
}
}
Читайте также: Настройка виртуальных хостов Nginx в Ubuntu 16.04
Сохраните и закройте файл.
Чтобы включить сайт, создайте символьную ссылку на файл в каталоге sites-enabled, который Nginx читает во время запуска.
sudo ln -s /etc/nginx/sites-available/alerta /etc/nginx/sites-enabled/
Сохраните и закройте файл.
Убедитесь, что в файле 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 nano /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 nano /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 nano /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.
nano ~/.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
f12558eb-e333-4a10-9c08-7d63f8b0442c (indeterminate -> major)
Откройте в браузере ссылку:
http://your_alerta_server_ip
В панели появится оповещение. Чтобы получить подробную информацию, кликните по нему.
Сервер Alerta запущен и готов принимать новые сообщения. Теперь нужно настроить Zabbix.
7: Установка шлюза Zabbix-Alerta
Теперь нужно настроить систему мониторинга Zabbix для отправки оповещений на сервер Alerta.
Перейдите на сервер 1 (на нем уже установлена система Zabbix).
ssh 8host@your_zabbix_server_ip
Ubuntu 16.04 поставляется с Python 3 и использует python3 как двоичный файл. На момент публикации статьи сценарии Alerta для Zabbix требуют Python 2. Нам также понадобится Git для загрузки исходного кода с GitHub. Для установки этих программных пакетов выполните следующую команду:
sudo apt-get install python python-setuptools git
По умолчанию 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://your_zabbix_server_ip/zabbix/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: Alerta, NGINX, OAuth, Ubuntu 16.04, Zabbix