Привет, Хабр!
С вами Кирилл Бибиков, технический архитектор СОФРОС. Буду делиться с вами полезной информацией по продукту компании СОФРОС - мониторинг сообщений OneView.
OneView является отличным расширением функциональных возможностей Центра Мониторинга и Администрирования DATAREON Platform, решает множество задач, связанных с настройкой, отладкой и отслеживанием настроенных интеграционных потоков.
После установки сборки OneView необходимо произвести настройку конфигурационного файла, в котором содержится много полезных и интересных настроек, позволяющих безболезненно производить сбор и отображение данных по сообщениям из DATAREON Platform.
Изначально конфигурационный файл поставляется в незаполненном формате по заданной структуре формата json. Внутри файла нужно указать настройки подключения к ActiveDirectory, кластерам DATAREON Platform (включая множество фильтров и настроек).
Перед изучением настроек файла, предлагаю ознакомиться с архитектурой OneView на уровне Docker контейнеров:

Сегодня мы рассмотрим с вами основные настройки контейнера 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": "************" }
Заключение
На этом описание настроек завершаем. На связи был Кирилл Бибиков, технический архитектор СОФРОС.
Надеюсь вам будет полезен данный материал, последующие изменения ожидайте в следующих публикациях.
