# Примеры интеграций
Подключение источников данных в monq осуществляется через настройку Потока данных. Подробное руководство по работе с Потоками данных доступно по ссылке.
- Сетевые взаимодействия типовых интеграций
- Подключение источника Zabbix
- Пример интеграции Zabbix через отправку webhook
- Пример интеграции с SCOM
- Пример интеграции с Prometheus
- Пример интеграции с Ntopng
- Пример интеграции с NagiosXI
- Пример интеграции с Nagios Core
- Пример интеграции с Fluentd
- Пример интеграции с Fluent Bit
- Пример интеграции с Logstash
- Пример интеграции с VMWare vCenter
# Сетевые взаимодействия типовых интеграций
Пример интеграции | Входящие соединения (порт/протокол) | Исходящее соединение (порт/протокол) | Примечание | Используемый шаблон |
---|---|---|---|---|
Zabbix | 80,443/tcp | Подключение к API Zabbix | Zabbix default | |
Zabbix (webhooks) | 80,443/tcp | Отправка данных в monq | AnyStream default | |
SCOM | 1433/tcp | Подключение к СУБД SCOM | SCOM default | |
Prometheus | 80,443/tcp | Отправка данных в monq | Prometheus default | |
ntopng | 80,443/tcp | Отправка данных в monq | ntopng default | |
Nagios XI | 80,443/tcp | Подключение к API Nagios XI | Nagios default | |
Nagios Core | 80,443/tcp | Отправка данных в monq | AnyStream default | |
Fluentd (Fluent Bit) | 80,443/tcp | Отправка данных в monq | AnyStream default | |
Splunk | 80,443/tcp | Отправка данных в monq | AnyStream default | |
Logstash | 80,443/tcp | Отправка данных в monq | AnyStream default | |
VMWare vCenter | 80,443/tcp | Подключение к API vCenter | vCenter default |
# Подключение источника Zabbix
Для подключения источника данных типа Zabbix, проведите конфигурацию со стороны Zabbix:
- Создайте группу пользователей с правами на чтение к тем узлам сети, данные о которых хотите направлять в monq. Для создания перейдите в раздел Администрирование -> Группы пользователей и нажмите Создать группу, далее введите имя и выберите группы узлов сети во вкладке Права доступа.
- Создайте пользователя в созданной группе. Для этого перейдите в раздел Администрирование -> Пользователи и нажмите Создать пользователя, в открывшемся окне введите данные пользователя и выберите группу, в которую его необходимо добавить. Скопируйте псевдоним и пароль пользователя для дальнейшей настройки.
Далее перейдите на страницу Потока данных monq с шаблоном конфигурации Zabbix default, на вкладке Настройка заполните поля:
apiUri
- должен содержать URL в форматеhttp://zabbix.example.com/api_jsonrpc.php
login
- логин Zabbixpassword
- пароль Zabbix
При необходимости можно отключить проверку достоверности TLS сертификата веб-сервера Zabbix. Для этого активируйте соответствующий переключатель insecureMode в настройках Потока данных.
и нажмите Сохранить.
При необходимости произведите настройку интервалов запуска для Заданий:
- Zabbix - Events Data Flow (по умолчанию - 10 секунд)
- Zabbix - Api Connection Check (по умолчанию - 30 секунд)
- Zabbix - Version Check (по умолчанию - 5 минут)
Нажмите Запустить в правой верхней области страницы для включения Потока данных.
В monq реализовано взаимодействие с системой мониторинга Zabbix в виде настройки связей между триггерами monq и триггерами Zabbix через конфигурационные единицы (КЕ). Подробная информация по связанным объектам находится в соответствующем разделе документации.
Для настройки дополнительного функционала по синхронизации состояния триггеров Zabbix с триггерами monq необходимо настроить прямое подключение к БД Zabbix (таблицы: auditlog
, auditlog_details
, triggers
). Руководство по настройке коннектора Zabbix.
Данный функционал предусматривает автоматическое выключение триггеров в monq после их ручной деактивации в Zabbix.
Ограничениями являются:
Zabbix БД - MySQL
Zabbix до версии 6.0
Информация
В случаях возникновения ошибки в Потоке данных Zabbix "The SSL connection could not be established, see inner exception." это означает, что monq не может установить защищенное соединение с API Zabbix по причине отсутствия в monq корневого сертификата SSL (CA certificate), которым подписан SSL-сертификат сервера Zabbix.
Для решения данной проблемы необходимо добавить в хранилище сертификатов monq корневой сертификат, которым подписан SSL-сертификат сервера Zabbix.
Пример команды, для добавления CA сертификата в хранилище monq-ca-certificates
:
kubectl get secrets -n production monq-ca-certificates -o json | jq --arg mycert "$(cat newCA.pem | base64)" '.data."newCA.pem"=$mycert' | kubectl apply -f -
где файл newCA.pem
содержит непосредственно корневой сертификат
Справка
Порядок прохождения события о деактивации или удалении триггера в Zabbix:
- Сервис
pl-connector-dispatcher-api-service-runner
периодически забирает из сервисаsm-zabbix-connector-api-service-zabbix-api
события и посылает в сервисcl-stream-data-collector-api-service
через HTTP запрос. - Далее сформированное событие через RabbitMQ по ключу
cl.stream-raw-event.new
отправляется вcl-stream-data-preprocessor-service
, обогащается метками (stream-ready-event.zabbix.new
) и далее отправляется по ключуcl.stream-processed-event.new
в сервисcl-stream-schema-validator-service
. - Если событий в запросе пришло несколько, то они разбиваются, валидируются и по-одному отправляются по ключу
cl.stream-validated-event.new
в сервисcl-stream-data-service-buffer
. - События накапливаются и записываются в БД и далее отправляются в RabbitMQ по ключу, заданному в метках (
cl.stream-ready-event.zabbix.new
). - Очередь событий из Zabbix обрабатывает сервис
sm-zabbix-connector-api-service-autodiscovery
. - С сервиса
sm-zabbix-connector-api-service-autodiscovery
события отправляются по ключуcl.stream-ready-event.new
параллельно на сервисpl-router-service
, где по вебсокетам маршрутизируются на экран Событий и логов, а также и в сервисpl-automaton-prefilter-service
. - В сервисе
pl-automaton-prefilter-service
получаем правила для запуска в автоматоне и отправляем события их запуска вpl-automaton-runner-service
.
# Пример интеграции Zabbix через отправку webhook
Используя данный пример, вы можете реализовать приём данных из любого источника, поддерживающего Webhook.
- Добавьте новый Поток данных или перейдите на страницу настройки существующего потока данных с шаблоном конфигурации AnyStream и скопируйте API-ключ – он понадобится позднее.
- Настройте отправку сообщений из источника данных (в данном случае – Zabbix):
В веб-интерфейсе Zabbix 5.0 перейдите в Администрирование > Способы оповещений и создайте новый тип оповещения. Введите имя, выберите тип Webhook. Заполните таблицу Параметры – содержимое JSON-файла, который будет направлен в monq:
EventID: {EVENT.ID} EventName: {EVENT.NAME} EventSeverity: {EVENT.SEVERITY} HostName: {HOST.NAME} TriggerStatus: {TRIGGER.STATUS}
В поле скрипт скопируйте код на языке JavaScript, формирующий и отправляющий POST-запрос в API вашего пространства monq:
var req = new CurlHttpRequest(); params = JSON.parse(value); req.AddHeader('Content-Type: application/json'); req.Post('https://{GLOBAL_DOMAIN}/api/public/cl/v1/stream-data?streamKey={API-KEY}', JSON.stringify(params));
{GLOBAL_DOMAIN}
– адрес вашего пространства monq, например, sm.monq.cloud.{API-KEY}
– API-ключ, скопированный в первом пункте.
- Сохраните новый способ оповещения. В разделе Настройка -> Действия настройте реагирование на события Zabbix и в качестве операции выберите созданный метод оповещения.
# Пример интеграции с SCOM
Сперва создайте пользователя в базе данных системы SCOM. Для этого подключитесь к целевой базе Operations Manager c помощью клиента СУБД, например, MSSQL, и создайте для нового пользователя:
В разделе Общие введите имя пользователя, выберите проверку подлинности SQL Server, введите пароль. Скопируйте имя и пароль – они понадобятся позже.
В разделе Роли сервера выберите роль
public
.В разделе Сопоставление пользователей выберите роли
db_datareader
иpublic
.Проверьте итоговый список прав в Защищаемых объектах – разрешения должны включать
CONNECT SQL
,VIEW ANY DATABASE
,VIEW ANY DEFINITION
.Подтвердите создание пользователя – нажмите ОК.
Далее перейдите на страницу настройки потока данных с шаблоном SCOM default и на вкладке Настройка заполните поля:
- host - Адрес СУБД
- login - Имя пользователя
- password - Пароль
- dbName - Название СУБД -
OperationsManager
- port - Порт подключения к СУБД -
1433
Нажмите Сохранить.
Нажмите Запустить в правой верхней области страницы для включения потока данных.
# Пример интеграции с Prometheus
Перейдите на страницу настройки потока данных с шаблоном Prometheus default и скопируйте API-ключ.
Далее произведите настройку файла alertmanager.yaml
Prometheus:
Добавьте
receiver 'web.hook'
:receivers: - name: 'web.hook' webhook_configs: - send_resolved: true url: 'https://{GLOBAL_DOMAIN}/api/public/cl/v1/stream-data?streamKey={API-KEY}'
{GLOBAL_DOMAIN}
– адрес вашего пространства monq, например, sm.monq.cloud.{API-KEY}
– API-ключ, скопированный со страницы потока данных.В блоке
route
добавьте порядок группировкиgroup_by
и способ отправки черезreceiver 'web.hook'
, заполнить ключgroup_by
вручную:route: group_by: ['<Метки группировки>'] group_wait: 30s group_interval: 30s repeat_interval: 1h receiver: 'web.hook'
Перезапустите alertmanager.
Пример итогового конфигурационного файла
alertmanager.yaml
global: resolve_timeout: 5m route: group_by: ['ingress'] group_wait: 30s group_interval: 30s repeat_interval: 1h receiver: 'web.hook' receivers: - name: 'web.hook' webhook_configs: - send_resolved: true url: 'https://sm.example.ru/api/public/cl/v1/stream-data?streamKey=e4da3b7f-bbce-2345-d777-2b0674a31z65' inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance']
Нажмите Запустить в правой верхней области страницы для включения потока данных.
# Пример интеграции с Ntopng
Перейдите на страницу настройки потока данных с шаблоном ntopng и скопируйте API-ключ.
Далее перейдите в интерфейс системы ntopng, в раздел Settings -> Preferences -> Alert Endpoints и активируйте переключатель Toggle Webhook Notification. Далее вставьте адрес https://{GLOBAL_DOMAIN}/api/public/cl/v1/stream-data?streamKey={API-KEY}
в поле Notification URL.
{GLOBAL_DOMAIN}
– адрес вашего пространства monq, например, sm.monq.cloud.
{API-KEY}
– API-ключ, скопированный со страницы потока данных.
# Пример интеграции с NagiosXI
В развернутом Nagios добавьте нового пользователя – перейдите в раздел Админ -> Добавить новые учетные записи пользователей -> Добавить нового пользователя. В окне создания пользователя введите имя, пароль, email и отметьте пункты Может видеть все хосты и сервисы, Имеет доступ только для чтения и Доступ к API («Can see all hosts and services», «Read-only access» и «API access»).
Нажмите Добавить пользователя.
Теперь выберите созданного пользователя в списке. На странице пользователя, в блоке Настройки LDAP, скопируйте ключ из поля Ключ API.
Далее перейдите на страницу настройки потока данных в monq и в блоке Настройка заполните поле apiUri и вставьте скопированный ранее ключ в поле apiKey, нажмите Сохранить.
Нажмите Запустить в правой верхней области страницы для включения потока данных.
# Пример интеграции с Nagios Core
В интерфейсе monq создайте интеграцию типа AnyStream default и скопируйте ключ API.
Nagios Core не имеет нативной поддержки HTTP API интерфейса. Интеграция с системой мониторинга настраивается путем добавления кастомного скрипта оповещения.
⚠️ Данная модель использует следующие статические поля, так как их значения невозможно получить в notification:
INSTANCE_ID="1" OBJECT_ID="1" LAST_HARD_STATE=0
Для конфигурации потока со стороны Nagios:
Включите enviroment_macros:
enable_environment_macros=1
Добавьте comands:
define command { command_name send-service-event-to-sm command_line /usr/local/bin/send_sm 2 > /tmp/sm.log 2>&1 } define command { command_name send-host-event-to-sm command_line /usr/local/bin/send_sm 1 > /tmp/sm.log 2>&1 }
Добавьте contact:
define contact { use generic-contact contact_name sm alias Service Monitor service_notification_period 24x7 host_notification_period 24x7 host_notifications_enabled 1 service_notifications_enabled 1 service_notification_options w,u,c,r,f host_notification_options d,u,r,f service_notification_commands send-service-event-to-sm host_notification_commands send-host-event-to-sm register 1 }
Измените текущую contactgroup, добавив в нее созданный contact:
define contactgroup{ contactgroup_name admins alias Nagios Administrators members nagiosadmin,sm }
Создайте скрипт:
cat > /usr/local/bin/send_sm <<EOF #!/bin/bash ############################# ##### Define constants ###### ############################# SM_URI="<sm uri with proto>" CONNECTOR_KEY="<key>" INSTANCE_ID="1" OBJECT_ID="1" LAST_HARD_STATE=0 ################################# ##### Define dynamic fields ##### ################################# STATE_TIME=`date '+%F %T'` OBJECTTYPE_ID=$1 HOST_NAME=$NAGIOS_HOSTNAME SERVICE_DESCRIPTION=$NAGIOS_SERVICEDESC if [[ "$1" == "1" ]];then STATE=$NAGIOS_HOSTSTATEID LAST_STATE=$NAGIOS_LASTHOSTSTATEID STATE_TYPE_NAME=$NAGIOS_HOSTSTATETYPE ATTEMPT=$NAGIOS_HOSTATTEMPT MAX_ATTEMPTS=$NAGIOS_MAXHOSTATTEMPTS OUTPUT=$NAGIOS_HOSTOUTPUT else STATE=$NAGIOS_SERVICESTATEID LAST_STATE=$NAGIOS_LASTSERVICESTATEID STATE_TYPE_NAME=$NAGIOS_SERVICESTATETYPE ATTEMPT=$NAGIOS_SERVICEATTEMPT MAX_ATTEMPTS=$NAGIOS_MAXSERVICEATTEMPTS OUTPUT=$NAGIOS_SERVICEOUTPUT fi if [[ "$STATE" != "LAST_STATE" ]];then STATE_CHANGE=1 else STATE_CHANGE=0 fi if [[ "$STATE_TYPE_NAME" == "HARD" ]];then STATE_TYPE=1 else STATE_TYPE=0 fi ############################# ##### Send http request ##### ############################# curl -X POST -H "Content-Type: application/json" $SM_URI/api/public/sm/v1/events-aggregator?connectorKey=$CONNECTOR_KEY \ -d "{ \"recordcount\": \"1\", \"stateentry\": [ { \"instance_id\": \"$INSTANCE_ID\", \"state_time\": \"$STATE_TIME\", \"object_id\": \"$OBJECT_ID\", \"objecttype_id\": \"$1\", \"host_name\": \"$HOST_NAME\", \"service_description\": \"$SERVICE_DESCRIPTION\", \"state_change\": \"$STATE_CHANGE\", \"state\": \"$STATE\", \"state_type\": \"$STATE_TYPE\", \"current_check_attempt\": \"$ATTEMPT\", \"max_check_attempts\": \"$MAX_ATTEMPTS\", \"last_state\": \"$LAST_STATE\", \"last_hard_state\": \"$LAST_HARD_STATE\", \"output\": \"$OUTPUT\" } ] }" EOF chmod +x /usr/local/bin/send_sm
Перезапустите Nagios Core для приминения конфига.
# Пример интеграции с Fluentd
Пример настройки потока данных с внешним сервисом "Fluentd" через шаблон конфигурации AnyStream default
Для отправки журналов (логов) в систему monq необходимо обеспечить соблюдение следующих условий:
- Лог содержит поле
@timestamp
в формате"2019-11-02T17:23:59.301361+03:00"
- Fluentd отправляет лог в формате
application/json
- Отправка происходит через модуль
out_http
Далее сконфигурируйте fluentd:
Установите модуль fluentd.
fluent-gem install fluent-plugin-out-http
Добавьте запись
timestamp
в лог – для этого добавьте блокfilter
в конфигурационный файл, например, для записей с тэгомkubernetes.var.log.containers.nginx-ingress-**.log
.<filter kubernetes.var.log.containers.nginx-ingress-**.log> @type record_transformer enable_ruby <record> @timestamp ${time.strftime('%Y-%m-%dT%H:%M:%S.%6N%:z')} </record> </filter>
Добавьте отправку в monq в блок отправки данных, используя механизм
@type copy
.<match **> @type copy <store> @type stdout format json </store> ... ... </store> <store> @type http endpoint_url https://{GLOBAL_DOMAIN}/api/public/cl/v1/stream-data?streamKey={API-KEY} http_method post serializer json rate_limit_msec 0 raise_on_error false recoverable_status_codes 503 buffered true bulk_request false custom_headers {"X-Smon-Userspace-Id": "1"} <buffer> ... </buffer> </store> </match>
{GLOBAL_DOMAIN}
– адрес вашего пространства monq, например, sm.monq.cloud.{API-KEY}
– ключ, скопированный со страницы потока данных monq.Примените настройки и проверьте логи микросервиса
cl-stream-data-collector-service
в режимеfollow
.Если fluentd используется в docker-контейнере внутри kubernetes, пересоберите контейнер с плагином.
В примере используется
fluentd-kubernetes-daemonset:v1.10-debian-elasticsearch7-1
.mkdir fluentd-kubernetes; cd fluentd-kubernetes cat > Dockerfile << EOF FROM fluent/fluentd-kubernetes-daemonset:v1.10-debian-elasticsearch7-1 RUN fluent-gem install fluent-plugin-out-http ENTRYPOINT ["tini", "--", "/fluentd/entrypoint.sh"] EOF docker build -t fluentd-kubernetes-daemonset:v1.10-debian-elasticsearch7-1_1 .
Нажмите Запустить в правой верхней области страницы для включения потока данных.
# Пример интеграции с Fluent Bit
Пример настройки потока данных с внешним сервисом "Fluent Bit" через шаблон конфигурации AnyStream default
Процессор Fluent Bit способен обрабатывать различные форматы. Ниже рассмотрен прием UDP syslog и чтение локального лога файлов docker (см. подробнее о других способах приема данных (opens new window)).
Схема отправки данных в monq
На стороне monq создайте два потока данных с шаблоном конфигурации AnyStream default и скопируйте их API-ключи.
Сконфигурируйте Fluent Bit следующим образом:
cat /etc/td-agent-bit/td-agent-bit.conf
[SERVICE] flush 5 daemon Off log_level info parsers_file parsers.conf plugins_file plugins.conf http_server On http_listen 0.0.0.0 http_port 2020 storage.metrics on @INCLUDE inputs.conf @INCLUDE outputs.conf @INCLUDE filters.conf
cat /etc/td-agent-bit/inputs.conf
[INPUT] Name syslog Parser syslog-rfc3164 Listen 0.0.0.0 Port 514 Mode udp Tag syslog [INPUT] Name tail Tag docker Path /var/lib/docker/containers/*/*.log Parser docker DB /var/log/flb_docker.db Mem_Buf_Limit 10MB Skip_Long_Lines On Refresh_Interval 10
cat /etc/td-agent-bit/outputs.conf
[OUTPUT] Name http Host ${MONQ_URL} Match syslog URI /api/public/cl/v1/stream-data Header x-smon-stream-key ${KEY1} Header Content-Type application/x-ndjson Format json_lines Json_date_key @timestamp Json_date_format iso8601 allow_duplicated_headers false [OUTPUT] Name http Host ${MONQ_URL} Match docker URI /api/public/cl/v1/stream-data Header x-smon-stream-key ${KEY2} Header Content-Type application/x-ndjson Format json_lines Json_date_key @timestamp Json_date_format iso8601 allow_duplicated_headers false
${MONQ_URL}
– адрес вашего пространства monq, например, sm.monq.cloud.${KEY1}
,${KEY2}
– API-ключи, скопированные на странице потоков данных monq.После изменения конфигурационных файлов перезапустите Fluent Bit для применения настроек.
В примере используются стандартные парсеры, поставляемые с Fluent Bit. При необходимости, вы можете реализовать новый парсер и разместить его в конфигурации (см. подробнее (opens new window)).
# Пример интеграции с Logstash
Рассмотрим приём некоторого лог-файла с некоторого сервера через Logstash.
Создайте в системе monq поток данных с шаблоном конфигурации AnyStream default и скопируйте API-ключ потока.
Установите на сервере, с которого будут передаваться логи, компонент стека ELK logstash
root@server$ apt-get install logstash
Создайте конфигурационный файл monq-logstash.conf
в каталоге с Logstash, следующего содержания:
input {
stdin {
type => "logstash-monq"
}
}
filter {
}
output {
http {
url => "https://{GLOBAL_DOMAIN}/api/public/cl/v1/stream-data?streamKey={API-KEY}"
http_method => "post"
}
}
{GLOBAL_DOMAIN}
- адрес вашего пространства monq, например, sm.monq.cloud
{API-KEY}
– API-ключ, скопированный со страницы потока данных.
В данном примере, передача лог-файла в monq, осуществляется через стандартный ввод <STDIN>
без дополнительной обработки и фильтрации со стороны logstash.
За дополнительной информацией по работе с logstash обращайтесь к документации
ELK
(opens new window).
Запустите на сервере с logstash, для отправки лог-файла, следующую команду:
root@server$ cat {лог-файл} | nice /usr/share/logstash/bin/logstash -f monq-logstash.conf
Перейдите на экран Первичные события платформы monq, в списке потоков выберите созданную ранее интеграцию и просмотрите полученные данные из лог-файла.
# Пример интеграции с VMWare vCenter
# Настройка Потока данных vCenter
Для получения событий синхронизации топологии и событий миграции виртуальных машин в VMWare vSphere с последующим построением Ресурсно-сервисной модели, выполните следующие действия:
Создайте Поток данных с шаблоном конфигурации vCenter default.
Перейдите на страницу Потока данных и на вкладке Настройка заполните поля:
apiUri
- адрес по которому доступен WEB-интерфейс VMWare vCenter (указание протокола не требуется).⚠️
apiUri
должен содержать URL в форматеvcenter.company.com
без указания протокола и пути к SDKlogin
- пользователь системы vCenter, обладающий достаточными правами для получения событий об изменении топологии или отдельно взятых сущностей, в синхронизации состояния которых заинтересован пользователь.password
- пароль пользователя системы vCenter
Перейдите на вкладку Конфигурация Потока данных.
- Для Заданий по сбору данных с "VMWare vCenter" назначьте метки Координатора, у которого подключенный Агент имеет сетевой доступ к серверу vCenter (80/tcp, 443/tcp).
Нажмите Сохранить для сохранения настроек Потока данных.
Нажмите Запустить в правой верхней области страницы для включения Потока данных.
Справка
В текущей версии monq поддерживает следующие типы событий:
VmMigratedEvent
;DrsVmMigratedEvent
;HostAddedEvent
;HostRemovedEvent
;VmCreatedEvent
;VmRemovedEvent
.
# Автопостроение РСМ
Справка
Используется внутренний сервис автопостроения РСМ. С версии monq 6.8.0 пользователям доступно использование сценариев автоматизации для конфигурации РСМ (документация).
Синхронизация всей топологии будет выполняться с интервалом заданным для задания vCenter - TopologySync
в конфигурации потока данных vCenter. По умолчанию: 1 день.
Обновление информации об изменениях в vCenter будет выполняться с интервалом заданным для задания vCenter - EventsDataFlow
в конфигурации потока данных vCenter. По умолчанию: 30 сек.
Обновляется информация об изменениях:
- Создание/удаление виртуальных машин и хостов
- Миграция виртуальных машин (ручная/автоматическая)
Через сервис автопостроения РСМ теги объектов vCenter будут добавлены к КЕ в качестве меток.
Метка КЕ будет представлена следующими атрибутами тега:
- Свойство -
vCenterTags
- Значения
{Значение поля Category}:{Значение поля AssignedTags}
Для одного объекта может быть несколько тегов.
Проверка на актуальность тегов производится при каждом получении события топологии.
После выполнения задания синхронизации топологии настройте Карту РСМ, используя Параметрический фильтр для добавления КЕ на карту.
Владельцем автоматически созданных КЕ является Рабочая группа, которая в свою очередь является владельцем потока данных vCenter.