Установка#
Выбор способа установки#
Установка дистрибутива производится с использованием одного из вариантов:
Ручная установка без использования скриптов развертывания;
Ручная установка с использованием инструмента установки Platform V Monitor, расположенного в дистрибутиве по пути package/bh/installer/deploy-pvm.zip (инструкция по его использованию находится внутри архива);
Автоматическая установка (опционально) компонентом Deploy tools в составе Platform V DevOps Tools.
Установка отдельного Push Collector
Установка отдельного Pull Collector
Установка на стенды k8s#
Ниже в разделе - Конфигурирование указаны стендозависимые параметры для заполнения, которые применимы для различных сред контейнеризации, в том числе и k8s. Автоматическая установка Единого коллектора телеметрии в среде k8s возможна с помощью компонента Deploy tools. Для применения специфичных конфигураций k8s необходимо выполнить донастройку multiCluster.json в common-репозитории. А именно, добавить секцию overrides с пустым значением и проверить корректность значения указанной ControlPlane. Пример:
{
"datacenters": {
"stands-vdc01-(st-xxxx-01-k8s)": {
"openshiftCluster": "https://api.k8s.xxxxx.wwwww.zzz:6443",
"openshiftSATokenCred": "xxxx-st-sa-k8s",
"openshiftProjectName": "tribe-om-st-xxxxx-01",
"openshiftAppsDomain": "apps.k8s.xxxxx.wwwww.zzz",
"openshiftControlPlane": "gt-xxx-eee-controlplane-01",
"openshiftWebConsole": "https://console.apps.k8s.xxxxx.wwwww.zzz/k8s/cluster/projects",
"openshiftRoutersFQDN": [
"0.0.0.0"
],
"overrides": [
""
]
}
}
}
Также необходимо проверить заполнение параметров в конфигурационном файле telemetry-collector.all.conf
Параметры отвечают за SecurityContext для pod в Kubernetes
* fs-group (spec.securityContext.fsGroup) - Group ID владельца файлов в Volume. Определяет группу, в которой Kubernetes будет изменять разрешения для всех файлов в томах, когда тома монтируются в Pod
telemetry-collector.k8s.deployment.spec.template.spec.securityContext.fsGroup=
* uid (spec.securityContext.runAsUser) - ID пользователя в контейнере.
telemetry-collector.k8s.deployment.spec.template.spec.securityContext.runAsUser=
Подготовка окружения#
Настройка Apache Kafka#
Статическая конфигурация#
Для корректной работы Единого коллектора необходимы настройки Apache Kafka. Выполнить их можно автоматически или вручную.
Автоматизированная настройка представляет собой автоматическое создание приведенных ниже топиков Apache Kafka и добавление прав. Чтобы воспользоваться автоматизированной настройкой, нужно сконфигурировать и выбрать playbook при установке Единого коллектора компонентом Deploy tools. Подробно конфигурирование описано в документе Руководство по установке -> Подготовка окружения -> Настройка точки расширения, который поставляется в рамках документации на компонент Alert Manager (ALRT).
Для настройки Apache Kafka вручную, когда отсутствует возможность выдачи прав на CLUSTER необходимо отключить создание ACL (acl_mode=false) при создании топиков и вручную назначить права для клиентского сертификата, который будет использоваться приложением:
Resource type |
Resource name |
Principal |
Host |
Operation |
Permission type |
Pattern type |
|---|---|---|---|---|---|---|
CLUSTER |
kafka-cluster |
DN сертификата |
* |
IDEMPOTENT_WRITE |
ALLOW |
LITERAL |
transactional-id |
TC_TX |
DN сертификата |
* |
WRITE |
ALLOW |
PREFIXED |
transactional-id |
TC_TX |
DN сертификата |
* |
DESCRIBE |
ALLOW |
PREFIXED |
TOPIC |
{prefix} |
DN сертификата |
* |
DESCRIBE |
ALLOW |
PREFIXED |
TOPIC |
{prefix} |
DN сертификата |
* |
DESCRIBE_CONFIGS |
ALLOW |
PREFIXED |
TOPIC |
{prefix} |
DN сертификата |
* |
READ |
ALLOW |
PREFIXED |
TOPIC |
{prefix} |
DN сертификата |
* |
WRITE |
ALLOW |
PREFIXED |
GROUP |
* |
DN сертификата |
* |
READ |
ALLOW |
LITERAL |
Параметр для указания {prefix} указан ниже.
Примеры команд для добавления прав:
sudo ./kafka-acls --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=zookeeper:2181 \ --add --allow-principal User:* --operation WRITE --operation DESCRIBE --transactional-id TC_TX \ --resource-pattern-type prefixed
sudo ./kafka-acls --authorizer kafka.security.auth.SimpleAclAuthorizer --add --allow-principal User:* --operation IdempotentWrite --cluster
В процессе работы Единый коллектор будет взаимодействовать со следующими топиками Kafka:
Все перечисленные топики обязательны, кроме {prefix}.runtime-secret-refresh, он необходим только при интеграции с Secman. Подробная информация о создании и настройке представлена в Руководстве оператора сервиса Abyss (LGDB).
{prefix} - префикс, задается:
для топиков {prefix}.metamodel* - параметром collector_push.ose.configmap.collector_push.audit_metamodel_cache.kafka.topic_prefix в конфигурационном файле telemetry-collector.collector-push.conf, имеет значение по умолчанию «metamodels».
для всех остальных топиков параметром telemetry_collector.ose.common.kafka_internal_topic_prefix в конфигурационном файле telemetry-collector.all.conf, имеет значение по умолчанию «telemetry-collector».
№ |
Название топика |
Описание |
Рекомендуемое количество партиций |
Рекомендуемое значение retention.policy |
|---|---|---|---|---|
1 |
{prefix}.quota-limit-count-per-minute-exceed-queue |
Топик для сообщений о превышениях квоты |
3-5 |
1 час |
2 |
{prefix}.quota-usage-topic |
Топик для сообщений об использовании квоты |
3-5 |
1 час |
3 |
{prefix}.pull-pipeline-events-queue |
Топик для сообщений об изменении pull-pipelines |
3-5 |
1 час |
4 |
{prefix}.push-pipeline-events-queue |
Топик для сообщений об изменении push-pipelines |
3-5 |
1 час |
5 |
{prefix}.pull-pipeline-test |
Топик для сообщений о тестировании pull-pipelines |
3-5 |
1 час |
6 |
{prefix}.push-pipeline-test |
Топик для сообщений о тестировании push-pipelines |
3-5 |
1 час |
7 |
{prefix}.lock-events-queue |
Топик для сообщений о наступлении действия блокировки |
3-5 |
1 час |
8 |
{prefix}.runtime-secret-refresh |
Топик для сообщений об изменении секретов (необходим только при интеграции с Secman) |
3-5 |
1 час |
9 |
{prefix}.collector-active-pods |
Топик для сообщений об активных экземплярах pull-collector и push-collector |
3-5 |
1 час |
10 |
{prefix}.data-source-events-queue |
Топик для сообщений об обновлении datasources |
3-5 |
1 час |
11 |
{prefix}.audit-client-ping-topic |
Топик для сообщений о доступности Kafka для аудита |
3-5 |
1 час |
12 |
{prefix}.metamodel-cache |
Топик для хранения кеша метамоделей |
3-5 |
- |
13 |
{prefix}.metamodel-statistic |
Топик для передачи статистики использования метамоделей |
3-5 |
1 час |
14 |
{prefix}.metamodel-not-found |
Топик для отправки события «Метамодель не найдена» |
3-5 |
1 час |
Для топиков необходимо обязательно выставить ACLs для чтения и записи.
*Для топика {prefix}.metamodel-cache необходимо настроить уникальность по ключу метамоделей (модуль, версия).
Настройка: cleanup.policy=[delete,compact]
Пример команды:
bin/kafka-configs –zookeeper zookeeper:2181 –entity-type topics –entity-name metamodels.metamodel-cache –alter –add-config „cleanup.policy=[compact,delete]“
Также настраивается максимальный размер топика {prefix}.metamodel-cache из расчета 2000 метамоделей размером 2Мб.
Настройка: retention.bytes=4000000000
Пример команды:
bin/kafka-configs –zookeeper zookeeper:2181 –entity-type topics –entity-name test-topic –alter –add-config „retention.bytes=4000000000“
При использовании варианта отправки событий аудита напрямую в Kafka проверить наличие топиков (если отсутствуют обратиться к сопровождению аудита):
audit-metamodels-proxy-v6 // для отправки метамоделей
audit-events-proxy-v6 // для отправки событий аудита
При необходимости создать топики для системных задач сбора данных:
self-logs-pipe
self-osiris-system-pipe
self-tracing-pipe
self-monitoring-pipe
Подробнее про создание системных задач в пункте - Системные задачи сбора данных Единого коллектора телеметрии.
Динамическая конфигурация#
Динамические топики, на текущий момент необязательны. Нужны они только, если какой-либо проект будет использовать pull-processing, с распределением через Kafka (способ запуска проверок - CRON_ASYNC_KAFKA). Для их работоспособности нужно будет вручную создать топик с именем вида: «{prefix}.pull-processing-queries_» + project_name, где project_name - это имя соответствующего проекта.
Также есть возможность при установке Единого коллектора указать идентификатор группы Kafka consumer для каждого проекта. Для этого в конфигурационном файле telemetry-collector.collector-pull.conf необходимо задать collector_pull.ose.configmap.kafka_consumer_groups, в котором ключами являются имена проектов, а значениями - идентификаторы групп Kafka consumer. Например,
'{"test-project": "test-project_pull_processing_group", "projectWithConsumerGroupId": "projectWithConsumerGroupId_pull_processing_group"}'.
Если идентификатор группы Kafka consumer для проекта не будет задан, то для задачи сбора данных будет сгенерирован новый идентификатор вида «pull_processing_group» + pipeline_id, где pipeline_id - идентификатор задачи сбора данных.
Количество партиций должно быть минимум равно количеству instance pull-коллектора текущей инсталляции.
Retention-policy может быть небольшим, например, 1 час.
Подключение к внутренней Apache Kafka#
Сервис предусматривает возможность использования различных инсталляций Apache Kafka:
для внутренних нужд;
для распределения нагрузки Pull Collector рекомендуется использовать одну инсталляцию, для этого нужно для различных параметров задать одинаковые параметры (см. таблицу ниже).
resources/telemetry-collector.all.conf
Общее назначение |
Параметр |
Описание |
Пример заполнения |
|---|---|---|---|
Настройки Apache Kafka для внутреннего использования |
kafka.internal.bootstrap-servers |
Список хостов/портов, которые будут использоваться для установления первоначального подключения к кластеру Kafka |
host1:port1,host2:port2,… |
kafka.internal.pull.bootstrap-servers |
Список хостов/портов для распределения нагрузки Pull Collector |
host1:port1,host2:port2,… |
Настройка второго плеча (при использовании геобалансировщика и Secman PKI)#
Сертификаты, выдаваемые PKI Secman для второго плеча имеют CN отличный от первого плеча. Для того чтобы модули Единого коллектора успешно работали на втором плече необходимо:
завести ACL на kafka с указанием нового DN
прописать новый DN в настройках cloudera в параметре «Kafka Broker Advanced Configuration Snippet (Safety Valve) for ssl.properties»
перезапустить kafka
Без вышеуказанных действий модули Единого коллектора на втором плече будут уходить в рестарт с ошибкой: Caused by: org.apache.kafka.common.errors.TransactionalIdAuthorizationException: Transactional Id authorization failed.
Конфигурирование#
Ниже представлено описание стендозависимых параметров, содержащихся в конфигурационных файлах:
resources/telemetry-collector.all.conf
Общее назначение |
Параметр |
Описание |
Пример заполнения |
|---|---|---|---|
Настройки подключения к БД |
postgres.host |
Хост + порт (или список хостов) для подключения к БД |
xx-postgres-01.opsmon.xxx:port1, xx-postgres-01.opsmon.xxx:port2 |
database.pvm_collector.hikari.pool_name |
Имя пула БД |
pvm_collector |
|
database.pvm_collector.hikari.maximum-pool-size |
Количество одновременно возможных подключений к БД |
20 |
|
database.pvm_collector.name |
Наименование БД, если необходимо задать дополнительные параметры для БД, в значении нужно указать символ ? и после него дополнительные параметры |
dbname?targetServerType=master&prepareThreshold=0 |
|
database.pvm_collector.schema |
Схема БД. При подключении к postgreSQL через pgbouncer будет использоваться только дефолтная схема БД (независимо от того, какая указана в значении параметра) |
telemetry_collector |
|
database.shedlock.hikari.pool_name |
Имя пула БД блокировок |
pvm_collector |
|
database.shedlock.hikari.maximum-pool-size |
Количество одновременно возможных подключений к БД shedlock |
10 |
|
database.shedlock.name |
Наименование базы данных блокировок (shedlock). Если необходимо задать дополнительные параметры для БД, в нужно значении указать символ ? и после него дополнительные параметры |
dbname?targetServerType=master&prepareThreshold=0 |
|
database.shedlock.schema |
Схема БД для подключения к базе данных блокировок. При подключении к postgreSQL через pgbouncer будет использоваться только дефолтная схема БД (независимо от того, какая указана в значении параметра) |
telemetry_collector |
|
Многопоточность при маршрутизации |
config.env.pipeline.execution.synchronization |
Параметр для указания того, нужно ли использовать многопоточность при маршрутизации (sync, async) |
async |
Настройки аутентификации и авторизации |
service.core.secure.url |
URL API сервиса авторизации, входящего в состав компонента Abyss (LGDB) |
http://{HOST}/pvm_auth/v1 |
service.core.project.url |
URL API сервиса проектов |
http://{HOST}/coordinator/api/gateway/v1 |
|
auth.jwksUrl |
Endpoint IAM Proxy, по которому можно получить JWKS-ключ для сверки с тем, что указан в токене |
http://{HOST}/auth/realms/PlatformAuth/protocol/openid-connect/certs |
|
service.core.secure.auth.field |
Наименование поля в токене, указывающее на идентификатор пользователя, используемый в сервисе авторизации, входящего в состав компонента Abyss (LGDB) |
sub |
|
authentication.api-key.enabled |
Включение аутентификации с использованием API-ключей |
true |
|
authentication.api-key.stub-value |
Включение заглушки для аутентификации с использованием API-ключей |
||
authentication.api-key.cache.ttl.seconds |
Длительность кеширования запросов получения пользователя по API-ключу в секундах (по умолчанию 300 с) |
60 |
|
authentication.api-key.cache.max.records |
Максимальный размер кеш для API-ключей (по умолчанию 100) |
100 |
|
client.cache.ttl.seconds |
Длительность кеширования запросов (pipeline, проектов, прав) в секундах. (по умолчанию 120 с) |
120 |
|
client.cache.max.records |
Максимальный размер кеш запросов (pipeline, проектов, прав). (по умолчанию 1000) |
1000 |
|
Параметры Docker Image |
registry |
Адрес registry |
ddo.xx.xxx.space |
registry_path_cote |
Путь до образа Единого коллектора телеметрии (должен начинаться с»/») |
/sss/ci0000000_tlmcltr |
|
registry.fluent-bit.repo |
Путь до образа FluentBit Sidecar |
/sss_dev/ci0000000_xxxxxxxx_dev |
|
image.pull.secrets.name |
Имя секрета для скачивания образа из registry |
opsmon-image-pull |
|
Роутинг |
stand.name |
Имя стенда |
st |
Конфигурация аудита |
audit.transport |
Выбор способа передачи данных аудита: http - в инсталляцию аудита на базе Platform V Monitor, kafka- напрямую в топик Kafka |
http |
audit.useLog |
Признак записи событий аудита в лог |
false |
|
audit.nodeId |
Идентификатор узла |
telemetry-collector |
|
audit.url |
URL аудита (заполняется при audit.transport=http) |
http://{HOST} |
|
audit.kafka.main_server |
Основной host и port для kafka аудита (заполняется при audit.transport=kafka) |
http://{HOST}:0000 |
|
audit.kafka.fallback_server |
Резервный host и port для kafka аудита (заполняется при audit.transport=kafka) |
http://{HOST}:0000 |
|
Дополнительная конфигурация сервиса |
pipeline-management.processors.sort-by-pipeline-order |
Определяет необходимость сортировки процессоров в API методах поставляющих список процессоров в составе pipelines |
true |
telemetry.collector.datasource.pool.enabled |
Признак использования пула hikari. Рекомендуется включить пулы соединений на основе результатов НТ. |
true |
|
spring.zipkin.enabled |
Признак активности трассировки распределенной системой отслеживания данных в формате Zipkin |
true |
|
spring.zipkin.base-url |
Базовый URL для отправки трассировок Zipkin в Единый коллектор телеметрии |
http://{host}:{port}/push/project/{projectName}/pipeline/{pipelineName} , где {projectName} - имя проекта, используемого для сбора данных, {pipelineName} - имя pipeline |
|
management_app.host |
Хост Management Application |
xxx-telemetry-collector-management-app |
|
management_app.port |
Порт Management Application |
8082 |
|
logging.path |
Путь к лог-файлам |
/fluent-bit/etc/logs |
|
logback.path |
Путь до файла конфигурации logback |
/etc/telemetry-collector/logging |
|
logger.labels.standid |
Имя стенда для поиска логов по этому стенду |
st |
|
authentication.api-key.validation.url |
URL Abyss, отвечающий за валидацию Api ключей (должен быть указан полный Endpoint для валидации Api-key). В большинстве случаев {HOST}/{path} совпадает с тем что указано в service.core.secure.url) |
http://{HOST}/{path}/abyss/apikey/validate |
Инсталляция аудита на базе Platform V Monitor подразумевает, наличие в инсталляции COTE c настроенной задачей сбора для событий аудита. Подробнее конфигурация задачи описана в документе - Руководство прикладного разработчика->Подключение и конфигурирование->Сбор данных по аудиту.
Чтобы отключить использование API-ключей, необходимо указать значение false для параметров:
authentication.api-key.enabled=false;
collector_push.ose.configmap.collector_push.service_core_project_enable=false;
collector_push.ose.configmap.collector_push.authorization_enabled=false;
Для включения необходимо указать значение true для тех же параметров.
resources/telemetry-collector.collector-pull.conf
Общее назначение |
Параметр |
Описание |
Пример заполнения |
|---|---|---|---|
Настройки ОТТ |
collector_pull.ose.common.ott_enabled |
Признак использования сервиса OTT для Pull Collector |
true |
Идентификаторы групп Kafka consumer по проектам |
collector_pull.ose.configmap.kafka_consumer_groups |
Идентификаторы групп Kafka consumer’ов по проектам |
„{«PPRB»: «PPRB_pull_processing_group»}“ |
resources/telemetry-collector.ott-sidecar.all.conf
Общее назначение |
Параметр |
Описание |
Пример заполнения |
|---|---|---|---|
Настройки ОТТ |
ott.sidecar.enabled |
Признак использования сервиса OTT |
true |
ott.module.id |
Идентификатор модуля. При использовании secman pki значение должно совпадать с CN сертификата |
geo.apps.opsmon.sss |
|
ott.client.tls |
Версия протокола TLS для подключения к серверам OTT |
TLSv1.2 |
|
ott.authz.realm |
Значение realm для аутентификации |
ott |
|
ott.module.attribute.id |
Атрибут контекста авторизации, в котором передается идентификатор приложения/namespace в OTT |
urn:ssss:names:pppb:1.0:module:id |
|
ott.token.type.attribute.id |
Атрибут контекста авторизации, в котором передается тип запрашиваемого токена |
urn:ssss:names:pppb:1.0:token:type |
|
ott.service.cert.alias |
Alias сертификата сервиса |
tlmcltr |
|
ott.client.cert.alias |
Alias сертификата клиента |
tlmcltr |
|
ott.ingress.sidecar.enabled |
Признак использования сервиса OTT на ingress |
false |
|
ott.ingress.sidecar.ott.route.url.enabled |
Признак использования замены суффиксов url, содержащих подстроку replace-ott-requested на prefix и заголовок header |
false |
|
ott.ingress.sidecar.ott.route.url.prefix |
Префикс для замены суффиксов url |
pipeline/audit-pipe- |
|
ott.ingress.sidecar.ott.route.url.header |
Заголовок для замены суффиксов url |
ott-invoker |
|
ott.ingress.sidecar.http.port |
Порт OTT sidecar для ingress |
15444 |
|
Поиск хранилищ сертификатов OTT |
ott.authz.ingress.oper.mode |
Режим валидации сертификата на ingress |
validate |
ott.authz.ingress.tls.trust.mode |
Признак доверия OTT sidecar |
true |
|
Размер http-сообщения |
ott.ingress.sidecar.max.request.bytes |
Настройка максимального размера http-сообщения при обращении к collector_push |
10485760 |
ott.ingress.sidecar.max.request.bytes.enabled |
Признак проверки максимального размера http-сообщения на ingress |
true |
resources/telemetry-collector.collector-push.conf
Общее назначение |
Параметр |
Описание |
Пример заполнения |
|---|---|---|---|
Настройки аутентификации/авторизации Push Collector |
collector_push.ose.configmap.collector_push.authorization_enabled |
Признак использования авторизации для Push Collector |
false |
collector_push.ose.configmap.collector_push.authentication_enabled |
Признак использования аутентификации для Push Collector |
false |
|
collector_push.ose.configmap.collector_push.authentication_jwt_enabled |
Признак использования аутентификации с использованием jwt токена для Push Collector |
false |
|
collector_push.ose.configmap.collector_push.service_core_project_enabled |
Признак использования режима проверки соответствия доступа пользователя к проекту для Push Collector |
false |
|
collector_push.ose.configmap.collector_push.certificate_authentication_enabled |
Признак использования аутентификации с использованием сертификата для Push Collector |
true |
|
collector_push.ose.configmap.collector_push.certificate_authentication_header_name |
Наименование заголовка, содержащего сертификат |
X-FORWARDED-CLIENT-CERT |
|
collector_push.ose.configmap.collector_push.certificate_authentication_cn_pattern |
Паттерн для получения CN из заголовка, содержащего сертификат |
.CN=([a-zA-Z0-9._-]+). |
|
collector_push.ose.configmap.collector_push.certificate_authentication_abyss_use_cert_header_name |
Заголовок, в котором задается использование сертификата при аутентификации (для Abyss) |
X-Abyss-Use-Cert-Auth |
|
collector_push.ose.configmap.collector_push.certificate_authentication_abyss_client_cert_header_name |
Заголовок, в котором хранится сертификат для аутентификации (для Abyss) |
X-Abyss-SSL-Client-Cert |
|
authorization.cache.ttl.seconds |
Длительность кеширования запросов авторизации по проекту в секундах для модуля push (по умолчанию 120 с) |
120 |
|
pipeline.cache.ttl.seconds |
Длительность кеширования запросов получения проектов по наименованию для модуля push (по умолчанию 60 с) |
60 |
|
Размеры заголовков |
collector_push.max.http.header.size |
Настройка максимального размера заголовка при обращении к collector_push |
32Kb |
resources/telemetry-collector.istio.all.conf
Общее назначение |
Параметр |
Описание |
Пример заполнения |
|---|---|---|---|
Настройки Vault агента |
istio.egress.common.vault_gateway_port |
Внутренний порт на Egress при обращении к Secman |
0000 |
istio.image.pull.secrets.name |
Имя секрета для скачивания образа Envoy |
opsmon-image-pull |
|
Настройки для маппинга Istio |
service.auth.api.host |
Хост сервиса аутентификации |
xx-keycloak-01.opsmon.xxx |
service.core.api.host |
Хост сервиса проектов. В случае использования балансировщика Abyss параметр не заполнять (в таком случае заполняется service.balancer.host) |
xx-abyss-nginx-01.opsmon.sss |
|
service.balancer.host |
Хост балансировщика Abyss |
xx-abyss-nginx-01.opsmon.sss |
|
service.audit.host |
Хост сервиса Audit |
xx-xxx.audit2-xxxxx.apps1.solution.sss |
|
service.abyss.host |
Адрес хоста сервиса Abyss (LGDB). В случае использования балансировщика Abyss параметр не заполнять (в таком случае заполняется service.balancer.host) |
xxxx-abyss-xxxxx-01.oooooo.sss |
|
service.balancer.host |
Хост сервиса балансирвщика |
||
service.buse.host |
Адрес хоста сервиса Business Services (BUSE) |
xxx-om-dev-buse-04.apps.stands-vdc01.solution.xxx |
|
service.auth.api.port |
Порт сервиса аутентификации (указывается реальный порт) |
0000 |
|
service.balancer.port |
Порт сервиса балансировщика Abyss |
0000 |
|
service.core.api.port |
Порт сервиса проектов. В случае использования балансировщика Abyss параметр не заполнять (в таком случае заполняется service.balancer.port) |
000 |
|
service.audit.port |
Порт сервиса Audit |
000 |
|
service.abyss.port |
Порт сервиса Abyss. В случае использования балансировщика Abyss параметр не заполнять (в таком случае заполняется service.balancer.port) |
0000 |
|
service.buse.port |
Порт сервиса Business Services |
0000 |
|
istio.egress.common.pg_balancer_virtual_port |
Внутренний (mesh) порт при обращении к БД PostgreSQL |
5002 |
resources/telemetry-collector.management-app.conf
Общее назначение |
Параметр |
Описание |
Пример заполнения |
|---|---|---|---|
Настройки авторизации/аутентификации Management Application |
management_app.ose.configmap.management_app.authorization_enabled |
Признак использования авторизации для Management app |
true |
management_app.ose.configmap.management_app.authentication_enabled |
Признак использования аутентификации для Management app |
true |
|
management_app.ose.configmap.management_app.authentication_jwt_enabled |
Признак использования аутентификации с использованием jwt токена для Management app |
true |
|
management_app.ose.configmap.management_app.service_core_project_enabled |
Признак использования режима проверки соответствия доступа пользователя к проекту для Management app |
true |
|
Размеры заголовков |
management_app.max.http.header.size |
Настройка максимального размера заголовка при обращении к management_app |
32Kb |
Настройки http-клиента feature-settings сервиса |
management_app.ose.configmap.service.feature_settings.url |
URL feature-settings сервиса |
|
management_app.ose.configmap.service.feature_settings.enabled |
Признак включения клиента feature-settings сервиса |
false |
|
Настройки kvr клиента |
management_app.ose.configmap.client.kvr.enabled |
Признак включения КВР |
false |
management_app.ose.configmap.client.kvr.url |
URL подключения к КВР сервису |
http:${istio.egress.common.buse_host}:8004/bs/authorization/kvr-tasks |
|
management_app.ose.configmap.client.kvr.task_timeout_in_seconds |
Тайм-аут по задачам КВР |
300 |
|
management_app.ose.configmap.client.kvr.scheduling.period_in_seconds |
Периодичность проверки статусов задач в пуле |
10 |
|
management_app.ose.configmap.client.kvr.app_startup_audit_event.enabled |
Признак включения отправки события аудита при старте приложения (для правильного указания параметров в событии должен быть включен management_app.ose.configmap.service.feature_settings.enabled, иначе параметры будут без значений) |
false |
в файле conf/custom_property.conf.yaml при необходимости включить нужные параметры:
# Флаг запуска удаления колонок БД после миграции
COTE_LIQUIBASE_ALTER_COLUMN_ENABLE: false
# Режим миграции секретов в Vault
# dry-run - отладочный, без сохранения в DB и Vault. Возможность проверить на конфликт или некорректность имен секретов и внести корректировки в случае необходимости в данные
# vault - промежуточный, сохранение секретов в Vault, данные в DB не обновляются
# full - полный, сохранение и в DB, и в Vault.
# disable - отключен
COTE_SECRETS_VAULT_MIGRATION: "DISABLE"
# Флаг для создания emum, которые не поддерживались в релизах 5.1.38(39) (список доступных security protocol для kafka и виды критичных проверок при валидации метамодели)
COTE_LIQUIBASE_ADD_ENUMS_ENABLE: false
Настройка Platform V Pangolin SE#
Сервис работает с БД двумя различными способами:
хранение своих данных (конфигурации pipeline, настройки, квоты и др.);
синхронизация распределенного scheduling.
Для подключения к БД можно использовать hikari pool, либо pgbouncer (только при наличии SSM).
Если подключение к PostgreSQL SE выполняется через pgbouncer, то с точки зрения конфигурации приложения, оно ничем не отличается от прямого подключения. За исключением того, что указывается хост pgbouncer, а не БД. Для хранения данных может быть использована одна и та же БД или разные. Для использования одной БД необходимо указать одинаковую конфигурацию для различных БД, указанных ниже по тексту.
В текущем релизе при подключении к PostgreSQL через pgbouncer будет использоваться только дефолтная схема БД (независимо от того, какая указана в значении параметров
database.pvm_collector.schema,database.shedlock.schema)
В случае использования схемы cluster-patroni-etcd-pgbouncer необходимую логику по выбору ведущего сервера необходимо реализовать через строчку подключения к БД, на примере JDBC драйвера:
jdbc:postgresql://127.0.0.1:6544,127.0.0.2:6544/dbname?targetServerType=master&prepareThreshold=0
Описание параметров:
prepareThreshold = int - определяет количество выполнений PreparedStatement, необходимых перед переключением на использование подготовленных операторов на стороне сервера. Значение по умолчанию - 5, что означает начало использования подготовленных операторов на стороне сервера при пятом выполнении того же объекта PreparedStatement. До версии PostgreSQL SberEdition 5.1.0 рекомендованное значение 0, так как pgBouncer не умеет работать с подготовленными транзакциями.
targetServerType = String - позволяет открывать соединения только к серверам с указанной ролью, разрешенные значения: any, master, primary, slave, secondary, preferSlave, preferSecondary. Различие между primary и secondary в настоящее время выполняется путем проверки того, разрешает ли сервер запись. Значение preferSecondary пытается подключиться к ведомому серверу, если таковые имеются, в противном случае позволяет подключиться к ведущему.
currentSchema = String - не работает при использовании pgBouncer. Рекомендуется назначать search_path для пользователя.
ALTER USER <имя_пользователя> SET SEARCH_PATH TO <значение_параметра>;
Для работы Единого Коллектора и для работы скриптов развертывания в БД необходимо создать технологические учетные записи (ТУЗ), имена указаны для примера, можно задать другие:
Имя ТУЗ |
Назначение |
Условия использования |
|---|---|---|
pvm_collector_user |
Владелец схемы БД |
При использование Platform V Pangolin в роль pvm_collector_user включается заранее созданная доменная ТУЗ владельца схемы БД |
management_app_user |
Для работы скриптов развертывания Единого Коллектора — создание объектов схемы БД средствами Liquibase |
При использование Platform V Pangolin в роль management_app_user включается заранее созданная доменная ТУЗ владельца схемы БД. Доменная ТУЗ с ролью management_app_user, должна являться владельцем объектов БД, для этого перед выполнением DDL-команд должна выполняться команда |
DDL накатываются автоматически, но базу необходимо проинициализировать.
Пример скрипта для инициализации:
CREATE USER pvm_collector_user WITH PASSWORD 'pvm_collector_password';
CREATE DATABASE pvm_collector OWNER pvm_collector_user;
GRANT ALL PRIVILEGES ON DATABASE pvm_collector TO pvm_collector_user;
CREATE SCHEMA IF NOT EXISTS pvm_collector;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA pvm_collector;
ALTER DATABASE pvm_collector SET SEARCH_PATH TO 'pvm_collector';
ALTER ROLE pvm_collector_user SET SEARCH_PATH TO 'pvm_collector';
GRANT ALL PRIVILEGES ON SCHEMA pvm_collector TO pvm_collector_user;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA pvm_collector TO pvm_collector_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA pvm_collector TO pvm_collector_user;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA pvm_collector TO pvm_collector_user;
GRANT ALL PRIVILEGES ON ALL ROUTINES IN SCHEMA pvm_collector TO pvm_collector_user;
GRANT ALL PRIVILEGES ON ALL PROCEDURES IN SCHEMA pvm_collector TO pvm_collector_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA pvm_collector GRANT ALL PRIVILEGES ON TABLES TO pvm_collector_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA pvm_collector GRANT ALL PRIVILEGES ON SEQUENCES TO pvm_collector_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA pvm_collector GRANT ALL PRIVILEGES ON FUNCTIONS TO pvm_collector_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA pvm_collector GRANT ALL PRIVILEGES ON ROUTINES TO pvm_collector_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA pvm_collector GRANT ALL PRIVILEGES ON TYPES TO pvm_collector_user;
CREATE USER management_app_user WITH PASSWORD 'management_app_password';
GRANT USAGE ON SCHEMA pvm_collector TO management_app_user;
GRANT SELECT, UPDATE, INSERT, DELETE ON ALL TABLES IN SCHEMA pvm_collector TO management_app_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA pvm_collector TO management_app_user;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA pvm_collector TO management_app_user;
GRANT EXECUTE ON ALL ROUTINES IN SCHEMA pvm_collector TO management_app_user;
GRANT EXECUTE ON ALL PROCEDURES IN SCHEMA pvm_collector TO management_app_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA pvm_collector GRANT SELECT, INSERT, UPDATE, DELETE, TRUNCATE ON TABLES TO management_app_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA pvm_collector GRANT ALL PRIVILEGES ON SEQUENCES TO management_app_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA pvm_collector GRANT EXECUTE ON FUNCTIONS TO management_app_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA pvm_collector GRANT EXECUTE ON ROUTINES TO management_app_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA pvm_collector GRANT USAGE ON TYPES TO management_app_user;
, где пароли, имена схем, пользователей и БД могут быть (пароли должны) выставлены на усмотрение администратора. Скрипт должен соответствовать статической конфигурации сервиса.
Далее необходимо сделать резервную копию БД Единого Коллектора следующим, либо другим удобным способом:
pg_dump -h [имя_хоста] -p [номер_порта] -U [имя_пользователя] -n [имя_схемы] -v -f [имя_файла_c_backup].sql [имя_бд]
Пример:
pg_dump -h st-abyss-name-01.opsmon.sss -p 5432 -U postgres -n cote -v -f namedb.sql namedb_db
Eсли используется георезервирование или БД, которая состоит из нескольких нод, то для корректной работы необходимо в настройке pgbouncer в параметр ignore_startup_parameters добавить search_path.
Пример:
ignore_startup_parameters = extra_float_digits*,search_path*
Ошибка, которая возникает при отсутствии search_path*, указана в Часто встречающиеся проблемы и пути их устранения.
Настройка облачного окружения#
Необходимо создать namespace в кластере Kubernetes, Platform V DropApp (далее DropApp). Также необходимо подключить созданный namespace к Istio Control Plane (istiod).
Ручная установка без использования скриптов развертывания#
Рекомендуем использовать скрипты для автоматизации установки. Скрипты расположены в дистрибутиве, в папке bh/installer в архиве deploy-pvm.zip. В архиве также находится документация по использованию скриптов.
Для установки компонента Единый коллектор телеметрии вручную необходимо:
Получить дистрибутив компонента Единый коллектор телеметрии;
Заказать схему БД PostgreSQL или СУБД Platform V Pangolin SE для Единого коллектора (Приложению требуется СУБД Postgres, рекомендуется использовать Platform V Pangolin SE. Требования по инсталляции СУБД отсутствуют, т.е. схему можно создать в любой инсталляции, на усмотрение клиента);
Выполнить скрипты инициализации БД, расположенные в архиве, в директории db дистрибутива;
Сделать резервную копию БД Единого Коллектора следующим, либо другим удобным способом:
pg_dump -h [имя_хоста] -p [номер_порта] -U [имя_пользователя] -n [имя_схемы] -v -f [имя_файла_c_backup].sql [имя_бд]
Пример:
pg_dump -h st-abyss-name-01.opsmon.sss -p 5432 -U postgres -n cote -v -f namedb.sql namedb_db
Во всех файлах .yaml расположенных в директориях заполнить значения переменных;
Для настройки окружения - внести изменения в файл telemetry-collector.all.conf;
Для файлов вида *-certs.yaml, необходимо вручную создать yaml;
Создать секреты с именем из secret-telemetry-collector и значениями из секции secrets файла distrib.yaml;
Необходимо подключить проект к Istio Control Panel (Platform V Synapse Service Mesh);
Заполнить значения переменных для всех файлов *.yaml из директории k8s;
Далее необходимо установить все заполненные файлы *.yaml в платформе приложений-контейнеров с помощью команды;
Применить все yaml-конфигурации.
Конфигурирование Platform V DevOps Tools (DOT)#
Сервис устанавливается с помощью стандартного Platform V DevOps Tools (DOT).
Секреты, пароли, сертификаты#
При установке Единого коллектора доступно выбрать способ хранения секретов, паролей и сертификатов:
Secret Management System (SecMan);
Common-репозиторий.
Одновременное использование двух вариантов хранения недоступно.
Для корректной работы Единого Коллектора используются следующие сертификаты:
Сертификат Apache Kafka;
Сертификат OTT;
Сертификат Istio для Pull Collector;
Сертификат Istio;
Сертификат для БД.
Общий корневой сертификат расположен в common-репозитории и используется независимо от способа хранения секретов (в Secman или в common-репозитории).
Рекомендованное расположение цепочки сертификатов УЦ, указано в конфигурационном файле telemetry-collector.all.conf:
Параметр |
Описание |
Пример заполнения |
|---|---|---|
telemetry_collector.ose.common.ca_location |
Расположение цепочки сертификатов УЦ в common-репозитории |
ansible/files/ssl/caCertificates.pem |
В этот файл необходимо поместить цепочку сертификатов УЦ в формате PEM для Apache Kafka, Istio, OTT, БД.
Secman#
Для хранения сертификатов в Secman необходимо в конфигурационных файлах заполнить общие параметры:
telemetry-collector.vault-agent-sidecar.all.conf:
Общее назначение |
Параметр |
Наименование |
Возможные значения |
|---|---|---|---|
Настройки подключения к Secman |
cote.vault.enabled |
Признак использования интеграции с Secman |
true |
cote.vault.host |
URL для подключения к Vault (SecMan) |
secman-ddo.solution.sss |
|
cote.vault.port |
Порт для подключения к Vault (SecMan) |
8200 |
|
cote.vault.config.service_account.token.location |
Параметр, указывающий на расположение токена из Service account |
/var/run/secrets/kubernetes.io/serviceaccount/token |
|
cote.vault.config.auto_auth.kubernetes_auth_method_path |
Метод для аутентификации в Secman для роли kubernetes (без auth) |
os/stands-vdc01.solution.sss |
|
cote.vault.config.auto_auth.method.config.role |
Роль пользователя, которому доступно получать/обновлять/удалять секреты в Secman |
role-ga-secman-mona |
|
cote.vault.config.auto_auth.method.namespace |
Параметр namespace для подключения к Secman |
DEV_DDO |
|
vault.database.shedlock.username |
Нотация логина от БД блокировок |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:config.env.database.shedlock.username} |
|
vault.database.shedlock.password |
Нотация пароля от БД блокировок |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:config.env.database.shedlock.password} |
|
vault.database.pvm_collector.username |
Нотация логина от БД |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:config.env.database.pvm_collector.username} |
|
vault.database.pvm_collector.password |
Нотация пароля от БД |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:config.env.database.pvm_collector.password} |
|
vault.authentication.api_key.internal_key |
Нотация Api-ключа |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:config.env.authentication.api-key.internal-key.api-key} |
|
vault.authentication.api_key.validation.auth.basic.user |
Нотация логина от сервиса валидации Api-ключа |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:config.env.authentication.api-key.validation.auth.basic.user} |
|
vault.authentication.api_key.validation.auth.basic.pass |
Нотация пароля от сервиса валидации Api-ключа |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:config.env.authentication.api-key.validation.auth.basic.pass} |
|
vault.service.core.secure.auth.basic.user |
Нотация логина от Сервиса авторизации компонента Abyss (LGDB) |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:vault.service.core.secure.auth.basic.user} |
|
vault.service.core.secure.auth.basic.pass |
Нотация пароля от Сервиса авторизации компонента Abyss (LGDB) |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:vault.service.core.secure.auth.basic.pass} |
|
vault.service.kafka.ssl.privateKeyPassword |
Нотация пароля от приватного ключа для Apache Kafka |
stub |
|
vault.service.database.ssl.privateKeyPassword |
Нотация пароля от приватного ключа для БД |
stub |
|
vault.service.pull.ssl.privateKeyPassword |
Нотация пароля от приватного ключа для Pull Collector |
stub |
|
vault.telemetry_collector.ose.common.kafka_ssl_key_filepath |
Нотация от приватного ключа для Apache Kafka |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:kafka_private-key_pem} |
|
vault.telemetry_collector.ose.common.kafka_ssl_certificate_filepath |
Нотация от клиентского сертификата для Apache Kafka |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:kafka_cert_pem} |
|
vault.telemetry_collector.ose.common.database_ssl_key_filepath |
Нотация от приватного ключа для БД |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:database_private-key_pem} |
|
vault.telemetry_collector.ose.common.database_ssl_certificate_filepath |
Нотация от клиентского сертификата для БД |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:database_cert_pem} |
|
vault.istio.egress.common.privateKey_name |
Нотация от приватного ключа для Pull Collector (приватного ключ для Pull Collector, который будет использоваться в output/input при создании SSL) |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:pull-collector_private-key_pem} |
|
vault.istio.egress.common.clientCertificate_name |
Нотация от клиентского сертификата для Pull Collector (сертификат для Pull Collector, который будет использоваться в output/input при создании SSL) |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:pull-collector_cert_pem} |
|
vault.telemetry_collector.ose.common.crypt.password.key |
Нотация для ключа шифрования секретов (произвольное значение для ключа шифрования) |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:crypt_key} |
|
vault.audit.kafka.ssl.privateKeyPassword |
Нотация пароля от приватного ключа для Kafka, в которую отправляются собственные события аудита |
stub |
|
vault.telemetry_collector.ose.common.audit_kafka_ssl_key_filepath |
Нотация от приватного ключа для Kafka, в которую отправляются собственные события аудита |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:kafka_audit_private-key_pem} |
|
vault.telemetry_collector.ose.common.audit_kafka_ssl_certificate_filepath |
Нотация от клиентского сертификата для Kafka, в которую отправляются собственные события аудита |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:kafka_audit_cert_pem} |
|
cote.vault.secrets.runtime.ttl |
Настройка времени обновления runtime секрета (сек) |
300 |
|
cote.vault.secrets.runtime.location.prefix |
Путь до хранения секретов |
DEV_DDO/A/ST/OM/MONA/KV |
|
vault.authentication.api_key.abyss.api_key |
Нотация api-keу суперадмина (используется для kvr) |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:cote-secret-vault-r5:config.env.authentication.api-key.abyss-key.api-key} |
|
vault.telemetry_collector.ose.common.client_kafka_ssl_key_filepath |
Нотация от приватного ключа для клиентской Kafka |
$__vault{pki:DEV_DDO/PKI:role-ga-secman-cote:app.dev.solution.sss:private_key} |
|
vault.telemetry_collector.ose.common.client_kafka_ssl_certificate_filepath |
Нотация от клиентского сертификата для клиентской Kafka |
$__vault{pki:DEV_DDO/PKI:role-ga-secman-cote:apps.de.solution.sss:certificate} |
|
vault.client.kafka.ssl.privateKeyPassword |
Нотация пароля от приватного ключа для клиентской Kafka |
stub |
|
vault.service.common.ssl.privateKeyPassword |
Нотация пароля от приватного ключа для common |
stub |
|
vault.telemetry_collector.ose.common.common_ssl_key_filepath |
Нотация от приватного ключа для common-контекста |
$__vault{pki:DEV_DDO/PKI:role-ga-secman-cote:apps.dev.solution.sbt:private_key} |
|
vault.telemetry_collector.ose.common.common_ssl_certificate_filepath |
Нотация от клиентского сертификата для common-контекста |
$__vault{pki:DEV_DDO/PKI:role-ga-secman-cote:apps.dev.solution.sbt:certificate} |
Обращаем внимание, что для параметров нотаций указанных выше должны быть предварительно созданы секреты с сертификатами или указанными свойствами.
Для внутренних взаимодействий Единого коллектора телеметрии ссылку на Api-key в Secman нужно указать в параметре vault.authentication.api_key.internal_key.
Также необходимо проверить наличие топика для сообщений об изменении секретов - {prefix}.runtime-secret-refresh. Описание характеристик топика указано в разделе - Статическая конфигурация.
При работе в режиме генерации сертификатов через PKI#
Создать PKI в Secman для вашего приложения (если оно еще не существует).
Для выпуска сертификатов можно использовать роль по имени «role-название-созданной-группы-в-AD» (в данном случае, в отличие от остальных, важен регистр). У данной роли разрешены домены sbt и gt, а также выпуск сертификатов для поддоменов. Если требуется, то можно создать собственную роль (отличается от роли для доступа к vault), которая будет содержать параметры выпуска сертификатов.
В конфигурационном файле telemetry-collector.vault-agent-sidecar.all.conf необходимо заполнить параметры:
Общее назначение |
Параметр |
Наименование |
Возможные значения |
|---|---|---|---|
Настройки при использовании PKI в Secman |
cote.vault.secrets.certs.method |
Метод генерации сертификатов |
issue |
cote.vault.secrets.certs.cn |
Указание common-name, c которым будет генерироваться сертификат |
tribe-om-dev-collect-01.apps.secman-ddd.sss |
|
cote.vault.secrets.certs.source |
Путь к секретам в хранилище Secman |
ST/COTE/OM/PKI |
|
cote.vault.config.certificates.ttl |
Настройка времени жизни сертификата, сгенерированного Secman PKI |
1800h |
telemetry-collector.istio.all.conf:
Общее назначение |
Параметр |
Наименование |
Возможные значения |
|---|---|---|---|
Настройки при использовании PKI в Secman |
istio.egress.common.pki_ttl |
Указание времени жизни сертификата для Egress |
1800h |
istio.ingress.common.pki_ttl |
Указание времени жизни сертификата для Ingress |
1800h |
Параметры ttl по-умолчанию имеют значение 1800h, их нужно переопределить на стенде, так как на Secman может стоять ограничение.
При работе с хранилищем KV#
Разместить в Secman данные (логины, пароли, сертификаты, и т. д.):
Создать в Secman хранилище KV для вашего приложения (если оно еще не существует).
Создать в UI Secman в KV secret для хранения секретов (кнопка Create secret+)
можно задать любое имя секрета, например cote-secret (это имя необходимо указать в нотациях сервисов)
ingressgateway-certs
egressgateway-certs
В конфигурационных файлах задать значения параметров:
telemetry-collector.vault-agent-sidecar.all.conf:
Общее назначение |
Параметр |
Наименование |
Возможные значения |
|---|---|---|---|
Настройки при использовании KV в Secman |
cote.vault.secrets.kv.source |
Путь к секретам в хранилище Secman |
A/ST/OM/COTE/KV/ |
telemetry-collector.istio.all.conf:
Общее назначение |
Параметр |
Наименование |
Возможные значения |
|---|---|---|---|
Настройки при использовании KV в Secman |
istio.egress.common.kv_certs_full_path |
Полный путь до секрета, который используется для Egressgateway Istio |
A/ST/OM/COTE/KV/egressgateway-certs |
istio.ingress.common.kv_certs_full_path |
Полный путь до секрета, который используется для Ingressgateway Istio |
A/ST/OM/COTE/KV/ingressgateway-certs |
|
istio.egress.common.pki_ttl |
Указание времени жизни сертификата для Egress |
1800h |
|
istio.ingress.common.pki_ttl |
Указание времени жизни сертификата для Ingress |
1800h |
Добавить в созданный на предыдущем шаге secret необходимые секреты в текстовом формате, где
Key - имя файла сертификата, по которому будет происходить lookup сертификата и его нужно будет указать в нотациях сервисов
Value - тело сертификата
Следующие параметры задаются в secret с произвольным именем (например cote-secret):
Наименование параметра |
Пример Key |
Пример Value |
|---|---|---|
Параметр для указания пароля для подключения к БД хранения данных |
config.env.database.pvm_collector.password |
password |
Параметр для указания имени пользователя для подключения к БД хранения данных |
config.env.database.pvm_collector.username |
tlmclrt_user |
Параметр для указания пароля для подключения к БД для синхронизации |
config.env.database.shedlock.password |
password |
Параметр для указания имени пользователя для подключения к БД для синхронизации |
config.env.database.shedlock.username |
tlmclrt_user |
Параметр для указания пароля для базовой аутентификации в компоненте IAM Proxy (AUTH) продукта Platform V IAM SE |
config.env.service.authentication.password |
password |
Параметр для указания имя пользователя для базовой аутентификации в Cервисе авторизации компонента Abyss (LGDB) |
config.env.service.core.user |
admin |
Параметр для указания пароля для базовой аутентификации в Cервисе авторизации компонента Abyss (LGDB) |
config.env.service.core.password |
password |
Параметр для указания Api ключа, для микросервисных взаимодействий, полученный в Abyss |
config.env.service.authentication.internal-key.api-key |
XxxxxxxxxxxxXXXXXXxxxxxxxxxxxxxxxxxxxxxx |
Параметр для указания пароля пользователя при аутентификации в сервис авторизации в процессе валидации Api ключа |
config.env.authentication.api-key.validation.auth.basic.pass |
password |
Параметр для указания имени пользователя при аутентификации в сервис авторизации в процессе валидации Api ключа |
config.env.authentication.api-key.validation.auth.basic.user |
admin |
Параметр для указания клиентского сертификата для Kafka |
kafka_cert.pem |
—–BEGIN CERTIFICATE—– XxxxxxxxxxxxXXXXXXxxxxxxxxxxxxxxxxxxxxxx |
Параметр для указания приватного ключа для Kafka |
kafka_private-key.pem |
—–BEGIN PRIVATE KEY—– XxxxxxxxxxxxXXXXXXxxxxxxxxxxxxxxxxxxxxxx |
Параметр для указания клиентского сертификат для БД |
database_cert.pem |
—–BEGIN CERTIFICATE—– XxxxxxxxxxxxXXXXXXxxxxxxxxxxxxxxxxxxxxxx |
Параметр для указания приватного ключа для БД |
database_private-key.pem |
—–BEGIN PRIVATE KEY—– XxxxxxxxxxxxXXXXXXxxxxxxxxxxxxxxxxxxxxxx |
Параметр для указания ключа для шифрования паролей в БД COTE |
config.env.crypt.password.key |
dev_key |
В случае, если сервис авторизации и сервис валидации Api-key это один и тот же сервис, то для параметров:
Параметр для указания пароля пользователя при аутентификации в сервис авторизации в процессе валидации Api ключа
Параметр для указания имени пользователя при аутентификации в сервис авторизации в процессе валидации Api ключа
используется учетная запись администратора Abyss - config.env.service.core.user, config.env.service.core.password.
Имена следующих сертификатов (Key) изменять не рекомендуется.
Имя secret |
Key |
Пример Value |
Описание сертификатов |
|---|---|---|---|
ingressgateway-certs |
tls.crt |
—–BEGIN CERTIFICATE—– MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQsF |
Клиентский сертификат для Ingressgateway Istio |
tls.key |
—–BEGIN PRIVATE KEY—– MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQsF |
Приватный ключ для Ingressgateway Istio |
|
egressgateway-certs |
tls.crt |
—–BEGIN CERTIFICATE—– MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQsF |
Клиентский сертификат для Egressgateway Istio |
tls.key |
—–BEGIN PRIVATE KEY—– MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQsF |
Приватный ключ для Egressgateway Istio |
API key можно получить или создать в Abyss. Подробнее о создании API ключей в Руководстве оператора, инструкция поставляется в рамках компонента Abyss (LGDB) в составе продукта Platform V Monitor (OPM). Наименование заголовка API ключа X-PVM-API-KEY.
В случае необходимости ротации сертификатов, добавьте ключ ttl в secret Secman со значением времени перечитывания хранилища.
При использовании ОТТ#
Необходимо добавить новый secret и сертификаты для ОТТ.
Создать в UI Secman в KV новый secret для хранения сертификатов telemetry-collector-ott-certs (кнопка Create secret+)
Задать значения параметров в конфигурационных файлах:
telemetry-collector.ott-sidecar.all.conf:
Общее назначение |
Параметр |
Наименование |
Возможные значения |
|---|---|---|---|
Настройки при использовании OTT |
cote.vault.secrets.certs.ott.ttl |
Указание времени жизни сертификата для OTT |
1800h |
ott.sidecar.ose.secman.common.kv_ott_full_path |
Полный путь до секретов в Secman для OTT |
ST/COTE/OM/KV/telemetry-collector-ott-certs |
|
ott.sidecar.ose.secman.common.enablePki |
Настройки для pki ott |
по умолчанию имеет значение переменной cote.vault.secrets.certs.source.pki, при необходимости изменить значение на false |
telemetry-collector.vault-agent-sidecar.all.conf:
Общее назначение |
Параметр |
Наименование |
Возможные значения |
|---|---|---|---|
Настройки при использовании OTT |
vault.telemetry_collector_pull.ose.ott.moduleCertificate_name |
Нотация от сертификата модуля ОТТ для Pull Collector |
$__vault{pki:DEV_DDO/PKI:role-ga-secman-omstadm::certificate} |
vault.telemetry_collector_pull.ose.ott.modulePrivateKey_name |
Нотация от приватного ключа модуля ОТТ для Pull Collector |
$__vault{pki:DEV_DDO/PKI:role-ga-secman-omstadm::private_key} |
|
vault.telemetry_collector_pull.ose.ott.serviceCertificate_name |
Нотация от сертификата сервиса ОТТ для Pull Collector |
$__vault{kv:DEV_DDO/A/ST/OM/COTE/KV:telemetry-collector-ott-certs:ottService.pem} |
Добавить сертификаты:
Имя secret |
Key |
Value (пример) |
Комментарий |
|---|---|---|---|
telemetry-collector-ott-certs |
moduleCert.pem |
—–BEGIN CERTIFICATE—– MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQsF |
Клиентский сертификат для OTT |
moduleKey.pem |
—–BEGIN PRIVATE KEY—– MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQsF |
Приватный ключ OTT клиента |
|
ottService.pem |
—–BEGIN CERTIFICATE—– MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQsF |
Сертификат OTT сервиса |
Common-репозиторий#
Таблица со списком секретов:
Название |
Значение |
|---|---|
database.pvm_collector.password |
Пароль для подключения к БД хранения данных |
database.pvm_collector.username |
Имя пользователя для подключения к БД хранения данных |
database.shedlock.password |
Пароль для подключения к БД для синхронизации |
database.shedlock.username |
Имя пользователя для подключения к БД для синхронизации |
database.pvm_collector.liquibase.password |
Пароль для проката DDL скриптов |
service.core.secure.auth.basic.pass |
Пароль для базовой аутентификации в компоненте IAM Proxy (AUTH) продукта Platform V IAM SE |
service.core.secure.auth.basic.user |
Имя пользователя для базовой аутентификации в компоненте 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 |
authentication.api-key.validation.auth.basic.pass |
Пароль пользователя для аутентификации Api ключа (задается при создании Api ключа в Abyss) |
authentication.api-key.internal-key |
Api ключ, для микросервисных взаимодействий, полученный в Abyss |
authentication.api-key.validation.auth.basic.user |
Имя пользователя для аутентификации Api ключа (задается при создании Api ключа в Abyss) |
crypt.password.key |
Ключ для шифрования паролей в БД COTE |
crypt.reencrypt.old-key |
Ключ для дешифрования паролей |
Для работы с паролями и секретами Platform V DevOps Tools (DOT) можно использовать файл _passwords.conf, который хранится в зашифрованном виде в common-репозитории.
database.pvm_collector.password=PWD
database.shedlock.password=PWD
database.pvm_collector.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
authentication.enabled.api-key.validation.auth.basic.pass=PWD
database.ssl.privateKeyPassword
service.kafka.ssl.privateKeyPassword
crypt.password.key
pull.ssl.privateKeyPassword
В файле openShift.conf добавить параметры:
# Настройка для указания priorityClassName для pods
global.ose.deployment.spec.template.spec.priorityClassName=
# Процент минимально доступных pod для конфигурации PodDisruptionBudget
global.common.poddisruptionbudget.minAvailable=
# имя проекта, где развернут control-plane
global.ufs.synapse.controlPlane.project=
# URL OTT с маской для получения токена
global.ott.service.url=https://stub-host:stub-port/ott-service/rest/token
# Хосты ОТТ
global.ott.service.hosts=
# Порт ОТТ
global.ott.grpc.port=
Все сертификаты, кроме Istio, необходимо положить в common-репозиторий для того, чтобы Platform V DevOps Tools (DOT) их смог найти и установить в инфраструктуру. Istio-сертификат настраивается отдельно, стандартно для Platform V DevOps Tools (DOT) способом.
В telemetry-collector.all.conf должны быть прописаны пути к:
файлам Kafka в common-репозитории
telemetry_collector.ose.secret.secret-telemetry-collector-kafka-certs.key_location=ansible/files/ssl/pg-key.pem
telemetry_collector.ose.secret.secret-telemetry-collector-kafka-certs.cert_location=ansible/files/ssl/pg-cert.pem
файлам БД в common-репозитории
telemetry_collector.ose.secret.secret-telemetry-collector-db-certs.key_location=ansible/files/ssl/pg-key.pem
telemetry_collector.ose.secret.secret-telemetry-collector-db-certs.cert_location=ansible/files/ssl/pg-cert.pem
общим корневым сертификатам
service.common.ssl.rootCertificatePath=/app/ssl/certs/caCertificates.pem
к сертификатам для Kafka, в которую отправляются собственные события аудита
telemetry_collector.ose.secret.secret-telemetry-collector-audit-kafka-certs.key_location=ansible/files/ssl/kafka-key.pem
telemetry_collector.ose.secret.secret-telemetry-collector-audit-kafka-certs.cert_location=ansible/files/ssl/kafka-cert.pem
Конфигурация окружения#
Значения database.pvm_collector.name и database.shedlock.name должны быть одинаковы, если имя базы данных для database.shedlock.name отличается, то требуется убедиться, что в БД присутствует таблица shedlock:
Атрибут |
Тип |
Описание |
|---|---|---|
name |
varchar(64) |
Имя блокировка |
lock_until |
timestamp |
Время окончания блокировки |
locked_at |
timestamp |
Время начала блокировки |
locked_by |
varchar(255) |
Имя узла, создавшего блокировку |
В случае работы с несколькими репликами БД и необходимости переключения между master/slave, следует установить параметр для БД targetServerType=master. Пример dbname?targetServerType=master&prepareThreshold=0
В common-репозитории в common.conf.yaml указать значения параметров для подключения к БД, в которую будет происходить миграция liquibase-скриптов: TLMCLTR_POSTGRES_DB_URL: «jdbc:postgresql://…» - url для подключения к БД TLMCLTR_POSTGRES_DB_SCHEMA: «telemetry_schema» - схема БД для которой применяются скрипты TLMCLTR_POSTGRES_DB_LIQUIBASE_USER: «tlmclrt_user» - пользователь с правами на CRUD-операции с таблицами БД
В состав дистрибутива входят конфигурационные файлы с рекомендуемыми значениями не стендозависимых параметров для настройки продукта. Их изменение может нарушить безопасность продукта. Пример типовой конфигурации:
Запуск Platform V DevOps Tools (DOT)#
Установка сервиса происходит через установку дистрибутива Единого коллектора централизованным Platform V DevOps Tools (DOT).
Выполнить миграцию конфигураций, используя playbook: MIGRATION_FP_CON.
Выполнить конфигурирование параметров и окружения.
Создать системные задачи сбора данных.
Выполнить установку дистрибутива Единого коллектора телеметрии в среде контейнеризации, используя playbook: DB_UPDATE, OPENSHIFT_INGRESS_EGRESS_DEPLOY, OPENSHIFT_DEPLOY (параметр применим, для DropApp, Kubernetes, OpenShift), DEBUG (опционально, для подробных логов при отладке).


