Перейти к основному содержимому

Интеграции (источники данных)

Подключение источников данных в Monq осуществляется через настройку Потока данных.

Подробное руководство по работе с Потоками данных доступно по ссылке.

Сетевые взаимодействия типовых интеграций

Пример интеграцииВходящие соединения (порт/протокол)Исходящее соединение (порт/протокол)ПримечаниеИспользуемый шаблон
Zabbix80,443/tcpПодключение к API ZabbixZabbix default
Zabbix (webhooks)80,443/tcpОтправка данных в MonqDefault template
Zabbix (metrics)80,443/tcpОтправка метрик в MonqDefault template
SCOM1433/tcpПодключение к СУБД SCOMSCOM default
Prometheus80,443/tcpОтправка данных в MonqPrometheus default
ntopng80,443/tcpОтправка данных в Monqntopng default
Nagios XI80,443/tcpПодключение к API Nagios XINagios default
Nagios Core80,443/tcpОтправка данных в MonqDefault template
Fluentd (Fluent Bit)80,443/tcpОтправка данных в MonqDefault template
Logstash80,443/tcpОтправка данных в MonqDefault template
VMWare vCenter80,443/tcpПодключение к API vCentervCenter default

Подключение источника Zabbix

Для подключения источника данных типа Zabbix, проведите конфигурацию со стороны Zabbix:

  1. Создайте группу пользователей с правами на чтение к тем узлам сети, данные о которых хотите направлять в Monq. Для создания перейдите в раздел Администрирование -> Группы пользователей и нажмите Создать группу, далее введите имя и выберите группы узлов сети во вкладке Права доступа.
  2. Создайте пользователя в созданной группе. Для этого перейдите в раздел Администрирование -> Пользователи и нажмите Создать пользователя, в открывшемся окне введите данные пользователя и выберите группу, в которую его необходимо добавить. Скопируйте псевдоним и пароль пользователя для дальнейшей настройки.

Далее перейдите на страницу Потока данных Monq с шаблоном конфигурации Zabbix default, на вкладке Настройка заполните поля:

  1. apiUri - должен содержать URL в формате http://zabbix.example.com/api_jsonrpc.php
  2. login - логин Zabbix
  3. password - пароль 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.

  1. Добавьте новый Поток данных или перейдите на страницу настройки существующего потока данных с шаблоном конфигурации Default template и скопируйте API-ключ – он понадобится позднее.
  2. Настройте отправку сообщений из источника данных (в данном случае – 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-ключ, скопированный в первом пункте.

      Изображение

  3. Сохраните новый способ оповещения. В разделе Настройка -> Действия настройте реагирование на события 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, и создайте для нового пользователя:

  1. В разделе Общие введите имя пользователя, выберите проверку подлинности SQL Server, введите пароль. Скопируйте имя и пароль – они понадобятся позже.

  2. В разделе Роли сервера выберите роль public.

  3. В разделе Сопоставление пользователей выберите роли db_datareader и public.

    Изображение

  4. Проверьте итоговый список прав в Защищаемых объектах – разрешения должны включать CONNECT SQL, VIEW ANY DATABASE, VIEW ANY DEFINITION.

    Изображение

  5. Подтвердите создание пользователя – нажмите ОК.

Далее перейдите на страницу настройки потока данных с шаблоном SCOM default и на вкладке Настройка заполните поля:

  1. host - Адрес СУБД

  2. login - Имя пользователя

  3. password - Пароль

  4. dbName - Название СУБД - OperationsManager

  5. port - Порт подключения к СУБД - 1433

Нажмите Сохранить.

Нажмите Запустить в правой верхней области страницы для включения потока данных.

Пример интеграции с Prometheus

Перейдите на страницу настройки потока данных с шаблоном Prometheus default и скопируйте API-ключ.

Далее произведите настройку файла alertmanager.yaml Prometheus:

  1. Добавьте 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-ключ, скопированный со страницы потока данных.

  2. В блоке route добавьте порядок группировки group_by и способ отправки через receiver 'web.hook', заполнить ключ group_by вручную:

    route: 
    group_by: ['<Метки группировки>']
    group_wait: 30s
    group_interval: 30s
    repeat_interval: 1h
    receiver: 'web.hook'
  3. Перезапустите 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:

  1. Включите enviroment_macros:

    enable_environment_macros=1
  2. Добавьте 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
    }
  3. Добавьте 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
    }
  4. Измените текущую contactgroup, добавив в нее созданный contact:

    define contactgroup{
    contactgroup_name admins
    alias Nagios Administrators
    members nagiosadmin,sm
    }
  5. Создайте скрипт:

    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
  6. Перезапустите Nagios Core для приминения конфига.

Пример интеграции с Fluentd

Пример настройки потока данных с внешним сервисом "Fluentd" через шаблон конфигурации Default template

Для отправки журналов (логов) в систему Monq необходимо обеспечить соблюдение следующих условий:

  • Лог содержит поле @timestamp в формате "2019-11-02T17:23:59.301361+03:00"
  • Fluentd отправляет лог в формате application/json
  • Отправка происходит через модуль out_http

Далее сконфигурируйте fluentd:

  1. Установите модуль fluentd.

    fluent-gem install fluent-plugin-out-http
  2. Добавьте запись 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>
  3. Добавьте отправку в 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.

  4. Примените настройки и проверьте логи микросервиса 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

Изображение

  1. На стороне Monq создайте два потока данных с шаблоном конфигурации Default template и скопируйте их API-ключи.

  2. Сконфигурируйте 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.

  3. После изменения конфигурационных файлов перезапустите 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.

  1. Создайте Поток данных с шаблоном конфигурации vCenter default.

  2. Перейдите на страницу Потока данных и на вкладке Настройка заполните поля:

    • apiUri - адрес по которому доступен WEB-интерфейс VMWare vCenter (указание протокола не требуется).

      ⚠️ apiUri должен содержать URL в формате vcenter.company.com без указания протокола и пути к SDK

    • login - пользователь системы vCenter, обладающий достаточными правами для получения событий об изменении топологии или отдельно взятых сущностей, в синхронизации состояния которых заинтересован пользователь.

    • password - пароль пользователя системы vCenter

    Информация

    В случая, если нет сетевой связанности между Monq и сервером vCenter (по портам 80/tcp и 443/tcp) - необходимо установить и подключить Агент Monq на промежуточном сервере

    1. Подключите Агент Monq - инструкция
    2. Перейдите на вкладку Конфигурация Потока данных vCenter.
    3. Для Заданий по сбору данных с "VMWare vCenter" назначьте метки Координатора, у которого подключенный Агент имеет сетевой доступ к серверу vCenter .
  3. Нажмите Сохранить для сохранения настроек Потока данных.

  4. Нажмите Запустить в правой верхней области страницы для включения Потока данных.

Справка

Поток данных 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 и владельцем сценария автоматизации.