Как контролировать оповещения Zabbix с помощью оповещений на CentOS 7

Вступление

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

В этом руководстве вы настроите Alerta и настроите его для отображения уведомлений из системы мониторинга Zabbix.

Предпосылки

Чтобы следовать этому уроку, вам понадобится:

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

Alerta состоит из сервера и веб-интерфейса. Сервер Alerta отвечает за хранение и обработку предупреждений, а также за обслуживание JSON через API. Веб-интерфейс Alerta позволяет просматривать список предупреждений в браузере, поэтому вам не придется интерпретировать JSON самостоятельно. Мы установим оба компонента на сервер, на котором установлены MongoDB и Nginx. Мы будем называть этот компьютер сервером Alerta в этом руководстве. Войдите на эту машину как пользователь без полномочий root:

ssh sammy@

Прежде чем мы сможем установить какие-либо компоненты Alerta, нам нужно установить + pip +, менеджер пакетов Python и файлы разработки Python. Нам также потребуется установить Git, чтобы мы могли получить исходный код Alerta из GitHub.

Выполните следующую команду для установки этих пакетов программного обеспечения:

sudo yum install python-pip python-devel gcc git

После установки этих пакетов мы готовы установить Alerta.

Сначала мы установим сервер Alerta с помощью + pip +:

sudo pip install alerta-server

Проверьте установку, запустив сервер Alerta в режиме разработки:

sudo alertad

Вы должны увидеть что-то вроде:

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

Теперь вы можете открыть + http: //: 8080 + в своем браузере и увидеть веб-страницу Alerta API, которая покажет вам несколько примеров использования.

Убедившись, что сервер работает, остановите его, нажав + CTRL + C +. Мы настроим его как сервис в ближайшее время.

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

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

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

Сначала получите исходный код от 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 + на нашем сервере, и предоставим статическое содержимое веб-консоли из того же домена, что позволяет нам избежать проблем с https: // ru.wikipedia.org/wiki/Cross-origin_resource_sharing[CORS] или ошибки HTTPS со смешанным содержимым.

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

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

И установите + endpoint в` + / api _`:

/var/www/html/config.js

   'use strict';

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

Оставьте остальные параметры по умолчанию. Мы изменим некоторые из них позже в этом руководстве, когда настроим авторизацию OAuth.

Теперь все необходимые компоненты Alerta установлены. Нам просто нужно настроить их для совместной работы.

Шаг 3 - Запуск оповещения с UWSGI позади Nginx.

Мы можем использовать сервер разработки + alerttad + для некоторых быстрых тестов, но он не подходит для производственного использования, поэтому давайте исправим это. Поскольку Alerta написана на Python, нам нужно использовать сервер WSGI для его запуска. В этом уроке мы будем запускать Alerta как приложение uWSGI, проксированное за Nginx, по адресу + http: /// api +.

Сначала установите сервер приложений uWSGI с помощью диспетчера пакетов Python:

sudo pip install uwsgi

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

sudo vi /var/www/wsgi.py

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

/var/www/wsgi.py

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.

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

/etc/uwsgi.ini