Проверка установки и диагностика#
После завершения работы Platform V DevOps Tools (DOT), необходимо произвести проверку результата выполнения. Должно быть развернуто минимум по одному pod:
telemetry-collector-management-app;
telemetry-collector-pull;
telemetry-collector-push.
Количество pod может меняться и задается в конфигурации сервисов параметром replicas.
Рекомендуется проверить логи сервисов management-app, push-collector, pull-collector.
Настройка обслуживания сервиса#
Единый коллектор предоставляет в стандартном виде информацию о своем состоянии:
Трассировки в формате Zipkin;
Логи, JSON формат, допустимый для fluent-bit;
Метрики в формате Prometheus;
Для нормальной эксплуатации сервиса эти данные необходимо собирать и сохранять в Abyss, для возможности дальнейшей визуализации.
Для сбора данных необходим проект в Abyss. Этот проект должен быть использован для конфигурирования, которое описано далее. Также на проект нужна достаточная квота. Подробности о создании проектов и квот в интерфейсе Abyss можно выяснить в документации Abyss в документе «Руководство оператора». Все телеметрические данные самомониторинга должны записываться в хранилище Abyss.
Подробнее о создании системных задач сбора данных описано в пункте Системные задачи сбора данных Единого коллектора телеметрии.
Трассировки#
Сбор данных происходит с помощью Spring Zipkin. Трассировки пишутся для всех приложений сервиса: pull/push collector, management application.
Конфигурация (статическая конфигурация сервиса):
spring.zipkin.enabled: true
spring.zipkin.base-url: http://{HOST}:{PORT}/push/project/{projectName}/pipeline/{pipelineName}
spring.zipkin.api-path: /
spring.zipkin.sender.type: WEB
, где {projectName} - это имя проекта, используемого для сбора данных, {pipelineName} - это имя pipeline.
Конфигурация pipeline для импорта:
{
"quota": {
"limitTrafficPerMin": 10000000
},
"name": "self-tracing-pipe",
"input": {
"typeName": "standard-http-api",
"config": "{}"
},
"processors": [
{
"typeName": "http-jackson-converter",
"config": "{\"httpConverterConfig\":{\"required\": false, \"headersToEnrich\": []}}",
"order": 1
},
{
"typeName": "pipeline-data-enrichment-processor",
"config": "{}",
"order": 2
},
{
"typeName": "json-flattener-processor",
"config": "{\"jsonFlattenerConfig\":{\"flattenMode\": \"KEEP_ARRAYS\", \"standardFlatteningForFieldsWithDots\": false}}",
"order": 3
}
],
"outputs": [
{
"typeName": "kafka-output",
"config": "{\"kafkaProducerConfig\":{\"acks\": -1, \"topic\": \"collect.self-tracing\", \"clientId\": \"cid-3\", \"lingerMs\": 0, \"batchSize\": 16384, \"maxBlockMs\": 60000, \"keySerializer\": \"org.apache.kafka.common.serialization.StringSerializer\", \"sslClientAuth\": false, \"requestTimeout\": 30000, \"deliveryTimeout\": 120000, \"valueSerializer\": \"org.springframework.kafka.support.serializer.JsonSerializer\", \"bootstrapServers\": \"KAFKA_ADDRESS_AND_PORT\", \"securityProtocol\": \"SSL\", \"idempotenceEnabled\": true, \"sslEnabledProtocols\": \"TLSv1.2\", \"maxInFlightRequestsPerConnection\": 5, \"sslEndpointIdentificationAlgorithm\": \"https\"}}"
}
]
}
, где TRACING_TOPIC_NAME - это имя топика Apache Kafka для записи трассировок (нужно создать через UI Abyss), KAFKA_ADDRESS_AND_PORT - список bootstrap серверов kafka Abyss (можно запросить у администратора PVM).
Установка отдельного Push Collector#
Существует возможность установки Push Collector, отдельно от Management Application и Pull Collector. Это может потребоваться для реализации установки n-экземпляров Единого коллектора в разных сетевых зонах. Установка осуществляется обычным способом, описанном в разделе Автоматическая установка, при этом требуется переопределение некоторых параметров:
Не рекомендуется одновременно запускать установку отдельного Push Collector и Pull Collector
Установить значение true в параметре для управления установкой отдельного Push Collector (в конфигурационном файле telemetry-collector.all.conf):
telemetry_collector.push_only=trueУказать значение host Management Application:
management_app.host=<host>Необходимо переопределить значение по умолчанию на host из route Management Application из главной зоны (PRIMARY_ZONE), к которому будет обращаться Push Collector для получения конфигурации.Сетевая зона
collector_push.ose.configmap.cote_cm_telemetry_collector_push.global.network.zone=<название_зоны>По умолчанию указано PRIMARY_ZONE, если производится полная инсталляция.
После выполнения установки в namespace будут присутствовать следующие Deployment:
cote-telemetry-collector-push
egw-cote-{имя проекта}
igw-cote-{имя проекта} А также набор манифестов, который нужны для работы Push Collector.
Установка отдельного Pull Collector#
В связи с необходимостью работы нескольких экземпляров СОТЕ с одним кластером Abyss есть возможность установить Pull Collector в отдельный namespace. Установка Pull Collector возможна в другой namespace только той же сетевой зоны. Pull Collector должен быть настроен на те же кластера Kafka, Secman и БД, что и основная инсталляция COTE. Также должны совпадать служебные топики и префиксы для них.
Не рекомендуется одновременно запускать установку отдельного Push Collector и Pull Collector
Установить значение true в параметре для управления установкой отдельного Pull Collector (в конфигурационном файле telemetry-collector.all.conf):
telemetry_collector.pull_only=trueУказать значение host Management Application:
management_app.host=<host>Необходимо переопределить значение по умолчанию на host из route Management Application из главной зоны (PRIMARY_ZONE), к которому будет обращаться Pull Collector для получения конфигурации.Указать значение host Push Collector:
push_app.host=<host>Необходимо переопределить значение по умолчанию на host из route Push Collector из главной зоны (PRIMARY_ZONE), к которому будет обращаться Pull Collector для отправки телеметрии.В конфигурационном файле telemetry-collector.collector-pull.conf задать значение зоны для pull-сбора отличное от главной инсталляции
collector_pull.ose.configmap.cote_cm_telemetry_collector_pull.global.work.zone=
После выполнения установки в namespace будут присутствовать следующие Deployment:
cote-telemetry-collector-pull
egw-cote-{имя проекта} А также набор манифестов, который нужны для работы Pull Collector.
Метрики#
Есть два варианта сбора и отправки метрики самомониторинга COTE:
Unimon-agent (MONA) - данные предоставляются в формате Actuator Prometheus. Эти данные необходимо собирать с помощью Prometheus-агента (Unimon-агент (MONA). Конфигурация носит информативный характер. Пример конфигурация Unimon-агента (фактически в scrape_configs нужно оставить kubernetes-pods и kubernetes-pods-https и далее задать endpoint).
kind: ConfigMap
apiVersion: v1
metadata:
name: unimon-agent-config.r4
labels:
app: unimon-agent
data:
prometheus.yml: |-
global:
scrape_interval: %GLOBAL_SCRAPE_INTERVAL%
scrape_timeout: %GLOBAL_SCRAPE_TIMEOUT%
scrape_configs:
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: endpoints
namespaces:
names:
- "ci02707148-idevgen-audit-mmv"
relabel_configs:
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
regex: true
action: keep
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
regex: (.+)
target_label: __metrics_path__
action: replace
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
action: drop
regex: https
- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
action: replace
target_label: __address__
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
- source_labels: [__meta_kubernetes_namespace]
separator: ;
regex: (.*)
target_label: namespace
replacement: $1
action: replace
- source_labels: [__meta_kubernetes_pod_name]
separator: ;
regex: (.*)
target_label: pod
replacement: $1
action: replace
- source_labels: [__meta_kubernetes_service_name]
separator: ;
regex: (.*)
target_label: service
replacement: $1
action: replace
- source_labels: [__meta_kubernetes_pod_node_name]
separator: ;
regex: (.*)
target_label: nodeName
replacement: $1
action: replace
- action: labelmap
regex: __meta_kubernetes_pod_label_(.+)
- source_labels: [__address__]
separator: ;
regex: (.*)
target_label: unimonVersion
action: replace
replacement: "D-04.000.00-2373_client"
- source_labels: [__address__]
separator: ;
regex: (.*)
target_label: tenant
action: replace
replacement: "undefined"
- source_labels: [__address__]
separator: ;
regex: (.*)
target_label: source
action: replace
replacement: OpenShift
- job_name: 'kubernetes-pods-https'
scheme: https
tls_config:
ca_file: /etc/prom-certs/root-cert.pem
cert_file: /etc/prom-certs/cert-chain.pem
key_file: /etc/prom-certs/key.pem
insecure_skip_verify: true
kubernetes_sd_configs:
- role: endpoints
namespaces:
names:
- "ci02707148-idevgen-audit-mmv"
relabel_configs:
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]
regex: true
action: keep
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path]
regex: (.+)
target_label: __metrics_path__
action: replace
- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme]
action: keep
regex: https
- source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port]
action: replace
target_label: __address__
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
- source_labels: [__meta_kubernetes_namespace]
separator: ;
regex: (.*)
target_label: namespace
replacement: $1
action: replace
- source_labels: [__meta_kubernetes_pod_name]
separator: ;
regex: (.*)
target_label: pod
replacement: $1
action: replace
- source_labels: [__meta_kubernetes_service_name]
separator: ;
regex: (.*)
target_label: service
replacement: $1
action: replace
- source_labels: [__meta_kubernetes_pod_node_name]
separator: ;
regex: (.*)
target_label: nodeName
replacement: $1
action: replace
- action: labelmap
regex: __meta_kubernetes_pod_label_(.+)
- source_labels: [__address__]
separator: ;
regex: (.*)
target_label: unimonVersion
action: replace
replacement: "D-04.000.00-2373_client"
- source_labels: [__address__]
separator: ;
regex: (.*)
target_label: tenant
action: replace
replacement: "undefined"
- source_labels: [__address__]
separator: ;
regex: (.*)
target_label: source
action: replace
replacement: OpenShift
remote_write:
- url: "http://unimon-sender:10098/monitoring/v1/metrics/send" // Endpoint unmion-sender
Отправка метрик в Apache Kafka напрямую (без задачи сбора данных).
Пример настроек:
management_app.kafka.metric.push.topic=collect.self-monitoring-metrics
management_app.kafka.metric.push.ssl=${management_app.ose.configmap.management_app.kafka_ssl_enabled}
management_app.kafka.metric.push.bootstrap_servers=${kafka.internal.bootstrap-servers}
collector_push.kafka.metric.push.topic=collect.self-monitoring-metrics
collector_push.kafka.metric.push.ssl=${collector_push.ose.configmap.collector_push.kafka_ssl_enabled}
collector_push.kafka.metric.push.bootstrap_servers=${kafka.internal.bootstrap-servers}
collector_pull.kafka.metric.push.topic=collect.self-monitoring-metrics
collector_pull.kafka.metric.push.ssl=${collector_pull.ose.configmap.collector_pull.kafka_ssl_enabled}
collector_pull.kafka.metric.push.bootstrap_servers=${kafka.internal.bootstrap-servers
Чтобы отключить функциональность отправки метрик напрямую в Kafka нужно изменить значения параметров на:
management_app.kafka.metric.push.enabled=false
collector_push.kafka.metric.push.enabled=false
collector_pull.kafka.metric.push.enabled=false
Настройка индексирования данных#
Топик для хранения метрик нужно проиндексировать с помощью сервиса Abyss. Документацию по этому процессу можно найти в документе «Руководство оператора» Abyss.
Чтобы панели мониторинга компонента Единый коллектор телеметрии работали в компоненте Indicator, необходимо при создании аналитического индекса выполнить следующие условия:
В разделе «Столбцы» после выполнения «Сгенерировать автоматически» изменить тип столбца value на double;
В разделе «Конфигурация» указать нужный проект, «Имя таблицы» collector_table_name, «Столбец времени» timestamp;
После создания индекса зайти в редактирование и в разделе «Безопасность» отметить «Данный ресурс является публичным» или добавить ниже пользователя (группу), которому необходимо предоставить доступ к данным.
Панели мониторинга в UI Indicator находятся в разделе «V.Инструменты эксплуатации»
Настройка взаимодействия c Indicator#
в Indicator настроить Datasource приложения с доступом к endpoint Management Application (подробнее в документации Indicator - Руководство оператора -> Руководство оператора приложения «Источники данных» -> Параметры настройки);
в Nginx Abyss прописать endpoint Management Application (подробнее в документации по установке Abyss)
Настройка логирования (компонент Журналирование (LOGA) в составе продукта Platform V Monitor (OPM))#
Логи приложений записываются в файл в формате JSON и в лог в обычном формате.
На файлы логов подписан fluent-bit sidecar, который отправляет логи дальше через pipeline.
Конфигурация fluent-bit, носит информативный характер:
[SERVICE]
Flush 1
Daemon Off
Parsers_File /fluent-bit/etc/parsers.conf
HTTP_Server On
HTTP_Listen 0.0.0.0
HTTP_PORT 8085
[INPUT]
Name tail
Tag file.tail
Path /fluent-bit/etc/logs/*.json
Mem_Buf_Limit 10MB
Skip_Long_Lines On
Refresh_Interval 2
Rotate_Wait 1
Read_from_Head Off
DB /fluent-bit/etc/logs/kube.db
Parser custom
[OUTPUT]
Name stdout
Match *
[OUTPUT]
Name http
Match file.tail
Host telemetry-collector-push-service
Port 8083
URI push/project/{projectName}/pipeline/{pipelineName}
Format json
, где OUTPUT - это настройка вывода логов до Apache Kafka через единый коллектор, {projectName} - имя проекта, используемого для сбора данных, {pipelineName} - имя pipeline, который будет обрабатывать логи.
Конфигурация logback.xml, носит информативный характер:
<configuration debug="true" scan="true" scanPeriod="30 seconds">
<property scope="context" resource="application.yml"/>
<appender name="JSON" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<fieldName>serverEventDatetime</fieldName>
<pattern>[UNIX_TIMESTAMP_AS_NUMBER]</pattern>
</timestamp>
<logLevel>
<fieldName>level</fieldName>
</logLevel>
<loggerName>
<fieldName>logger</fieldName>
</loggerName>
<threadName>
<fieldName>thread</fieldName>
</threadName>
<message/>
<stackTrace>
<fieldName>stackTrace</fieldName>
<throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
<maxDepthPerThrowable>30</maxDepthPerThrowable>
<maxLength>4096</maxLength>
<rootCauseFirst>true</rootCauseFirst>
</throwableConverter>
</stackTrace>
<mdc>
<excludeMdcKeyName>serverEventDatetime</excludeMdcKeyName>
<excludeMdcKeyName>level</excludeMdcKeyName>
<excludeMdcKeyName>logger</excludeMdcKeyName>
<excludeMdcKeyName>thread</excludeMdcKeyName>
</mdc>
</providers>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>/fluent-bit/etc/logs/log_%d{yyyy-MM-dd}_%i.json</fileNamePattern>
<maxFileSize>5MB</maxFileSize>
<maxHistory>5</maxHistory>
<totalSizeCap>50MB</totalSizeCap>
</rollingPolicy>
</appender>
<appender name="active_check_system_data_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>/fluent-bit/etc/logs/active_check_system_data_logs/log_%d{yyyy-MM-dd}_%i.log</fileNamePattern>
<maxFileSize>5MB</maxFileSize>
<maxHistory>20</maxHistory>
<totalSizeCap>100MB</totalSizeCap>
</rollingPolicy>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date %level [%thread] %logger{5} - %msg %n %xEx</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="JSON"/>
</root>
<logger name="active-check-system-data-logger" level="INFO">
<appender-ref ref="active_check_system_data_file"/>
</logger>
</configuration>
Pipeline для обработки всех логов
Конфигурация pipeline для импорта:
{
"quota": {
"limitTrafficPerMin": 10000000
},
"name": "self-logs-pipe",
"input": {
"typeName": "standard-http-api",
"config": "{}"
},
"processors": [
{
"typeName": "http-jackson-converter",
"config": "{\"httpConverterConfig\":{\"required\":false,\"headerToFieldEnrich\": [],\"idGenerationConfig\":{}}}",
"order": 1
},
{
"typeName": "pipeline-data-enrichment-processor",
"config": "{}",
"order": 2
},
{
"typeName": "json-flattener-processor",
"config": "{\"jsonFlattenerConfig\":{\"flattenMode\": \"KEEP_ARRAYS\", \"standardFlatteningForFieldsWithDots\": false}",
"order": 3
}
],
"outputs": [
{
"typeName": "kafka-output",
"config": "{\"kafkaProducerConfig\":{\"acks\": -1, \"topic\": \"collect.self-logs-pipe\", \"clientId\": \"cid-3\", \"lingerMs\": 0, \"batchSize\": 16384, \"maxBlockMs\": 60000, \"keySerializer\": \"org.apache.kafka.common.serialization.StringSerializer\", \"sslClientAuth\": false, \"requestTimeout\": 30000, \"deliveryTimeout\": 120000, \"valueSerializer\": \"org.springframework.kafka.support.serializer.JsonSerializer\", \"bootstrapServers\": \"KAFKA_ADDRESS_AND_PORT\", \"securityProtocol\": \"SSL\", \"idempotenceEnabled\": true, \"sslEnabledProtocols\": \"TLSv1.2\", \"maxInFlightRequestsPerConnection\": 5, \"sslEndpointIdentificationAlgorithm\": \"https\"}}"
}
]
}
, где LOGS_TOPIC_NAME - это имя топика Apache Kafka для записи логов (подробнее о создании топика в Руководстве оператора, инструкция поставляется в рамках компонента Abyss (LGDB) в составе продукта Platform V Monitor), KAFKA_ADDRESS_AND_PORT - список bootstrap серверов Apache Kafka Abyss (можно запросить у администратора PVM).
Pipeline для сбора системных логов активных проверок
Системные логи активных проверок записываются в отдельный файл и служат для контроля успешности проверок и времени их работы со стороны администратора PVM. Доставка таких логов выполняется с помощью pipeline, описанного ниже.
Конфигурация pipeline для импорта:
{
"quota": {
"limitTrafficPerMin": 10000000
},
"name": "self-active-check-system-pipe",
"input": {
"typeName": "standard-http-api",
"config": "{}"
},
"processors": [
{
"typeName": "http-jackson-converter",
"config": "{\"required\": false, \"headersToEnrich\": []}",
"order": 1
},
{
"typeName": "pipeline-data-enrichment-processor",
"config": "{}",
"order": 2
}
],
"outputs": [
{
"typeName": "kafka-output",
"config": "{\"kafkaProducerConfig\": {\"acks\": -1, \"topic\": \"ACTIVE_CHECK_LOGS_TOPIC_NAME\", \"clientId\": \"cid-4\", \"lingerMs\": 0, \"batchSize\": 16384, \"maxBlockMs\": 60000, \"keySerializer\": \"org.apache.kafka.common.serialization.StringSerializer\", \"sslClientAuth\": false, \"requestTimeout\": 30000, \"deliveryTimeout\": 120000, \"valueSerializer\": \"org.springframework.kafka.support.serializer.JsonSerializer\", \"bootstrapServers\": \"KAFKA_ADDRESS_AND_PORT\", \"securityProtocol\": \"SSL\", \"idempotenceEnabled\": true, \"sslEnabledProtocols\": \"TLSv1.2\", \"maxInFlightRequestsPerConnection\": 5, \"sslEndpointIdentificationAlgorithm\": \"https\"}}"
}
]
}
, где ACTIVE_CHECK_LOGS_TOPIC_NAME - это имя топика Apache Kafka для записи системных логов активных проверок (подробнее о создании топика в Руководстве оператора, инструкция поставляется в рамках компонента Abyss (LGDB) в составе продукта Platform V Monitor), KAFKA_ADDRESS_AND_PORT - список bootstrap серверов Apache Kafka Abyss (можно запросить у администратора PVM).
Настройка обработки ошибок в задачах сбора данных#
При работе задач сбора данных возможны ошибки. Ошибки могут возникать на различных этапах работы задачи сбора данных: инициализация, компоненты (input/processor/output), завершение. Для обработки таких ошибок можно сконфигурировать задачу, которую далее можно будет использовать в других задачах сбора данных.
В конфигурационном файле
telemetry-collector.management-app.confзадать настройки:
# Имя задачи для обработки ошибок
management_app.error.handling.pipeline.name=
# Проект задачи для обработки ошибок
management_app.error.handling.pipeline.project=
После установки Единого коллектора телеметрии создать задачу для обработки ошибок с именем и проектом, указанным в настройках из п.1.
При создании задачи для обработки ошибок рекомендуется указывать нулевые квоты, так как для них они не учитываются. На одну задачу сбора данных можно задать только одну задачу для обработки ошибок. Это значит, что нельзя настроить принципиально разные виды обработки ошибок для одной задачи сбора данных.
Пример задачи для обработки ошибок:


