Руководство по системному администрированию#
Полное название компонента Единый коллектор телеметрии (COTE) в составе продукта Platform V Monitor, далее по тексту используется сокращение – Единый коллектор.
Это руководство содержит названия переменных, которые применимы для различных средств контейнеризации, указанных в документе «Руководство по установке».
Данное руководство предназначено для роли Администратор PVM.
Термины и определения#
Общие термины и определения, используемые в данном документе, представлены в общей документации продукта Platform V Monitor (OPM).
Термин/Аббревиатура |
Определение |
|---|---|
Client Module |
Сервис или приложение, телеметрические данные которого собираются с использованием Единого коллектора |
OpenZipkin |
Распределенная система отслеживания данных в реальном времени |
Pipeline сбора телеметрических данных |
Конвейер обработки информации. Представлен набором компонентов и связей между ними |
Pull-модель сбора |
Модель сбора данных, где инициатором выступает серверная сторона, а не клиентская. Также модель называют активной |
Push-модель сбора |
Модель сбора данных, где клиент отправляет запросы на сервер, а сервер публикует API для их обработки. Также модель называют пассивной |
АС |
Автоматизированная система |
Компонент pipeline |
Элемент обработки данных, который характеризуется входящим и исходящим типами данных и способом их обработки. Компоненты разделены на три вида: 1. input - это компоненты связанные с источниками данных; 2. processor - это компоненты, которые обрабатывают данные, например, обогащают, фильтруют, преобразуют 3. output - это компоненты, которые сохраняют данные в какое-либо хранилище |
Флэтирование |
Преобразование полученных данных в формате JSON в плоский JSON |
Сценарии администрирования#
Проверка работоспособности#
Администратору рекомендуется регулярно выполнять:
контроль состояния работы системы Единый коллектор;
мониторинг производительности системы Единый коллектор;
контроль свободного места на жестких дисках всех серверов системы, а также в файловой системе;
администрирование пользователей.
Сделать это можно с использованием самомониторинга сервиса – метрик и дашбордов (описаны ниже). Также контролировать работу сервиса можно с помощью лога (компонент Журналирование (LOGA) в составе продукта Platform V Monitor (OPM)), проверять его на наличие ошибок.
При регулярном контроле и проверке необходимо обращать внимание на следующее:
Для контроля состояния pod необходимо использовать healthcheck. См. описание в разделе «События мониторинга» данного документа. Необходимо следить, чтобы в ответ не приходило ошибок и у pod был статус «UP», то есть pod запущены;
Необходимо проверять логи. В логах не должно быть событий типа «ERROR». Появление такого события сообщает о проблеме. Подробнее о логах см. пункт «События системного журнала» данного документа;
Проверка метрик. Если метрики фиксируются в topic Apache Kafka, то система работает в штатном режиме. Также обращайте внимание на высокое потребление CPU/RAM, на изменения числа активных pipeline сбора телеметрически данных и на повышенное потребление квот.
Действия при возникновении нештатной ситуации#
При выявлении нештатных ситуаций необходимо:
Проверить логи сервисов на наличие ошибок:
При возникновении проблем с сетевой доступностью следует смотреть логи pod Egress и Ingress (уровня WARN и выше);
При возникновении прочих проблем необходимо смотреть логи pod telemetry-collector-management-app, telemetry-collector-pull, telemetry-collector-push (уровня WARN и выше).
При необходимости просмотра более подробных логов, можно изменить уровень логирования (в режиме runtime) в configmap cote-cm-logback-xml в корневом аппендере следующим образом:
<root level="DEBUG"> <appender-ref ref="STDOUT"/> <appender-ref ref="JSON"/> </root>Проверить доставку данных самомониторинга в хранилище Abyss:
а. Сбор логов от Client Module осуществляется Push Collector-ом:
Пользователь активирует pipeline сбора логов;
Client Module осуществляет вызов API единого коллектора согласно параметрам для подключения к HTTP-API PUSH;
Агенты осуществляют вызов API единого коллектора согласно параметрам для подключения к HTTP-API PUSH;
Шаблон адреса API
POST push/project/{projectName}/pipeline/{pipelineName}(для бинарных данныхpush/project/{projectName}/pipeline/{pipelineName}/prometheus-proto), где projectName – это имя проекта, в рамках которого выполняется прием логов, а pipelineName – это имя соответствующего pipeline единого коллектора;Если Push Collector доступен и искомый pipeline и проект найдены, то в коллекторе осуществляется обработка входящего обращения согласно Пассивной модели сбора телеметрических данных (PUSH) с использованием input-компонента «standard-http-api» для приема телеметрии в формате JSON. Учитываются требования к авторизации и аутентификации в рамках обращения;
Полученные логи/трейсы передаются в output-компонент «kafka-output» – вывод в Apache Kafka;
Осуществляется вывод и сохранение логов/трейсов в Abyss (работа с хранилищем Abyss описана в документе «Руководство оператора» комопнента Abyss (LGDB), входящего в состав продукта Platform V Monitor(OPM)).
b. Сбор трейсов/спанов от OpenZipkin осуществляется Push Collector-ом:
Пользователь активирует pipeline сбора трейсов/спанов;
OpenZipkin осуществляет вызов API единого коллектора согласно параметрам для подключения к HTTP-API PUSH;
Агенты осуществляют вызов API единого коллектора согласно параметрам для подключения к HTTP-API PUSH;
Шаблон адреса API
POST push/project/{projectName}/pipeline/{pipelineName}, где projectName – это имя проекта, в рамках которого выполняется прием логов, а pipelineName – это имя соответствующего pipeline единого коллектора;Если Push Collector доступен и искомый pipeline и проект найдены, то в едином коллекторе осуществляется обработка входящего обращения согласно Пассивной модели сбора телеметрических данных (PUSH) с использованием input-компонента «standard-http-api» для приема телеметрии в формате JSON. Учитываются требования к авторизации и аутентификации в рамках обращения;
Производится преобразование формата в плоский JSON (процессинговый блок флэтирования);
Полученные логи/трейсы передаются в output-компонент «kafka-output» - вывод в Apache Kafka;
Осуществляется вывод и сохранение трейсов в Abyss (работа с хранилищем Abyss описана в документе «Руководство оператора» комопнента Abyss (LGDB), входящего в состав продукта Platform V Monitor(OPM)).
Проверить дашборды бизнес и системных метрик (высокое потребление CPU, частые запуски GC, интервалы с отсутствием метрик любого типа);
Самомониторинг производится стандартными средствами Spring Boot. Через актуатор можно получить результат проб Liveness и Readyness.
Пример запросов:
GET /actuator/health/liveness
RESPONSE:
{
"status": "UP",
"components": {
"livenessstate": {
"status": "UP"
}
}
}
GET /actuator/health/readiness
RESPONSE:
{
"status": "OUT_OF_SERVICE",
"components": {
"readinessstate": {
"status": "OUT_OF_SERVICE"
}
}
}
События аудита#
Информацию о событиях аудита см. в разделе «Аудит» документа «Руководство по безопасности».
Обязанности администратора#
В рамках выполнения требований безопасной работы системы, Администратору рекомендуется просматривать события аудита, связанные с нарушениями авторизации и аутентификации.
Доступ к АС должны иметь только те сотрудники, которым он необходим в соответствии с их должностными обязанностями. Доступ должен ограничиваться минимально необходимым объемом данных. Должны разделяться среды разработки, тестирования и эксплуатации.
При этом производится разделение обязанностей между разработчиками АС, тестирующим персоналом и сотрудниками, непосредственно эксплуатирующими уже введенные в промышленную эксплуатацию компонент Единый коллектор (COTE), входящий в продукт Platform V Monitor (OPM).
Рекомендации по заданию стойких паролей#
Управление учетными записями выполняется с помощью OIDC-провайдера, например, компонент IAM Proxy (AUTH), входящий в состав Platform V IAM SE. За процесс администрирования учетных записей отвечает администратор OIDC-провайдера.
При реализации аутентификации пользователей на прикладном уровне должна иметься развитая система управления аутентификационной информацией пользователей (паролями, ключами) и механизмы контроля за ее качеством и использованием, обладающие следующими характеристиками:
длина пароля не менее восьми символов;
периодическая принудительная смена паролей не реже, чем раз в 40 дней;
возможность установки администратором признака принудительной смены пароля пользователя при следующем входе пользователя в систему;
возможность самостоятельного изменения пользователями своего пароля в любое время;
автоматическая установка новому пользователю пароля, задаваемого Администратором системы.
Администратор лично сообщает пользователю, установленный ему пароль. Указанный пароль должен состоять из двух частей:
первая – фиксированная системная часть, служащая признаком того, что это пароль нового пользователя;
вторая – задается произвольно Администратором.
При этом должна быть исключена возможность использования данного пароля в качестве личного пароля пользователя (решение принимается на основе сравнения первой части пароля, вводимого пользователем, с фиксированной частью).
предоставление доступа к информации при первом входе пользователя в АС только после смены им пароля, установленного Администратором, на его личный пароль;
задании параметров должна отсутствовать возможность задания нулевой длины пароля или бесконечного периода действия пароля;
хранение парольной «истории» пользователя, т.е. списка контрольных значений (сумм) нескольких предыдущих паролей пользователя (рекомендуется хранить пять паролей), и невозможность при смене пароля выбора устанавливаемого пароля из этого списка.
Рекомендации по созданию стойких паролей указаны в документации к используемой системе, например для IAM они следующие:
Минимальная длина 9 символов;
Наличие специальных символов (от 1);
Отсутствие повторяющихся паролей в рамках одной УЗ (минимум 3 последних);
Наличие цифр и отсутствие повторяющихся подряд;
Наличие латинских букв разных регистров;
Отсутствие простых буквенных выражений (qwerty и т.п.);
Ограничение времени жизни пароля.
При реализации аутентификации пользователей на прикладном уровне в системе должен быть организован унифицированный модуль, выполняющий функции парольной защиты и обладающий следующими характеристиками:
проводится анализ качества выбираемых пользователями паролей, либо система должна сама назначать пользователям пароли с хорошими характеристиками, либо используется биометрическая аутентификация;
при вводе пароля пользователем на запрос системы символы пароля на экране не отображаются (отображается только число введенных символов);
при смене пароля должен запрашиваться старый пароль;
пароли хранятся в системе и передаются по каналу связи от клиента серверу таким образом, чтобы исключить возможность восстановления пароля пользователя (кроме как методом полного перебора) по хранящейся в системе или перехваченной в канале связи информации.
перехваченная передаваемая по каналу связи аутентифицирующая информация не должна позволять осуществлять повторный вход в систему.
должен обеспечиваться контроль целостности таблицы, содержащей значения хэш-функции паролей пользователей системы, для защиты от атаки типа «перестановка значений хэш-функции».
Рекомендации по настройке механизмов безопасности#
Для работы с паролями и секретами Platform V DevOps Tools может использовать файл _passwords.conf, который хранится в зашифрованном виде в common-репозитории.
ssl.ose.keyStore.mq.password=PWD
ssl.kubernetes.keyStore.mq.password=PWD
ssl.istio.keyStore.ingress.password=PWD
ssl.istio.keyStore.egress.password=PWD
ssl.ose.istio.keyStore.ingress.password=PWD
ssl.ose.istio.keyStore.egress.password=PWD
ssl.kubernetes.istio.keyStore.ingress.password=PWD
ssl.kubernetes.istio.keyStore.egress.password=PWD
kafka.internal.sslKeystorePassword=PWD
kafka.internal.sslTruststorePassword=PWD
kafka.internal.pull.sslKeystorePassword=PWD
kafka.internal.pull.sslTruststorePassword=PWD
database.pvm_collector.password=PWD
database.shedlock.password=PWD
spring.liquibase.password=PWD
service.core.secure.auth.basic.pass=admin
ott.certstore.private.key.pwd=PWD
ott.certstore.pwd=PWD
ott.trust.store.pwd=PWD
collector.http.client.ssl-store.trustStorePassword=PWD
collector.http.client.ssl-store.keyStorePassword=PWD
collector.http.client.ssl-store.keyStoreKeyPass=PWD
authentication.enabled.api-key.validation.auth.basic.pass=PWD
Таблица со списком секретов:
Название |
Значение |
|---|---|
kafka.internal.sslKeystorePassword |
Пароль key-store для внутренней Kafka |
kafka.internal.sslTruststorePassword |
Пароль trust-store для внутренней Kafka |
kafka.internal.pull.sslKeystorePassword |
Пароль key-store для внутренней Kafka для pull-коллектинга |
kafka.internal.pull.sslTruststorePassword |
Пароль trust-store для внутренней Kafka для pull-коллектинга |
database.pvm_collector.password |
Пароль для подключения к БД хранения данных |
database.shedlock.password |
Пароль для подключения к БД для синхронизации |
spring.liquibase.password |
Пароль для проката DDL скриптов |
service.core.secure.auth.basic.pass |
Пароль для базовой аутентификации в компоненте IAM Proxy (AUTH) продукта Platform V IAM SE |
ott.certstore.pwd |
Пароль от key-store для продукта Platform V One-Time-Token |
ott.certstore.private.key.pwd |
Пароль для ключа key-store |
ott.trust.store.pwd |
Пароль от trust-store для продукта Platform V One-Time-Token |
collector.http.client.ssl-store.trustStorePassword |
Пароль от key-store для mTLS для pull-коллектинга |
collector.http.client.ssl-store.keyStoreKeyPass |
Пароль от key-store для mTLS для pull-коллектинга |
Сертификаты сервиса#
Для сервиса используются следующие сертификаты:
Сертификат внутренней Apache Kafka;
Сертификат OTT;
Сертификат Pull-коллектинга;
Сертификат ISTIO.
Все сертификаты кроме ISTIO необходимо положить в common-репозиторий, для того чтобы Platform V DevOps Tools (DOT) смог их найти и установить в инфраструктуру. ISTIO-сертификат настраивается отдельно, стандартно для Platform V DevOps Tools (DOT) способом. В случае, когда установка выполняется в ручном режиме – сертификат ISTIO конфигурируется администратором облачной инфраструктуры Kubernetes или OpenShift.
События системного журнала#
Ошибки и события, возникающие при работе сервисов Единого коллектора логируются в компоненте Журналирование (LOGA), входящего в состав продукта Platform V Monitor (OPM):
с уровнем ERROR, если произошла критическая ошибка (или exception), не позволяющая продолжить процесс;
с уровнем WARN, если произошла ошибка, которая позволяет продолжить процесс;
с уровнем INFO, если произошло важное событие.
Сообщение |
Уровень логирования |
Комментарий |
|---|---|---|
"Error during sending audit event $auditEvent" |
ERROR |
Ошибка записи события в Platform V Audit SE |
"Unprocessable entity error occurred, id: $identifier" |
ERROR |
Ошибка валидации запроса клиента |
"Failed to find the requested element, id: $identifier" |
ERROR |
Запрошенный ресурс не найден |
"Handle exception internal, id: $identifier" |
ERROR |
Ошибки сервера |
"Unknown error occurred, id: $identifier" |
ERROR |
Ошибки сервера |
"Error while validating pipeline '%s': no input" |
ERROR |
Ошибка валидации pipeline |
"Error while validating pipeline '%s': no outputs" |
ERROR |
Ошибка валидации pipeline |
"Error while validating pipeline '%s': processor '%s' has invalid nextProcessorId - it should be equal to other processor id or NULL" |
ERROR |
Ошибка валидации pipeline |
"Error while validating pipeline '%s': processors %s have the same nextProcessorId '%s'" |
ERROR |
Ошибка валидации pipeline |
"Couldn't start test of pipeline %s, because status of pipeline is %s." |
ERROR |
Ошибка запуска pipeline |
"Error while validating quota of project '%s' (pipeline ids <%s>):" + " setting quota limit would exceed project quota limit %s by %s" |
ERROR |
Ошибка валидации квоты проекта |
"Error while validating quota of pipeline '%s': pipeline quota limit should be more than 0" |
ERROR |
Ошибка валидации квоты pipeline |
"Error while validating pipeline '%s': component '%s' with input type '%s' can't be put after component '%s' with output type '%s'" |
ERROR |
Ошибка валидации pipeline |
"Component {%s} not exist in pipeline {%s}" |
ERROR |
Ошибка валидации pipeline |
"Config <{}> parse exception" |
ERROR |
Ошибка парсинга конфигурации, невалидная конфигурация |
"Error <{}> when running test <{}>:" |
ERROR |
Ошибки при запуске теста pipeline |
"Error on save statistic" |
ERROR |
Ошибка при сохранении статистики использования pipeline |
"Not found project with name {}" |
ERROR |
Не найден проект сервиса проектов по имени |
"Pipeline {} was skipped by error on scheduling." |
ERROR |
Не удалось запустить pipeline |
"Authentication failed" |
ERROR |
Ошибка аутентификации |
"Failed to load public key from {}" |
ERROR |
Ну удалось выполнить запрос к сервису аутентификации |
"Pipeline <{}> exceeds quota <{}> - limit is <{}>b per min, usage is <{}>b per min." |
WARN |
Сообщение о превышении квоты pipeline |
"Pipeline {} throttling level {} propagated to {}." |
WARN |
Сообщение об уровне троттлинга pipeline |
"Pipeline {} warn count limit {} or percents value limit {} exceed, set throttled. Limit {}bytes/min, sum {}bytes/min." |
WARN |
Pipeline переведен в режим троттлинга, слишком большие превышения или истекло время на реакцию |
"Message skipped by cron next execution time {}, now {}" |
WARN |
Предыдущее сообщение не успело обработаться за интервал между запусками и будет пропущено |
"Pipeline {} was deactivated by error limit {}, err count {}" |
WARN |
Сообщение об остановке pipeline |
"Audit event: $auditEvent, $baseResponse " |
INFO |
Событие записано в Platform V Audit SE |
"Audit metamodel was registered: {}, metamodelVersion: {}" |
INFO |
Метамодель зарегистрирована в Platform V Audit SE |
"Pipeline <$pipelineId> event was sent to <$topic> topic." |
INFO |
Событие pipeline отправлено в topic |
"Pipeline test <$pipelineTestEntity.getPipelineTestId()> run event was sent to <$topic> topic." |
INFO |
Событие «запуск теста pipeline» отправлено в topic |
"Pipeline {} throttling set false, quota changed {} -> {}" |
INFO |
Сброс троттлинга для pipeline |
"Component $model configured" |
INFO |
Коллектор получил конфигурацию компонента |
"Quota exceeded for pipelines: {}", pipelineIds |
INFO |
Квота pipeline превышена |
"Pipeline <{}> set rate limit {}b per sec.", quotaExceed.getPipelineId(), ratePerSecond |
INFO |
Троттлинг pipeline |
События мониторинга#
Микросервисы предоставляют метрики в формате Prometheus. Метрики собираются с помощью Prometheus-агента (компонент Объединенный мониторинг Unimon (MONA), входящий в состав продукта Platform V Monitor) и доставляются с помощью средств Platform V Monitor (OPM).
Системные метрики#
N |
Метрика |
Название метрики |
Тип метрики |
Дашборд |
|---|---|---|---|---|
1 |
system_cpu_count |
Количество запущенных pod |
Сounter |
Running PODs |
2 |
system_cpu_usage |
Процент использования ЦПУ системой |
Gauge |
System CPU usage |
3 |
process_cpu_usage |
Процент использования ЦПУ процессом |
Gauge |
Process CPU usage |
4 |
jvm_threads_live_threads |
Количество потоков |
Сounter |
Threads |
5 |
jvm_threads_daemon_threads |
Количество потоков |
Сounter |
Threads |
6 |
jvm_threads_states_threads |
Количество потоков |
Сounter |
Threads |
7 |
jvm_memory_used_bytes |
JVM memory used |
Сounter |
Memory used |
8 |
jvm_buffer_memory_used_bytes |
JVM buffer memory used |
Сounter |
Buffer memory used |
9 |
jvm_memory_committed_bytes |
JVM memory committed |
Сounter |
Memory committed |
10 |
application_started_time_seconds |
Время запуска приложения |
Timer |
Startup time |
11 |
http_server_requests_seconds_count |
Количество запросов |
Сounter |
Requests count |
12 |
http_server_requests_seconds_sum |
Время выполнения запросов |
Timer |
Requests time |
13 |
hikaricp_connections |
HikariCP Total Connections |
Сounter |
HikariCP Total Connections |
14 |
hikaricp_connections_idle |
HikariCP Idle Connections |
Сounter |
HikariCP Idle Connections |
15 |
hikaricp_connections_active |
HikariCP Active Connections |
Сounter |
HikariCP Active Connections |
16 |
hikaricp_connections_pending |
HikariCP Threads Pending Connections |
Сounter |
HikariCP Threads Pending Connections |
Бизнес метрики#
N |
Метрика |
Название метрики |
Тип метрики |
Описание метрики |
Дашборд |
|---|---|---|---|---|---|
1 |
pipeline_active_count |
Количество активных pipeline |
Gauge |
Количество pipeline, которые запускались в течение предыдущей минуты. |
Количество активных pipeline |
2 |
pipeline_error_count |
Количество ошибок при работе pipeline |
Counter |
Количество ошибок при работе pipeline |
Количество ошибок при работе pipeline |
3 |
pipeline_execute_count |
Количество запусков пайплайна |
Counter |
Количество запусков pipeline |
Количество запусков pipeline |
4 |
pipeline_execute_milliseconds_total |
Время работы pipeline |
Timer |
Время работы pipeline (от момента запуска pipeline до момента отправки результата) |
Время работы pipeline |
5 |
pipeline_message_count |
Количество сообщений, обработанных пайплайном |
Counter |
Количество сообщений обработанных pipeline |
Количество обработанных сообщений pipeline |
6 |
pipeline_message_execute_milliseconds_avg |
Среднее время обработки сообщения pipeline |
Timer |
Общее время обработки сообщений pipeline, разделенное на количество обработанных сообщений. |
Среднее время обработки сообщения pipeline |
7 |
component_error_count |
Количество ошибок при работе компонента |
Counter |
Количество ошибок при работе компонента |
Количество ошибок при работе компонента |
8 |
component_execute_count |
Количество запусков компонента |
Counter |
Количество запусков компонента pipeline |
Количество запусков компонента |
9 |
component_execute_milliseconds_total |
Время работы компонента |
Timer |
Время работы компонента (продолжительность обработки запроса. Продолжительность фиксируется с момента получения запроса на обработку до момента передачи управления следующему компоненту) |
Время работы компонента |
10 |
pipeline_event_latency_milliseconds_total |
Время задержки от записи события до его прочтения |
Timer |
Время нахождения сообщения на запуск Pull Сollector в Kafka (время задержки от записи события до его прочтения) |
Задержка прочтения данных из topic (pull-collector) |
11 |
pipeline_quoted_bytes |
Фактическое использование квоты pipeline |
Gauge |
Метрика показывает фактическое использование квоты pipeline (объем данных в byte) |
Использование квоты pipeline |
12 |
pipeline_exceeded_quota_bytes |
Превышение квоты pipeline |
Gauge |
Метрика показывает размер сообщений pipeline, превышающих квоту (фиксируются значения, превысившие квоту) |
Превышение квоты pipeline |
13 |
pipeline_exceeded_quota_count |
Количество превышений квоты pipeline |
Counter |
Метрика показывает количество превышений квоты pipeline (сколько раз квота была превышена) |
Количество превышений квоты pipeline |
14 |
pipeline_inactive_milliseconds_total |
Продолжительность бездействия с момента последнего запроса pipeline |
Gauge |
Продолжительность времени с последнего запуска pipeline (период времени между выполнением двух запусков pipeline) |
Время с последнего запуска pipeline |
15 |
available |
Доступность |
Gauge |
Готовность к обслуживанию запросов |
Готовность к обслуживанию запросов |
16 |
db_available |
Доступность базы данных |
Gauge |
Метрика однозначно показывающая доступность базы данных |
Метрика однозначно показывающая доступность базы данных |
Часто встречающие проблемы и пути их устранения#
См. подробнее раздел «Часто встречающиеся проблемы и пути их устранения» в документе «Руководство по установке».