Привет, Хабр!

С вами Кирилл Бибиков, технический архитектор СОФРОС. Буду делиться с вами полезной информацией по продукту компании СОФРОС - мониторинг сообщений OneView.

OneView является отличным расширением функциональных возможностей Центра Мониторинга и Администрирования DATAREON Platform, решает множество задач, связанных с настройкой, отладкой и отслеживанием настроенных интеграционных потоков.

После установки сборки OneView необходимо произвести настройку конфигурационного файла, в котором содержится много полезных и интересных настроек, позволяющих безболезненно производить сбор и отображение данных по сообщениям из DATAREON Platform.

Изначально конфигурационный файл поставляется в незаполненном формате по заданной структуре формата json. Внутри файла нужно указать настройки подключения к ActiveDirectory, кластерам DATAREON Platform (включая множество фильтров и настроек).

Перед изучением настроек файла, предлагаю ознакомиться с архитектурой OneView на уровне Docker контейнеров:

Описание контейнеров OneView + взаимодействие с кластерами DATAREON Platform (напрямую или опционально через HAProxy), LDAP
Описание контейнеров OneView + взаимодействие с кластерами DATAREON Platform (напрямую или опционально через HAProxy), LDAP

Сегодня мы рассмотрим с вами основные настройки контейнера WebApi-1, так как именно он ответственный за основную работу приложения.

Рассмотрим файл по частям. В начале файла нас встречает блок настроек строк подключения к базам данных:

ConnectionStrings

  "ConnectionStrings": {
    "SofrosClickHouseDB": "Compression=True;Timeout=300000;Host=clickhouse-1;Port=8123;Database=sofrosdb;Username=sofros;Password=P@ssw0rd;",
    "SofrosRedisDB": "redis:6379,user=sofros,password=P@ssw0rd,abortConnect=false",
    "SofrosPostgresDB": "Server=postgres;Port=5432;Database=sofrosdb;User Id=sofros;Password=P@ssw0rd;"
  }

Тут указаны подключения к базе данных ClickHouse, Redis и Postgres. Сами базы создавать не нужно, все необходимые контейнеры поставляются с решением. Строки подключения редактировать нет необходимости.


AppSettings

Далее идёт основной большой блок настроек AppSettings. Также рассмотрим по частям его настройки.

AppSettings.LdapConfig

В первую очередь нас встречают настройки подключения к ActiveDirectory. Напомню, это необходимо для возможности заходить в UI приложения и получать доступ к данным с помощью доменных учетных записей, без необходимости создавать и администрировать учетные записи внутри приложения. Ответственность за безопасность пароля полностью возлагается на плечи сетевых администраторов домена.

"LdapConfig": {
    "Server": "192.168.110.59",
    "ServerPort": 389,
    "Domain": "DTORGHIM",
    "DistinguishedName": "CN=MONITORING,OU=Sofros,DC=dtorghim,DC=local",
    "ResolveUserAccountControls": [ "512", "66048", "8389120", "66080" ]
}
  • Server - имя сервера AD или его IP (важно обеспечить сетевую доступность с Docker сервера!)

  • ServerPort - порт подключения

  • Domain - обязательно укажите домен

  • DistinguishedName - можно выделить отдельную группу пользователей приложения мониторинг OneView, тогда нужно указать CN={имя группы}. Если группу не указать - поиск пользователя выполняется без неё

  • ResolveUserAccountControls - вы вправе сами указать коды состояний учетных записей пользователей, которые имеют возможность получить доступ в приложение. Тут указаны основные коды рабочих состояний учетных записей, при необходимости - можно отредактировать.


AppSettings.DefaultUserConfig

Всегда можно указать сведения о дефолтном пользователе, который не связан с учетными записями AD и с внутренними пользователями OneView. Логин не имеет ограничений, пароль хранится в незашифрованном виде. Имя и email можно указать произвольные.

Скрытый текст

При отсутствии необходимости данный блок настроек можно удалить

"DefaultUserConfig": {
    "login": "user",
    "password": "user",
    "name": "Базовый пользователь",
    "email": "user@email.ru"
}

