# Интеграции (источники данных)
Подключение источников данных в 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 | Default template | |
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 | Default template | |
Fluentd (Fluent Bit) | 80,443/tcp | Отправка данных в Monq | Default template | |
Splunk | 80,443/tcp | Отправка данных в Monq | Default template | |
Logstash | 80,443/tcp | Отправка данных в Monq | Default template | |
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 минут)
Нажмите Запустить в правой верхней области страницы для включения Потока данных.
Информация
В случаях возникновения ошибки в Потоке данных 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 через отправку webhook
Используя данный пример, вы можете реализовать приём данных из любого источника, поддерживающего Webhook.
- Добавьте новый Поток данных или перейдите на страницу настройки существующего потока данных с шаблоном конфигурации Default template и скопируйте 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 создайте интеграцию типа Default template и скопируйте ключ 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" через шаблон конфигурации Default template
Для отправки журналов (логов) в систему 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" через шаблон конфигурации Default template
Процессор Fluent Bit способен обрабатывать различные форматы. Ниже рассмотрен прием UDP syslog и чтение локального лога файлов docker (см. подробнее о других способах приема данных (opens new window)).
Схема отправки данных в monq
На стороне Monq создайте два потока данных с шаблоном конфигурации Default template и скопируйте их 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 поток данных с шаблоном конфигурации Default template и скопируйте 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
Информация
В случая, если нет сетевой связанности между Monq и сервером vCenter (по портам 80/tcp и 443/tcp) - необходимо установить и подключить Агент Monq на промежуточном сервере
- Подключите Агент Monq - инструкция
- Перейдите на вкладку Конфигурация Потока данных vCenter.
- Для Заданий по сбору данных с "VMWare vCenter" назначьте метки Координатора, у которого подключенный Агент имеет сетевой доступ к серверу vCenter .
Нажмите Сохранить для сохранения настроек Потока данных.
Нажмите Запустить в правой верхней области страницы для включения Потока данных.
Справка
Поток данных vCenter поддерживает сбор следующих типов событий:
VmMigratedEvent
DrsVmMigratedEvent
HostAddedEvent
HostRemovedEvent
VmCreatedEvent
VmRemovedEvent
# Автопостроение РСМ
Для настройки автоматического создания ресурсно-сервисной модели в Monq необходимо импортировать сценарии автоматизации CMDB Autobuild/vCenter
из GitHub Monq (opens new window).
Подробнее об импорте сценариев в разделе Автоматизация.
vCenter Topology.txt
- сценарий обработки событий топологииvCenter VM Created.txt
- сценарий обработки событий создания виртуальных серверовvCenter VM Migrated.txt
- сценарий обработки событий миграции виртуальных серверовvCenter VM Removed.txt
- сценарий обработки событий удаления виртуальных серверов
Синхронизация всей топологии будет выполняться с интервалом заданным для задания vCenter - TopologySync
в конфигурации потока данных vCenter. По умолчанию: 1 день.
Обновление информации об изменениях в vCenter будет выполняться с интервалом заданным для задания vCenter - EventsDataFlow
в конфигурации потока данных vCenter. По умолчанию: 30 сек.
Обновляется информация об изменениях:
- Создание/удаление виртуальных машин и хостов
- Миграция виртуальных машин (ручная/автоматическая)
После выполнения задания синхронизации топологии настройте Карту РСМ, используя Параметрический фильтр для добавления КЕ на карту.
Владельцем автоматически созданных КЕ является Рабочая группа, которая в свою очередь является владельцем потока данных vCenter и владельцем сценария автоматизации.