[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 в documentation.

Далее мы создадим модуль Systemd для этого приложения, чтобы мы могли управлять им с помощью команды + systemctl +.

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

Этот файл модуля нуждается в некоторых директивах конфигурации, которые описывают модуль и определяют его поведение. Добавьте следующие строки в файл:

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

[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, в this Systemd руководство.

Теперь вы можете запустить сервис uWSGI:

sudo systemctl start alerta-app

Вы можете проверить статус, запустив:

systemctl status alerta-app

Вы увидите следующий вывод:

Output    ●
      Loaded: loaded (/etc/systemd/system/alerta-app.service; disabled; vendor preset: disabled)
      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, чтобы перенаправить все запросы на + / api + на работающий сервер uWSGI и обслуживать веб-интерфейс с Nginx.

Вместо того, чтобы изменять конфигурационный файл Nginx по умолчанию, мы поместим конфигурацию Alerta в ее собственный файл.

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

Добавьте следующее содержимое в файл. Обязательно замените значение + server_name + на IP-адрес вашего сервера Alerta.

/etc/nginx/conf.d/alerta.conf

server {
   listen  80;
   server_name  ;

   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 в этом tutorial.

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

Затем протестируйте конфигурацию Nginx, чтобы убедиться в отсутствии опечаток или неправильной конфигурации:

sudo nginx -t

Вы увидите следующий вывод, если в вашей конфигурации нет ошибок:

Output    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: // + в своем браузере и увидите панель управления Alerta.

изображение: https: //assets.digitalocean.com/articles/alerta_zabbix_centos7/vlrsF6x.png [Панель управления оповещениями]

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

Шаг 4 - Защита оповещений с помощью базовой аутентификации

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

sudo vi /etc/alertad.conf

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

/etc/alertad.conf

AUTH_REQUIRED = True
SECRET_KEY = ''

Установите + SECRET_KEY + в произвольную строку по вашему выбору. Сохраните файл, выйдите из редактора и перезапустите службу uWSGI:

sudo systemctl restart alerta-app

Перезагрузите веб-страницу Alerta Web UI и выберите в меню ссылку * Логин *. Вы увидите сообщение «Пожалуйста, войдите, чтобы продолжить». Нажмите на ссылку * Создать учетную запись * и создайте новую учетную запись. После завершения процесса вы получите доступ к панели управления Alerta.

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

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

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

Шаг 5 - Защита оповещений с помощью OAuth (необязательно)

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

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

Заполните форму со следующими данными:

  1. Заполните * Имя приложения * с помощью * Alerta * или подходящего описательного имени.

  2. Для * URL-адреса домашней страницы * используйте + http: /// +.

  3. Введите * URL обратного вызова авторизации * с помощью + http: /// +.

  4. Нажмите * Зарегистрировать приложение *, чтобы сохранить настройки.

  5. Скопируйте значения * Client ID * и * Client Secret *, представленные на следующем экране.

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

sudo vi /etc/alertad.conf

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

/etc/alertad.conf

OAUTH2_CLIENT_ID = ''
OAUTH2_CLIENT_SECRET = ''
ALLOWED_GITHUB_ORGS = ['']

Для этих значений используйте свой идентификатор клиента GitHub, секрет клиента GitHub и организацию GitHub соответственно.

Сохраните файл, выйдите из редактора и перезапустите службу uWSGI:

sudo systemctl restart alerta-app

Затем измените провайдера аутентификации для веб-интерфейса. Отредактируйте его файл конфигурации:

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

Найдите следующий раздел и измените провайдера с + basic + на + github + и введите свой идентификатор клиента GitHub:

/var/www/html/config.js

   ...


   ...

Откройте + http: // + для доступа к веб-интерфейсу Alerta. На этот раз вы увидите сообщение «Пожалуйста, войдите, чтобы продолжить». Нажмите кнопку * Login *, чтобы войти, и вам будет предложено разрешить приложению доступ к вашей учетной записи GitHub. Как только вы разрешите доступ, вы войдете в систему.

Теперь мы можем запустить простой тест, чтобы проверить, правильно ли настроена и работает ли Alerta.

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

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

sudo pip install alerta

Затем создайте файл конфигурации, который определяет конечную точку API Alerta, которую вы настроили ранее, вместе с ключом API, который вы хотите использовать. Создайте новый файл в вашем редакторе:

vi ~/.alerta.conf

Вставьте следующее в файл:

~ / .Alerta.conf

[DEFAULT]
endpoint = http://
key=

Используйте ключ API, который вы установили на шаге 4 для опции + key +.

Теперь мы можем отправить тестовое оповещение:

alerta send --resource webserver01 --event down --environment Production --service Website01 --severity major --text "Web server 01 is down." --value ERROR

Вы увидите вывод, похожий на этот:

Output1015fca2-eff6-441d-8c66-6abf9368b830 (indeterminate -> major)

Зайдите в браузер + http: // +, и вы увидите на панели инструментов сообщение, похожее на то, что показано на следующем рисунке:

изображение: https: //assets.digitalocean.com/articles/alerta_zabbix_centos7/SC6mZ6A.png [Alerta, отображающий тестовое предупреждение]

Вы можете нажать на сообщение, чтобы увидеть детали.

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

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

На этом этапе мы изменим нашу систему мониторинга Zabbix, чтобы отправлять уведомления в Alerta.

Войдите на свой компьютер Zabbix как пользователь без полномочий root:

ssh sammy@

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

git clone
cd zabbix-alerta
sudo python setup.py install

Затем создайте символическую ссылку для скрипта + zabbix-alertsta + в каталоге, где Zabbix хранит скрипты оповещений. Вы можете найти его путь в файле конфигурации + / etc / zabbix / zabbix_server.conf +:

sudo grep -e '^AlertScriptsPath' /etc/zabbix/zabbix_server.conf

Вы увидите вывод, который выглядит следующим образом:

OutputAlertScriptsPath=/usr/lib/zabbix/alertscripts

По умолчанию Zabbix ищет скрипты в + / usr / lib / zabbix / alertscripts +. Выполните следующую команду, чтобы создать символическую ссылку:

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

Давайте настроим интеграцию Alerta. Войдите в свой веб-интерфейс Zabbix по адресу + http: /// zabbix / +.

В главном меню нажмите * Администрирование *, выберите * Типы мультимедиа * и нажмите кнопку * Создать тип мультимедиа * в верхнем правом углу.

Заполните форму со следующими данными:

  • Для * Имя * введите + Alerta +.

  • Для * Type * выберите * Script * из выпадающего списка.

  • Для * имени сценария * введите + zabbix-alertsta +.

  • Для * Параметры скрипта * введите следующие значения:

  • '+ {ALERT.SENDTO} + `

  • '+ {ALERT.SUBJECT} + `

  • '+ {ALERT.MESSAGE} + `

  • Убедитесь, что установлен флажок * Включено *.

Нажмите кнопку * Добавить *, чтобы создать новый тип носителя.

Затем добавьте новые медиа для вашей учетной записи пользователя. Выберите * Administration * в главном меню, затем выберите * Users *. Нажмите свое имя пользователя и выберите вкладку * Media *. Введите следующие данные

  • Для * Type * выберите * Alerta *.

  • Для * Send to * введите + http: /// api; +.

Используйте ключ API, созданный на шаге 4.

Сохраните конфигурацию, нажав кнопку * Обновить *.

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

На вкладке * Action * установите для поля * Name * значение + Forward to Alerta +.

На вкладке * Операции * установите следующие параметры:

  • Установите для * Тема по умолчанию * значение + {TRIGGER.STATUS}: {TRIGGER.NAME} +

  • Для * сообщения по умолчанию * введите следующий текст:

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 *. введите в форму следующие значения:

  • Для * Отправить пользователям * введите ++.

  • Для * Отправить только на * выберите * Alerta * из выпадающего списка.

Затем выберите вкладку * Операции восстановления * и измените сообщение * По умолчанию * на следующее:

Recovery operationsresource={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

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

Завершите настройку, нажав кнопку * Добавить *.

Zabbix готов отправлять оповещения в Alerta. Давайте создадим один.

Шаг 8 - Создание тестового оповещения для проверки интеграции Zabbix-Alerta

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

Войдите на свой Zabbix сервер, если вы еще не подключены.

Затем определите, сколько свободного места у вас на сервере. Вы можете использовать команду + df +, чтобы узнать:

df -h

Вы увидите вывод, подобный следующему:

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

Нас интересует количество свободного места. В этом случае свободное пространство равно + 18GB +. Ваше свободное место может отличаться.

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

fallocate -l 16G /tmp/temp.img

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

изображение: https: //assets.digitalocean.com/articles/alerta_zabbix_centos7/sLlRWM3.png [Alerta, отображающее предупреждение о свободном пространстве из Zabbix]

Теперь, когда вы знаете, что оповещения работают, удалите созданный вами временный файл, чтобы освободить место на диске:

rm -f /tmp/temp.img

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

image: https: //assets.digitalocean.com/articles/alerta_zabbix_centos7/zWuB6Hz.png [Закрытые оповещения Alerta, отображающие разрешенное оповещение о свободном пространстве.]

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

Заключение

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

Related