AppSettings (иные настройки, но очень важные)

  "LastEventProviderType": "Cache",
  "CacheType": "Redis",
  "WriteLogTrace": false,
  "WriteLogDebug": false,
  "SelectBodiesLeftContentCount": 250,
  "MaxBatchSizeBodiesToInsert": 50,
  "StoreDaysBodies": 10,
  • LastEventProviderType - отвечает за тип провайдера хранения данных о последних идентификаторах событий. По умолчанию установлен Cache, рекомендую использовать его. Данные кешируются в Redis. Ранее хранение было доступно в ClickHouse, для неё устанавливалось значение DataBase

  • CacheType - тип кеша приложения. Из доступных вариантов:

    Memory - локальный кеш в контейнере WebApi

    Redis - глобальный кеш в базе данных Redis, безопаснее, удобнее и масштабируемо. Рекомендуем использовать Redis

  • WriteLogTrace - запись трассировки. Ресурсоёмко, используется в случае выявления ошибок, в промышленной эксплуатации по умолчанию в значении false, значит не используется

  • WriteLogDebug - запись отладочных логов приложения. Аналогично трассировке.

  • SelectBodiesLeftContentCount - количество отображаемых символов предварительного просмотра содержимого тел сообщений. Настройка влияет на графический интерфейс. Чаще, от 250 до 500 символов для предварительного просмотра вполне достаточно.

  • MaxBatchSizeBodiesToInsert - размер пачки сохраняемых тел сообщений (именно тела сообщений из Хранилища Сообщений) в ClickHouse. Рекомендуем не трогать.

  • StoreDaysBodies - количество дней хранения тел сообщений по умолчанию, если не заданы уникальные настройки для конкретных типов данных. Условно - сообщение от текущей даты + 10 дней = вычисленная дата удаления тела сообщения из ClickHouse.


AppSettings.MetricsExporterConfig ключевые настройки

Пожалуй, самый важный блок настроек, ведь в нем содержится логика модуля извлечения данных из API Центра Мониторинга и Администрирования DATAREON Platform. Рассмотрим его внимательно и разложим всё по полочкам.

В самом начале нас встречают ключевые настройки извлечения, вне зависимости от кластеров:

  "InstanceName": "MetricsExporter-1",
  "MaxDegreeOfParallelism": -1,
  "ServiceDataInterval": 3600,
  "EventsInterval": 0,
  "BodiesInterval": 5,
  "DiagnosticInterval": 0,
  "JournalsInterval": 0,
  "AnalyticsServerInterval": 0,
  • InstanceName - имя текущего инстанса или контейнера. Очень крутая настройка, позволяет масштабировать приложение. Можно увеличить количество контейнеров webApi до количества серверов DATAREON Platform, чтобы каждый инстранс собирал данные только с одной ноды. Об этом чуть позже.

  • MaxDegreeOfParallelism - установка степени параллелизма. Глобальная настройка для максимальной производительности ядер сервера OneView. Можно установить значения:

    "-1" - использовать все ядра

    "0" - использовать последовательную обработку

    "{количество ядер}" - вы вправе сами установить количество ядер для параллельной обработки

    Настройки с Interval - это интервалы запуска фоновых сервисов, выполняющих сбор данных с API. Значение задаётся в секундах

  • ServiceDataInterval - сервис сбора служебных и сопутствующих данных (словари типов данных, систем и сервисов). Для снятия нагрузки производится сверка версии конфигурации DATAREON Platform, если версия изменилась - не исключена вероятность, что и сопутствующие данные были изменены.

  • EventsInterval - сервис сбора событий серверов, сервисов и систем

  • BodiesInterval - сервис сбора тел сообщений из Хранилища Сообщений

  • DiagnosticInterval - сервис сбора диагностический сведений (состояние модулей, размещения на серверах и длин очередей)

  • JournalsInterval - сервис сбора журналов серверов, сервисов и систем

  • AnalyticsServerInterval - сервис сбора данных с сервера аналитики


AppSettings.MetricsExporterConfig настройки кластеров

Далее будет много настроек, также рассмотрим по направлению сверху-вниз.

Нас встречает коллекция элементов Clusters. Это означает, что OneView позволяет собирать данные сразу с нескольких кластеров DATAREON Platform и отображать в едином графическом интерфейсе.

"Clusters": [
  {}
]

Внутри Clusters описываются настройки:

