пятница, 23 июня 2017 г.

Интеграция сервисов в Slack (Redmine, Zabbix, Teamcity)

Slack - это корпоративный мессенджер с возможностью интеграции многих сервисов.
В отличие от skype (не skype for business) или telegram очень удобен для работы команды, как в плане общения, так и в плане интеграции.

После перехода со Skype на Slack я в первую очередь решил настроить его интеграцию с некоторыми сервисами, используемыми в IT-инфраструктуре. Некоторые вещи реализуются несколькими кликами в Slack и самом сервисе, а в некоторых приходится искать сторонние решения или придумывать их самому.
В заметке я опишу как я настраивал интеграцию Slack с системой управления проектами Redmine, мониторингом Zabbix и CI-инструментом Teamcity.

1. Redmine

Первым делом идем в Slack, создаем WebHook и канал:
Post to Channel выбираем существующий или создаем новый (например #monitoring)
Webhook URL запоминаем его, далее он нам пригодится.
По желанию можно добавить иконку для Redmine.
Далее идем на сервер с Redmine и ставим плагин:
cd /var/www/redmine/plugins/
git clone https://github.com/sciyoshi/redmine-slack.git redmine_slack
bundle install

Перезапускаем Redmine.
Далее идем в раздел Redmine: Администрирование - Модули - Redmine Slack - Параметры
Указываем WebHook, который нам выдал Slack, указываем имя канала и имя пользователя от которого будут приходить уведомления.
Slack URL: https://hooks.slack.com/services/ABCDE...
Slack Channel: #monitoring
Slack Username: Redmine


2. Zabbix

Аналогично, создаем новый WebHook для Zabbix, канал можно указать тот же (#monitoring) или создать новый.
Далее идем на Zabbix-сервер в каталог со скриптами и создаем свой скрипт:
cd /srv/zabbix/alertscripts/
vim slack.sh
#!/bin/bash
url='https://hooks.slack.com/services/ABCDEFG...' # edit
username='Zabbix Server' # edit
to="$1"
subject="$2"
if [[ "$subject" == 'OK' ]]; then
emoji=':smile:'
elif [ "$subject" == 'PROBLEM' ]; then
emoji=':frowning:'
else
emoji=':ghost:'
fi
message="${subject}: $3"
payload="payload={\"channel\": \"${to//\"/\\\"}\", \"username\": \"${username//\"/\\\"}\", \"text\": \"${message//\"/\\\"}\", \"icon_emoji\": \"${emoji}\"}"
curl -m 5 --data-urlencode "${payload}" $url -A 'zabbix-slack-alertscript / https://github.com/ericoc/zabbix-slack-alertscript'

где в переменные url и username вписываем свои данные.

Далее идем в Zabbix - Администрирование - Способы оповещений - Создать способ оповещения:
Имя: Slack
Тип: Скрипт
Имя скрипта: slack.sh

Далее идем в Zabbix - Администрирование - Пользователи - Ваш пользователь - Оповещения - Добавить:
Тип: Slack
Отправлять на: monitoring

Далее идем в Zabbix - Настройка - Действия.
Тут либо создаем новое действие (отправку сообщений через Slack), либо изменяем существующее, например на:
Отправлять сообщение пользователям: username через все способы оповещения


3. Teamcity

Аналогично, создаем новый WebHook для Teamcity, канал можно указать тот же (#monitoring) или создать новый.
Идем на сервер Teamcity и устанавливаем плагин:
cd /srv/.BuildServer/plugins/
wget https://github.com/enlivenhq/teamcity-slack/releases/download/1.0/teamcity-slack-integration-1.0.zip

Перезапускаем Teamcity.
Идем в Teamcity из-под админа и проверяем, появился ли плагин в общем списке, Administration - Plugin List:
Plugin Name  Version       Vendor      Home Path
Slack        1.0-SNAPSHOT  Enliven HQ  <TeamCity Data Directory>/plugins/.unpacked/teamcity-slack-integration-1.0

Далее идем в Teamcity из-под админа в Username - My Settings & Tools - Notification Rules - Slack Notifier:
#channel or @name: #monitoring
Bot name: teamcity
Webhook URL: https://hooks.slack.com/services/ASDFG...

Комментариев нет: