Интеграции (источники данных)
Подключение источников данных в Monq осуществляется через настройку Потока данных.
Подробное руководство по работе с Потоками данных доступно по ссылке.
Сетевые взаимодействия типовых интеграций
Пример интеграции | Входящие соединения (порт/протокол) | Исходящее соединение (порт/протокол) | Примечание | Используемый шаблон |
---|---|---|---|---|
Zabbix | 80,443/tcp | Подключение к API Zabbix | Zabbix default | |
Zabbix (webhooks) | 80,443/tcp | Отправка данных в Monq | Default template | |
Zabbix (metrics) | 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 | |
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:
💡 Скрипт актуален для версии Zabbix 5.4 и выше
var request = new HttpRequest();
params = JSON.parse(value);
request.addHeader('Content-Type: application/json');
response = request.post('https://{GLOBAL_DOMAIN}/api/public/cl/v1/stream-data?streamKey={API-KEY}', JSON.stringify(params));
return 'OK';{GLOBAL_DOMAIN}
– адрес вашего пространства Monq, например, sm.monq.cloud.{API-KEY}
– API-ключ, скопированный в первом пункте.
-
- Сохраните новый способ оповещения. В разделе Настройка -> Действия настройте реагирование на события Zabbix и в качестве операции выберите созданный метод оповещения.
Пример настройки Zabbix для отправки метрик в Monq
Используя данный пример, вы можете реализовать приём метрических рядов из Zabbix.
Конфигурация производится на стороне Zabbix. Monq в данном случае является принимающей стороной.
Описание формата принимаемых данных в Monq.
Поддерживается в версиях Zabbix 6.4 и выше.
В веб интерфейсе Zabbix перейдите в раздел "Администрирование" - "Общие" - "Коннекторы"
и сконфигурируйте коннектор следующим образом:
URL:
https://<MONQ-FQDN>/api/public/mcs/v1/metrics-collector/zabbix/stream-ndjson?streamKey=<API-ключ потока данных>
⚠️ Необходимо, чтобы в конфигурационном файле Zabbix Server был включен хотя бы один экземпляр
StartConnectors
(документация 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 (см. подробнее о других способах приема данных).
Схема отправки данных в 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.confcat /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 10cat /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. При необходимости, вы можете реализовать новый парсер и разместить его в конфигурации (см. подробнее).
Пример интеграции с 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
.
Запустите на сервере с logstash, для отправки лог-файла, следующую команду:
root@server$ cat {лог-файл} | nice /usr/share/logstash/bin/logstash -f monq-logstash.conf
Перейдите на экран Первичные события платформы Monq, в списке потоков выберите созданную ранее интеграцию и просмотрите полученные данные из лог-файла.
Пример интеграции с VMWare vCenter
Настройка Потока данных vCenter
Для получения событий синхронизации топологии и событий миграции виртуальных машин в VMWare vSphere с последующим построением Ресурсно-сервисной модели, выполните следующие действия:
Перед тем как вы будете подключать свой экземпляр vCenter к Monq, убедитесь, что иерархия объектов в вашем vCenter выстроена в следующем порядке: Datacenter <- Cluster <- Host <- Virtual Machine
.
-
Создайте Поток данных с шаблоном конфигурации vCenter default.
-
Перейдите на страницу Потока данных и на вкладке Настройка заполните поля:
-
apiUri
- адрес по которому доступен WEB-интерфейс VMWare vCenter (указание протокола не требуется).⚠️
apiUri
должен содержать URL в форматеvcenter.company.com
без указания протокола и пути к SDK -
login
- пользователь системы vCenter, обладающий достаточными правами для получения событий об изменении топологии или отдельно взятых сущностей, в синхронизации состояния которых заинтересован пользователь. -
password
- пароль пользователя системы vCenter
ИнформацияВ случая, если нет сетевой связанности между Monq и сервером vCenter (по портам 80/tcp и 443/tcp) - необходимо установить и подключить Агент Monq на промежуточном сервере
- Подключите Агент Monq - инструкция
- Перейдите на вкладку Конфигурация Потока данных vCenter.
- Для Заданий по сбору данных с "VMWare vCenter" назначьте метки Координатора, у которого подключенный Агент имеет сетевой доступ к серверу vCenter .
-
-
Нажмите Сохранить для сохранения настроек Потока данных.
-
Нажмите Запустить в правой верхней области страницы для включения Потока данных.
Поток данных vCenter поддерживает сбор следующих типов событий:
VmMigratedEvent
DrsVmMigratedEvent
HostAddedEvent
HostRemovedEvent
VmCreatedEvent
VmRemovedEvent
Автопостроение РСМ из vCenter
Для настройки автоматического создания ресурсно-сервисной модели в Monq необходимо импортировать сценарии автоматизации CMDB Autobuild/vCenter
из GitHub Monq.
Подробнее об импорте сценариев в разделе Автоматизация.
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 и владельцем сценария автоматизации.