"IsActive": true,
"ClusterName": "srv_sf_alrosa",
"RetryCount": 3,
"ResolveNodes": [],
"ResolveModules": [],
  • IsActive - флаг, описывающий необходимость извлечения данных с конкретного кластера. В файле можно описать много кластеров, но извлекаться данные будут с тех, у кого isActive = true

  • ClusterName - произвольное имя кластера. Можно указать по имени конфигурации или задать своё, удобное, человекочитаемое.

  • RetryCount - количество попыток повтора. В коде есть места с логикой try-retry, данная настройка применима в таких местах.

  • ResolveNodes - идентификаторы (Guid'ы) серверов, которые доступны для текущего инстанса. Это к пункту логики масштабирования и распределения ответственности (какой инстанс с какого сервера забирает данные)

  • ResolveModules - идентификаторы (Guid'ы) модулей, которые доступны для текущего инстанса


AppSettings.MetricsExporterConfig.ConnectionConfig

Тут описываются настройки подключения к кластеру.

"ConnectionConfig": {
  "URLs": [
    "https://192.168.0.0:7201",
    "https://192.168.0.1:7201",
    "https://192.168.0.2:7201"
  ],
  "UseProxy": false,
  "Login": "Администратор",
  "Password": "Datare0n!",
  "CacheToken": {
    "Type": "Redis",
    "LiveTimeMinutes": 20
  }
}
  • URLs - указываем все адреса подключений к DATAREON Platform. Если у нас в конфигурации один сервер - указываем один. Если несколько - желательно перечислить все возможные сервера, которые могут становится координатором. Если используется единая точка подключения / точка входа на кластер (средствами VIP или промежуточного прокси) - укажите подключение к этой точке и не забудьте поставить флаг UseProxy=true.

    OneView выполняет подключение по списку. Первый доступный сервер вернёт информацию, какой сервер является координатором и дальнейший сбор сведений в рамках текущей запущенной задачи будет производится с координатора. При следующем запуске - операция повторяется.

  • Login и Password - логин и пароль для подключения к API. Задается в Управление Пользователями, можно создать отдельную сервисную УЗ для OneView с правами мониторинга. Если подключение к API без авторизации - оставить логин и пароль пустыми значениями

  • CacheToken - блок настроек кеширования токена. Рекомендуем оставить Type=Redis, а LiveTimeMinutes установите на несколько минут меньше, чем указано в конфигурации DATAREON Platform, на всякий случай.


AppSettings.MetricsExporterConfig.EventsClusterConfig

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

"EventsClusterConfig": {
  "IsActive": true,
  "ResolveEvents": [],
  "ResolveMessageTypes": [
    "DataMessage",
    "Dt-StorageCommit",
    "Dt-ExecuteAdapterHandlerResponse"
  ],
  "IgnoreEvents": [
    "Query",
    "Read",
    "Delete",
    "Enqueue",
    "Dequeue",
    "Get"
  ],
  "IgnoreMessageTypes": [],
  "Level": "Debug",
  "OrderAsc": true,
  "InitDepthDays": 5,
  "CountEvents": 5000,
  "UseHistoryEvents": true,
  "CountHistoryEvents": 5000
}
  • IsActive - флаг, разрешающий извлекать события с данного кластера.

  • ResolveEvents - разрешенные к извлечению типы событий. По умолчанию пусто.

  • ResolveMessageTypes - разрешенные типы сообщений. Обычно извлекаются сообщения с данными, сообщения фиксирующие отправку в Банк Данных и ExecuteAdapterHandlerResponse

  • IgnoreEvents - события, запрещенные к извлечению. Список заполнен по умолчанию, в основном это события, затрагивающие очереди, работу с Банком Данных и Хранилищем Сообщений.

  • IgnoreMessageTypes - запрещенные к извлечению типы сообщений

  • Level - уровень извлекаемых сообщений, по умолчанию Debug, его как правило, достаточно. Глубже только Verbose

  • OrderAsc - сортировка

  • InitDepthDays - инициализационная глубина извлекаемых данных в днях. На случай, когда у нас нет информации, какой последний id события был извлечен с конкретного модуля

  • CountEvents - максимальное количество извлекаемых событий за один веб запрос к API

  • UseHistoryEvents - использовать запросы к архивный журнал. Чаще всего не требуется, но пусть будет. Применимо при возникновении ошибки чтения данных с оперативного журнала

  • CountHistoryEvents - максимальное количество извлекаемых событий за один веб запрос к API архивного журнала


AppSettings.MetricsExporterConfig.BodiesClusterConfig

Тут заданы настройки извлечения тел

"BodiesClusterConfig": {
  "IsActive": true,
  "CountBodies": 50,
  "CountDownloadBodiesInParallel": 5,
  "CountMinutesToDateEnd": 1,
  "Delay": 10,
  "CacheMaxSize": 1000,
  "CacheSlidingHours": 24,
  "InitDepthDays": 1,
  "CheckMessageStorageState": true
}
  • IsActive - флаг, разрешающий извлекать тела сообщений с данного кластера.

  • CountBodies - максимальное количество извлекаемых тел за один запуск задачи

  • CountDownloadBodiesInParallel - количество параллельно скачиваемых тел (содержимое, контент)

  • CountMinutesToDateEnd - лимит в минутах, описывает насколько далеко вперед по времени нужно смотреть в Хранилище Сообщений за телами. При интенсивной нагрузке на Хранилище Сообщений рекомендуем установить лимит не больше 1 минуты.

  • Delay - количество секунд назад от последнего добавленного сообщения (захват хвоста). Можно установить 0.

  • CacheMaxSize - максимальный размер кеша (кешируются идентификаторы тел)

  • CacheSlidingHours - максимальный сдвиг кеша в часах. Оставить по умолчанию.

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

  • CheckMessageStorageState - проверка состояния Хранилища Сообщений перед началом выгрузки (берутся сведения из вкладки "Основные" из Центра Мониторинга и Администрирования)


AppSettings.MetricsExporterConfig.JournalClusterConfig

Тут заданы настройки извлечения журналов (логи). Изначально извлекаются только логи с типом Пользовательские данные. Это логи, написанные собственноручно в конфигурации, в шагах бизнес-процессов или шагах отправки. Извлекаться будут только те логи, которые заданы по примерам ниже.

Logger.Warning($"[#{InitMessage.StreamId}#] обращение к PostgreSQL с ошибкой (предупреждение)");
Logger.Error($"[#{InitMessage.StreamId}#] обращение к PostgreSQL с ошибкой"); 

Важно указать Id потока, он будет извлечен OneView и связывать данную запись журнала с потоком конкретного сообщения. Изначально в DATAREON Platform нет такой связки.

"JournalClusterConfig": {
  "IsActive": true,
  "ResolveFeatures": [
    "Custom",
    "Step"
  ],
  "Level": "Debug",
  "OrderAsc": true,
  "InitDepthDays": 5,
  "CountLogs": 1000,
  "AddonConfig": {
    "ModuleNames": [
        "proxy"
    ],
    "ResolveFeatures": [
        "All"
    ]
  }
}
  • IsActive - флаг, разрешающий извлекать журналы (логи) с данного кластера.

  • ResolveFeatures - разрешенные логи к извлечению (по умолчанию это логи "пользовательские данные", которые описываются в шагах и в коде в формате, например "Logger.Debug"

  • Level - глубина логов, Debug по умолчанию

  • OrderAsc - сортировка

  • InitDepthDays - инициализационная глубина извлекаемых данных в днях. На случай, когда у нас нет информации, какой последний id лога был извлечен с конкретного модуля

  • CountLogs - максимальное количество извлекаемых логов за один веб запрос к API

  • AddonConfig - блок настроек, на случай, когда нам нужны системные логи. В ModuleNames указываем маску ("вхождение") модулей или точные названия модулей, например кастомных коннекторов, а ResolveFeatures позволяет указать какие именно типы логов нас интересуют. По умолчанию этот блок отсутствует, тут указаны параметры для примера


AppSettings.MetricsExporterConfig.AnalyticsServerConfig

Тут задаются настройки извлечения данных с сервера аналитики. В настоящий момент пока недоступны


На этом обзор блока настроек AppSettings.MetricsExporterConfig завершен.

AppSettings.ReportEventTypesConfig

Далее интересный блок настроек, связанный с кастомными типами событий. Многим не хочется запоминать все типы событий, описываемые в DATAREON Platform, поэтому мы сделали агрегацию по классам "Успешно", "В обработке", "Ошибка". Настройки связаны с отображением в графическом интерфейсе. Пример ниже настроен по умолчанию, редактировать не обязательно.

"ReportEventTypesConfig": {
  "Success": [
    "Finish",
    "CompletePeekLock",
    "RouteInt",
    "Send",
    "IntSend",
    "IntReceive",
    "Receive",
    "Write",
    "TransformOutSkip"
  ],
  "InQueue": [],
  "Error": [
    "Error",
    "TransportError",
    "Delay",
    "Archive"
  ]
}

AppSettings.ReportViewConfig

Далее блок настроек отображения. Его основная цель - скрыть "задания по расписанию". Думаю будет отдельная статья по OneView на тему отображения данных. Тут блок настроек рекомендую оставить по умолчанию.

"ReportViewConfig": {
  "IgnoreTriggers": true,
  "MessageProcessCountMin": 1,
  "MessageProcessCountMax": 1
}

AppSettings.ArchiveConfig

Тут представлен блок настроек архивации данных. OneView умеет переносить в длительное хранение информацию по мониторингу производительности.

"ArchiveConfig": {
  "IsActive": true,
  "InitDepthDays": 7,
  "LimitDaysToArchiving": 7
}
  • IsActive - флаг, разрешающий архивацию

  • InitDepthDays - инициализационная глубина архивируемых данных в днях

  • LimitDaysToArchiving - максимальное количество дней к архивации за один запуск задачи архивирования данных. Архивация производится в час ночи по местному времени на сервере, настройке не подлежит


AppSettings.SMTPServerConfig

Настройки SMTP для почтовых уведомлений. Пока почтовые уведомления связаны только с изменением состояния учетных записей (внутренние пользователи OneView), на создание учетной записи и изменение пароля. Достаточно указать корпоративные настройки SMTP сервера.

  "SMTPServerConfig": {
    "From": "bbkov.kirill@sofros.ru",
    "Server": "smtp.sofros.ru",
    "Port": "587",
    "SSL": "true",
    "Login": "bbkov.kirill@sofros.ru",
    "Password": "************"
  }

Заключение

На этом описание настроек завершаем. На связи был Кирилл Бибиков, технический архитектор СОФРОС.

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