Перейти к основному содержимому
Версия: 7.10

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

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

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

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

Пример интеграцииВходящие соединения (порт/протокол)Исходящее соединение (порт/протокол)ПримечаниеИспользуемый шаблон
Zabbix80,443/tcpПодключение к API ZabbixZabbix default
Zabbix (webhooks)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
Splunk80,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 и в качестве операции выберите созданный метод оповещения.

Пример интеграции с 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 с последующим построением Ресурсно-сервисной модели, выполните следующие действия:

  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.

Подробнее об импорте сценариев в разделе Автоматизация.

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