Руководство по системному администрированию#

Полное название компонента Единый коллектор телеметрии (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 сбора телеметрически данных и на повышенное потребление квот.

Действия при возникновении нештатной ситуации#

При выявлении нештатных ситуаций необходимо:

  1. Проверить логи сервисов на наличие ошибок:

    • При возникновении проблем с сетевой доступностью следует смотреть логи 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>
    
  2. Проверить доставку данных самомониторинга в хранилище 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)).

  1. Проверить дашборды бизнес и системных метрик (высокое потребление 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 дней;

  • возможность установки администратором признака принудительной смены пароля пользователя при следующем входе пользователя в систему;

  • возможность самостоятельного изменения пользователями своего пароля в любое время;

  • автоматическая установка новому пользователю пароля, задаваемого Администратором системы.

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

  1. первая – фиксированная системная часть, служащая признаком того, что это пароль нового пользователя;

  2. вторая – задается произвольно Администратором.

При этом должна быть исключена возможность использования данного пароля в качестве личного пароля пользователя (решение принимается на основе сравнения первой части пароля, вводимого пользователем, с фиксированной частью).

  • предоставление доступа к информации при первом входе пользователя в АС только после смены им пароля, установленного Администратором, на его личный пароль;

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

  • хранение парольной «истории» пользователя, т.е. списка контрольных значений (сумм) нескольких предыдущих паролей пользователя (рекомендуется хранить пять паролей), и невозможность при смене пароля выбора устанавливаемого пароля из этого списка.

Рекомендации по созданию стойких паролей указаны в документации к используемой системе, например для IAM они следующие:

  1. Минимальная длина 9 символов;

  2. Наличие специальных символов (от 1);

  3. Отсутствие повторяющихся паролей в рамках одной УЗ (минимум 3 последних);

  4. Наличие цифр и отсутствие повторяющихся подряд;

  5. Наличие латинских букв разных регистров;

  6. Отсутствие простых буквенных выражений (qwerty и т.п.);

  7. Ограничение времени жизни пароля.

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

  • проводится анализ качества выбираемых пользователями паролей, либо система должна сама назначать пользователям пароли с хорошими характеристиками, либо используется биометрическая аутентификация;

  • при вводе пароля пользователем на запрос системы символы пароля на экране не отображаются (отображается только число введенных символов);

  • при смене пароля должен запрашиваться старый пароль;

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

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

  • должен обеспечиваться контроль целостности таблицы, содержащей значения хэш-функции паролей пользователей системы, для защиты от атаки типа «перестановка значений хэш-функции».

Рекомендации по настройке механизмов безопасности#

Для работы с паролями и секретами 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

Метрика однозначно показывающая доступность базы данных

Метрика однозначно показывающая доступность базы данных

Часто встречающие проблемы и пути их устранения#

См. подробнее раздел «Часто встречающиеся проблемы и пути их устранения» в документе «Руководство по установке».