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

Подключение источников данных в 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:

  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 и в качестве операции выберите созданный метод оповещения.

# Пример интеграции с 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 (см. подробнее о других способах приема данных (opens new window)).

Схема отправки данных в 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. При необходимости, вы можете реализовать новый парсер и разместить его в конфигурации (см. подробнее (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 с последующим построением Ресурсно-сервисной модели, выполните следующие действия:

  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

# Автопостроение РСМ

Для настройки автоматического создания ресурсно-сервисной модели в 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 и владельцем сценария автоматизации.