Интеграции (источники данных)
Подключение источников данных в Monq осуществляется через настройку Потока данных.
Подробное руководство по работе с Потоками данных доступно по ссылке.
Сетевые взаимодействия типовых интеграций
Пример интеграции | Входящие соединения (порт/протокол) | Исходящее соединение (порт/протокол) | Примечание | Используемый шаблон |
---|---|---|---|---|
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 (см. подробнее о других способах приема данных).
Схема отправки данных в 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 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.
Подробнее об импорте сценариев в разделе Автоматизация.
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 и владельцем сценария автоматизации.