Руководство по установке#

В руководстве приведены инструкции по установке компонента «Сбор и анализ метрик» (GATM).

Термины и определения#

Термин/аббревиатура

Определение

Платформа

Платформа оркестрации приложений со средствами автоматизации и управления на основе политик, например, Kubernetes

Istio SE

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

Pod / «kind: Pod»

Набор контейнеров внутри узла кластера Kubernetes

Statefullset / «kind: Statefullset»

Статистический набор инструкций для запуска приложения в Kubernetes

Deployment / «kind: Deployment»

Набор инструкций для запуска приложения в Kubernetes

Граничный прокси / IGEG / egressgateway

Компонент Граничный прокси

Контрольная панель

Проект, где запущены управляющие приложения Synapse Service Mesh (компонент POLM)

Делиметр

Символ,используемый для разделения слов (или частей слов) в наименовании тега метрики

GATM

Программный компонент «Сбор и анализ метрик» (GATM)

KACM

Компонент «Управление ключами и сертификатами» из состава Synapse Service Mesh, отвечающий за создание и ротацию x509 ключевых пар в среде Kubernetes

SSM

Platform V Synapse Service Mesh — программный продукт на базе Istio SE, обеспечивающий возможность создания сервисной сети поверх Платформенной в Kubernetes

SYOP

Программный компонент Synapse Operator (SYOP)

RHSM

Red Hat Service Mesh — настраиваемая сервисная сеть, служащая для обеспечения безопасности контейнеров в кластере Kubernetes

KFGT / Kafka шлюз

Компонент Kafka шлюз

Span

Запись операции, выполняемой одним сервисом

Сервис трассировки / TRAS

Компонент Сервис трассировки

Trace / трассировка

Цепочка единичных операций (span), представляющих часть потока выполнения запроса. Тrace позволяет визуализировать активность запроса при его перемещении по системе и является самостоятельной единицей трассировки.

VISL

Компонент Visual SSM

Системные требования#

Настройки безопасности окружения и перечень платформенных (дополнительных внешних) продуктов, используемых для установки, настройки и контроля в конечной информационной системе (далее — ИС), выбираются клиентом при разработке конечной ИС, исходя из характера обрабатываемой в ней информации и иных требований информационной безопасности (далее — ИБ), предъявляемых к ней.

Для установки модулей компонента GATM в среде контейнеризации Kubernetes – рекомендуется устанавливать приложения в рамках одного Pod. Приложения компонента не требуют дополнительной настройки окружения. Все настройки идут на уровне кластера в рамках среды контейнеризации.

Для возможности ручной установки, убедиться, что в рамках персонального компьютера установлен Helm версии не ниже 3.0.

Рекомендуемые настройки безопасности окружения приведены в разделе «Подготовка окружения» данного документа.

Системное программное обеспечение#

Ниже представлены категории системного программного обеспечения (далее — ПО), которые обязательны или не обязательны для установки, настройки, контроля и функционирования компонента. В каждой категории перечислены все поддерживаемые продукты/компоненты. Клиенту необходимо выбрать один из вариантов в каждой категории, исходя из условий использования конечной ИС.

Обязательность установки (да/нет)*

Наименование ПО**

Описание

Да

Alt Linux SP8 10 или
Platform V SberLinux OS Server (SLO) 8.7 (Операционная система (INST))

Операционная система

Да

Docker CE 19.03.14 и выше

Средство контейнеризации

Да

Platform V DropApp (K8S) 1.3 и выше (K8S Core (K8SC)) или
Kubernetes 1.19 и выше или
Red Hat OpenShift 4.6 и выше

Среда контейнеризации

Да

Nexus-Public 3.42.0

Сервис централизованного хранения репозиториев артефактов (хранилище артефактов)

Да

GitLab Community Edition 15.7 и выше

Сервис централизованного хранения репозиториев исходного кода

Нет

Istio 1.6 и выше или
Platform V Synapse Service Mesh (SSM) 4.7 и выше (Управление политиками (POLM), Сервисный прокси (SVPX), Граничный прокси (IGEG), Service Mesh DevOps Lib (SMDL), Визуализация (VISL), Сервис трасировки (TRAS))

Сервис интеграции и оркестрации микросервисов в облаке

Нет

HashiCorp Vault 1.10 и выше

Система хранения и распространения secrets

Нет

Prometheus 2.37 и выше

Система мониторинга

Нет

Helm 3 и выше

Менеджер пакетов

Нет

kubectl CLI 1.20.5 и выше

Интерфейс командной строки для взаимодействия с кластером

Нет

Apache Kafka 3.0.0 и выше

Система хранение данных в формате плоского «JSON»

Нет

Platform V Synapse Enterprise Integration (SEI) 4.5 и выше (kafka шлюз (KFGT))

Шлюз для взаимодействия с Kafka

Нет

Platform V Synapse Service Mesh (SSM) 1.0 и выше (synapse operator (SYOP))

Оператор по установке приложений

Нет

Platform V Synapse Service Mesh (SSM) 1.0 и выше (KACM)

Менеджер по работе с сертификатами

Примечание:

*

  • Да — ПО, необходимое для функционирования сервиса, без установки которого не гарантирована работоспособность.

  • Нет — ПО, необязательное для функционирования сервиса, установка которого не влияет на работоспособность основных функций.

** Минимальная версии программного обеспечения, на которой гарантируется работоспособность. Использование версий выше заявленной возможно до потери обратной совместимости.

Аппаратные требования#

Для установки компонента требуется следующая рекомендованная конфигурация аппаратного обеспечения:

Название модуля

ПО среды функционирования

Количество

Список контейнеров

CPU Request, m

CPU Limit, m

Memory Request, Mi

Memory Limit, Mi

Горизонтальное масштабирование

Приложение „Agent“

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-metrics-agent

300

500

300

500

Да

istio-proxy

300

300

300

300

Да

Приложение Kafka „adapter“

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-metrics-adapter

300

2000

300

1500

Да

istio-proxy

300

300

300

300

Да

Приложение Event exporter

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-metrics-event-exporter

300

300

300

300

Да

istio-proxy

100

200

200

300

Да

Приложение Select

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-metrics-select

300

300

300

300

Да

istio-proxy

100

200

200

300

Да

Приложение Insert

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-metrics-insert

300

300

300

300

Да

istio-proxy

100

200

200

300

Да

Приложение „Storage“

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-metrics-storage

100

1000

300

5000

Да

istio-proxy

100

200

200

300

Да

Приложение Alert

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-metrics-alert

300

300

300

300

Да

synapse-metrics-agent

300

300

300

300

Да

istio-proxy

100

200

200

300

Да

Приложение AlertManager

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-metrics-alertmanager

300

300

300

300

Да

istio-proxy

100

300

200

300

Да

Приложение „Agent“ (logs)

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-logs-agent

100

1400

100

400

Да

istio-proxy

50

1000

50

1000

Да

Приложение Insert (logs)

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-logs-insert

300

600

300

600

Да

istio-proxy

1000

1000

2000

3000

Да

Приложение Select (logs)

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-logs-select

300

300

300

300

Да

istio-proxy

100

200

200

300

Да

Приложение „Storage“ (logs)

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-logs-storage

300

300

300

300

Да

istio-proxy

100

400

200

400

Да

Приложение Sender (logs)

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-logs-sender

300

300

300

300

Да

istio-proxy

100

200

200

300

Да

Приложение Insert (trace)

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-trace-insert

1000

1000

1000

1000

Да

istio-proxy

100

200

200

300

Да

Приложение Select (trace)

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-trace-select

300

300

300

300

Да

istio-proxy

100

200

200

300

Да

Приложение „Storage“ (trace)

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-trace-storage

300

300

300

1000

Да

istio-proxy

100

200

200

300

Да

Приложение Proxy (trace)

Kubernetes/Platform V DropApp (опционально OpenShift NS)

1 pod

synapse-trace-proxy

300

300

300

300

Да

istio-proxy

100

200

200

300

Да

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

Состав дистрибутива#

Компонент GATM предоставляет 2 архива:

Элементы поставки:

  • gatm-bin

Элемент дистрибутива

Описание

./package/bh/gatm_agent

Приложение по сбору метрик

./package/bh/gatm_alert

Приложение по агрегации метрик

./package/bh/gatm_insert

Приложение по добавлению метрик

./package/bh/gatm_select

Приложение по запросу метрик

./package/bh/gatm_storage

Приложение по хранению метрик

./package/bh/prometheus-kafka-adapter

Приложение по передаче метрик в Kafka метрик

./package/bh/gatm_event_exporter

Приложение по сбору событий (event)

./package/bh/gatm-tracing-collector

Приложение по добавлению трассировок и перевод формата с zipkin в jeager

./package/bh/gatm-tracing-query

Приложение по запросу трассировок

./package/bh/gatm-tracing-proxy-storage

Приложение по корректному запросу к репликам „storage“ трассировок

./package/bh/gatm-tracing-remote-storage

Приложение по хранению трассировок

./package/bh/gatm_logs_agent

Приложение по сбору логов

./package/bh/gatm_lselect

Приложение по запросу логов

./package/bh/gatm_linsert

Приложение по добавлению логов

./package/bh/gatm_lstorage

Приложение по хранению логов

./package/bh/synapse_sender

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

./package/bh/gatm_alertmanager

Приложение по работе с alert сообщениями

  • gatm-cfg

Конфигурации для установки.

Элемент дистрибутива

Описание

./package/conf/helm/application/gatm/*

Базовые конфигурации по установке компонента GATM

./package/conf/helm/application/ext-gatm/*

Расширенные конфигурации по установке компонента GATM

./package/conf/helm/application/ext-sender/*

Базовые конфигурации по установке приложения synapse sender компонента GATM

./package/conf/helm/application/ext-sender-job/*

Базовые конфигурации по установке приложения synapse sender (планировщик заданий) компонента GATM

Внимание! В рамках конфигураций чарт gatm предназначен для установки посредством SMDL. Чарты с префиксом ext- реализованы для ручной установки, либо установки посредством SYOP (с деталями установки через данный компонент можно ознакомиться в рамках документации SYOP).

При необходимости, в рамках реализации транспортных сертификатов, реализована опция по публикации конфигураций компонента KACM, в рамках секций стендозависимых параметров (certManager.apiVersion, для использования компонента необходимо указать группу «security.synapse.sber»). Выпускаемые сертификаты реализуются посредством публикации «kind: Secret». Более подробно можно ознакомиться в рамках документации KACM.

Выбор способа установки#

В зависимости от способа развертывания сервиса воспользуйтесь одной из инструкций:

  • целевая автоматизированная установка сервиса с использованием компонента SMDL, «ClientUnpacker»

  • опциональная ручная установка сервиса

Подготовка окружения#

Для выполнения установки программного компонента GATM должны быть выполнены следующие условия:

  1. Развернут и настроен кластер «Kubernetes» версии 1.19 или выше в соответствии с требованиями, предъявляемыми к Платформе.

  2. В кластере создан проект (namespace), в котором установлена контрольная панель.

  3. В проекте создана учетная запись с правами на get, list, watch ресурсов Pod и Namespace, при опциональной установке компонента event exporter необходимо также реализовать ролевую модель на get, list, watch к ресурсу «kind: Event».

  4. В проекте имеются свободные ресурсы по limits и requests не менее, чем зарезервировано в конфигурационных артефактах.

  5. В проект добавлен секрет для загрузки Docker-образов из целевого Docker-репозитория.

  6. В кластере создан проект (namespace), или используется ранее реализованный пользовательский проект, где будут реализованы компонент GATM, так же необходимо будет подключить указанный проект к контрольной панели.

  7. В рамках реализованного кластера созданы необходимые роли («kind: ClusterRole») и привязки к роли в рамках проекта («kind: RoleBinding»), в рамках ролевой модели компонента GATM.

  8. Для установки через консоль на рабочем месте должен быть установлен клиент Kubectl (CLI - command-line interface).

1. Создать директорию установки#

  • „Agent“ (директория - gatm_agent)

  • „Storage“ (директория - gatm_storage)

  • Insert (директория - gatm_insert)

  • Select (директория - gatm_select)

  • Alert (директория - gatm_alert)

  • Event exporter (директория - gatm_event_exporter)

  • Kafka „adapter“ (директория - gatm_kafka_adapter)

  • „Agent“ „Logs“ (директория - gatm_logs_agent)

  • Select „Logs“ (директория - gatm_lselect)

  • „Storage“ „Logs“ (директория - gatm_lstorage)

  • Insert „Logs“ (директория - gatm_linsert)

  • Select Trace (директория - gatm_tselect)

  • Insert Trace (директория - gatm_tinsert)

  • Proxy Trace (директория - gatm_tproxy)

  • „Storage“ Trace (директория - gatm_tstorage)

  • AlertManager (директория - gatm_alertmanager)

  • Sender (директория - gatm_sender)

Пререквизиты:

  • Базовый образ для сборки docker image загружен в docker registry

Ручная установка:

Публикация базового образа:

  • Загрузить образ из файла командой docker load

  • Поставить тег полученному образу и залить в docker registry (командами docker tag, docker push)

В рамках примера пошагово будет описан процесс сборки образа и загрузка его в registry, аналогичные действия необходимо произвести по всем компонентам.

Шаг

Действия

Описание

Создать директорию для установки

На компьютере, с которого будет производиться установка, создайте папку, например, «synapse-gatm»

Разархивировать файлы

Распакуйте в созданную папку архив с конфигурационными артефактами компонента GATM

Вставить базовый образ в рамках файла Dockerfile

Пройти в каталог «docker/gatm_agent/Dockerfile», открыть и отредактировать файл, в рамках секции «FROM» подставить ссылку на базовый образ

Сохранить и закрыть файл

Авторизуйтесь в Docker Registry

Выполните команду, находясь в корне распакованного архива: docker login $Registry

$Registry — это host Docker реестра. Необходимо ввести логин с паролем для авторизации

Соберите Docker образ для установки приложения

Выполните команду, находясь в корне распакованного архива: docker build . -f docker/gatm_agent/Dockerfile -t $registry_tag:$version

$registry_tag — полный путь, где будет реализован образ, $version — версия образа. Пример заполнения двух параметров «registry/dev/gatm-agent:0.0.1»

Загрузите полученный Docker образ в Registry

Выполните команду, находясь в корне распакованного архива: docker push $registry_tag:$version

Сохраните полученный sha256 образа

При выполнении шага «Загрузите полученный Docker образ в Registry» в терминале будет информация о sha256 загруженного образа, пример вывода терминала $version: digest: sha256:97ded057*** size: 2215. Необходимо скопировать sha256 (пример «sha256:97ded057***»)

Сохраните указанное значение в переменную $sha256

Тем самым получаем image приложений - «IMAGE_$component=$registry_tag@$sha256»

Автоматическая установка:

Для сборки образа рекомендуем использовать инструмент автоматической сборки образа, компонента SMDL, «ClientUnpacker» (более подробно о настройке и запуске можно ознакомиться в документации компонента «SMDL», «Руководство оператора»), результатом исполнения будет собранный образ приложений.

Необходимо обновить параметр из JSON «teamProducts.json» (при реализации автоматической установки также необходимо провести актуализацию используемых образов по интеграциям).

        {
          "name": "Сбор и анализ метрик",
          "code": "GATM",
          "user": "****",
          "parts": [
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm_agent}",
                  "deploymentUnit": "gatm_agent"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm_agent@sha256:(?<hash>\\w+)"      # регулярное выражение для поиска в конфигурациях развертывания места с указанием image компонента
                }
              ]
            },
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm_kafka_adapter}",
                  "deploymentUnit": "gatm_kafka_adapter"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm_kafka_adapter@sha256:(?<hash>\\w+)"
                }
              ]
            },
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm_alert}",
                  "deploymentUnit": "gatm_alert"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm_alert@sha256:(?<hash>\\w+)"
                }
              ]
            },
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm_insert}",
                  "deploymentUnit": "gatm_insert"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm_insert@sha256:(?<hash>\\w+)"
                }
              ]
            },
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm_select}",
                  "deploymentUnit": "gatm_select"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm_select@sha256:(?<hash>\\w+)"
                }
              ]
            },
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm_storage}",
                  "deploymentUnit": "gatm_storage"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm_storage@sha256:(?<hash>\\w+)"
                }
              ],
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm_lselect}",
                  "deploymentUnit": "gatm_lselect"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm_lselect@sha256:(?<hash>\\w+)"
                }
              ],
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm_sender}",
                  "deploymentUnit": "gatm_sender"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm_sender@sha256:(?<hash>\\w+)"
                }
              ],
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm_alertmanager}",
                  "deploymentUnit": "gatm_alertmanager"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm_alertmanager@sha256:(?<hash>\\w+)"
                }
              ],
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm_linsert}",
                  "deploymentUnit": "gatm_linsert"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm_linsert@sha256:(?<hash>\\w+)"
                }
              ],
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm_lstorage}",
                  "deploymentUnit": "gatm_lstorage"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm_lstorage@sha256:(?<hash>\\w+)"
                }
              ],
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm-tracing-collector}",
                  "deploymentUnit": "gatm-tracing-collector"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm-tracing-collector@sha256:(?<hash>\\w+)"
                }
              ],
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm-tracing-query}",
                  "deploymentUnit": "gatm-tracing-query"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm-tracing-query@sha256:(?<hash>\\w+)"
                }
              ],
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm-tracing-remote-storage}",
                  "deploymentUnit": "gatm-tracing-remote-storage"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm-tracing-remote-storage@sha256:(?<hash>\\w+)"
                }
              ],
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm-tracing-proxy-storage}",
                  "deploymentUnit": "gatm-tracing-proxy-storage"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm-tracing-proxy-storage@sha256:(?<hash>\\w+)"
                }
              ]
            },
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm_event_exporter}",
                  "deploymentUnit": "gatm_event_exporter"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm_event_exporter@sha256:(?<hash>\\w+)"
                }
              ]
            },
            {
              "docker": [
                {
                  "baseImageLink": "${базовый образ для сборки приложения}",        # пример "*/alt-sp8-golang:1.22
                  "version": "${версия компонента gatm_logs_agent}",
                  "deploymentUnit": "gatm_logs_agent"
                }
              ],
              "imageLinkMapping": [
                {
                  "regex": "(?<=(\\{\\{|\\$\\{)\\s?\\.Values\\.registry\\s?(\\}){1,2})/(\\{\\{|\\$\\{)\\s?\\.Values\\.registry_path\\s?(\\}){1,2}/gatm_logs_agent@sha256:(?<hash>\\w+)"
                }
              ]
            },
            {
              "artifactId": "gatm-cfg",
              "imageLinkMapping": [
                {
                  "string": "/{{ .Values.registry_path_igegose }}/proxyv2@sha256:***",
                  "replace": "/openshift/proxyv2-rhel8@sha256:***"
                },
                {
                  "string": "/{{ .Values.registry_path_igegse117 }}/proxyv2@sha256:***",
                  "replace": "/synapse/polm/proxyv2@sha256:***"
                },
                {
                  "string": "/{{ .Values.registry_path_igegse119 }}/proxyv2@sha256:***",
                  "replace": "/synapse/polm/proxyv2@sha256:***"
                },
                {
                  "string": "{{ .Values.registry }}",         # при необходимости использовать .Values.global.registry
                  "replace": "{{ $registry }}"
                }
              ]
            }
          ],
  1. Запустить инструмент автоматической сборки - компонент SMDL, «ClientUnpacker» (более подробно о настройке и запуске можно ознакомиться в документации компонента «SMDL», «Руководство оператора»), результатом исполнения будут собранные артефакты для установки приложения (на email сотрудника, который запустил job, придет таблица со ссылками на артефакты).

  2. Провести проверку корректной подстановки образов по шаблону, указанному в шаге 3. В таблице, появившейся после запуска job «ClientUnpacker», необходимо загрузить артефакты, которые относятся к компоненту GATM (позиция «product GATM_agent», ссылка на дистрибутив располагается в секции «distribUrl»).

Проверка релевантна только для чарта с наименованием gatm.

### в рамках приложения gatm_agent располагаются общие конфигурации по установке
### путь к конфигурационному файлу «package/conf/helm/application/gatm/templates/statefulset.yaml»
### произвести поиск по ключу «image»
...
          envFrom:
            - configMapRef:
                name: synapse-kafka-adapter-env
          image: '{{ $registry }}/ci90000017_synapse/ci90000017_synapse/gatm/gatm_kafka_adapter@sha256:****' # пример корректной подстановки образа для компонента gatm_kafka_adapter
...
            - name: synapse-metrics-data
              mountPath: /data
          terminationMessagePolicy: File
          image: '{{ $registry }}/ci90000017_synapse/ci90000017_synapse/gatm/gatm_agent@sha256:****'         # пример корректной подстановки образа для компонента gatm_kafka_adapter
...

Аналогичные проверки необходимо сделать по проверке корректной подстановки образов в рамках «kind: Deployment».

### путь к конфигурационному файлу «package/conf/helm/application/gatm/templates/deployment-egress.yaml»
### произвести поиск по ключу «image»
...
          image: */igeg/proxyv2:${version istio 1.6}                # пример корректной подстановки образа для компонента IGEG (версия для работоспособности с контрольной панелью RHSM)
...
          image: */igeg/proxyv2:${version istio 1.20}               # пример корректной подстановки образа для компонента IGEG (версия для работоспособности с контрольной панелью POLM)
...
          image: */igeg/proxyv2:${version istio 1.17}               # пример корректной подстановки образа для компонента IGEG (версия для работоспособности с контрольной панелью POLM)
...
          image: */igeg/proxyv2:${version istio 1.19}               # пример корректной подстановки образа для компонента IGEG (версия для работоспособности с контрольной панелью POLM)
...

В рамках конфигурационных файлов предусмотрена опция организации автоматизации по стендозависимым параметрам в рамках директории «conf.config.parameters», при наличии автоматизированных инструментов.

gatm_agent.all.conf

# пример параметра 
synapse-metrics-all.k8s.istio.control-plane-project=istio-system

gatm_agent.istio.all.conf

# пример параметра 
synapse-metrics.k8s.istio.control-plane-project=istio-system

2. Подключиться к проекту#

  • Через CLI Kubectl

Шаг

Действия

Описание

Выполнить вход в Kubernetes

Загрузите «kubeConfig» от вашего «ServiceAccount» с правами администратора. Заведите переменную KUBECONFIG=~/.kube/config, где располагается выгруженная конфигурация.

Перейти в «namespace», где будет реализован компонент GATM

Введите команду:
kubectl config set-context --current --namespace=<имя namespace>

3. Установить необходимый перечень ресурсов#

В рамках предоставляемого дистрибутива реализованы все необходимые ресурсы для успешного функционирования компонента GATM. Ресурсы в рамках ролевой модели – «kind: ClusterRole»/«kind: RoleBinding»/«kind: ServiceAccount».

Если будет производиться установка посредством чартов с префиксом ext-, то все необходимые ресурсы будут в рамках чарта, предварительные шаги по установке ресурсов избыточны.

  • Через CLI Kubectl

Шаг

Действия

Описание

Добавить необходимый перечень ресурсов

В консоли выполнить команды, которые описаны в данном разделе ниже

Перед запуском заполните параметры, следующей командой:

GATM_NAMESPACE=<имя namespace>
IMAGE_PULL_SECRETS=<имя секрета для скачивания образа>

«kind: ServiceAccount»

Команда:

kubectl apply -n $GATM_NAMESPACE -f - <<EOF
kind: ServiceAccount
apiVersion: v1
metadata:
  name: synapse-metrics-sa
imagePullSecrets:
  - name: $IMAGE_PULL_SECRETS
--- # при установке event exporter
kind: ServiceAccount
apiVersion: v1
metadata:
  name: synapse-metrics-event-exporter
imagePullSecrets:
  - name: $IMAGE_PULL_SECRETS
EOF

Ожидаемый результат:

serviceaccount/synapse-metrics-sa created
serviceaccount/synapse-metrics-event-exporter created

«kind: ClusterRole»

Команда:

kubectl apply -n ${GATM_NAMESPACE} -f - <<EOF
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: synapse-metrics-agent-role
rules:
  - verbs:
      - get
      - list
      - watch
    apiGroups:
      - ''
    resources:
      - pods
      - services           # при реализации сбора прикладных метрик
      - endpoints          # при реализации сбора прикладных метрик
      - namespaces
--- # при установке event exporter
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: synapse-metrics-event-role
rules:
  - verbs:
      - get
      - list
      - watch
    apiGroups:
      - ''
    resources:
      - events
      - pods           # при необходимости использовать функционал по мониторингу конфигураций «kind: Pod»
EOF

Ожидаемый результат:

clusterrole.rbac.authorization.k8s.io/synapse-metrics-agent-role created
clusterrole.rbac.authorization.k8s.io/synapse-metrics-event-role created

«kind: RoleBinding»/«kind: ClusterRoleBinding»

Команда:

kubectl apply -n $GATM_NAMESPACE -f - <<EOF
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: synapse-metrics-agent-rb
  namespace: $GATM_NAMESPACE
subjects:
  - kind: ServiceAccount
    name: synapse-metrics-sa
    namespace: $GATM_NAMESPACE
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: synapse-metrics-agent-role
--- # при установке event exporter
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: synapse-metrics-event-rb
  namespace: $GATM_NAMESPACE
subjects:
  - kind: ServiceAccount
    name: synapse-metrics-event-exporter
    namespace: $GATM_NAMESPACE
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: synapse-metrics-event-role
EOF

Ожидаемый результат:

rolebinding.rbac.authorization.k8s.io/synapse-metrics-agent-rb created
rolebinding.rbac.authorization.k8s.io/synapse-metrics-event-rb created

Привязка роли к приложению GATM для успешного запроса к системным метрикам кластера Openshift:

«kind: RoleBinding»/«kind: ClusterRoleBinding»

Команда:

kubectl apply -n $GATM_NAMESPACE -f - <<EOF
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: synapse-metrics-agent-rb
  namespace: openshift-monitoring
subjects:
  - kind: ServiceAccount
    name: synapse-metrics-sa
    namespace: $GATM_NAMESPACE
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: synapse-metrics-agent-role
EOF

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

Пример настройки для OpenShift:

kind: Deployment
apiVersion: apps/v1
metadata:
  name: federate
  namespace: openshift-monitoring
...
spec:
  replicas: 2
  selector:
    matchLabels:
      app: federate
  template:
    metadata:
      labels:
        app: federate
    spec:
      nodeSelector:
        type: monitoring
      terminationGracePeriodSeconds: 30
      containers:
        - resources:
            requests:
              cpu: 50m
              memory: 50Mi
          name: federate-proxy
          args:
            - >-
              -openshift-sar={"resource": "namespaces", "verb": "get",
              "resourceName": "openshift-monitoring", "namespace":
              "openshift-monitoring"}

При указанных настройках ServiceAccount GATM необходимы привилегии на «get» ресурса «namespace», в рамках проекта «openshift-monitoring».

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

Установка#

Предусловия#

Первоначально необходимо определиться со схемой развертывания компонента:

  1. Определить набор компонент, необходимый для установки;

  2. Определить необходимость установки серверной части в рамках трассировок и логов;

  3. Выбрать сервер для хранения метрик (Kafka, серверная часть GATM, внешний сервер формата Prometheus);

  4. Определить точку сборка метрик (централизованный сбор метрик с ServiceMesh, установка в пользовательский namespace).

Рассмотрим схемы по установке.

Метрики.

Screenshot Схема. Схема развертывания сбора метрик из пользовательского namespace. Данная схема является концептуальной для визуализации установки

Screenshot Схема. Схема развертывания установки в рамках Kubernetes (с установкой event exporter). Данная схема является концептуальной для визуализации установки

Screenshot Схема. Схема развертывания сбора метрик из контрольной панели RHSM. Данная схема является концептуальной для визуализации установки

Screenshot Схема. Схема развертывания сбора метрик из контрольной панели. Данная схема является концептуальной для визуализации установки

Используется аналогичная схема при реализации сбора метрик с namespace «istio-operator», для успешного сбора необходимо реализовать сетевую доступность из проекта GATM к проекту «istio-operator», также убедиться что при установке «istio-operator» был реализован command «- „–monitoring-port=15014“» в рамках «kind: Deployment».

Трассировки и логи.

Screenshot

Схема. Схема развертывания сбора трассировок, устарела (проект synapse-metrics-system). Данная схема является концептуальной для визуализации установки

Screenshot

Схема. Схема развертывания сбора трассировок, устарела (проект synapse-metrics-system). Данная схема является концептуальной для визуализации установки

Screenshot

Схема. Схема развертывания сбора логов (проект synapse-metrics-system). Данная схема является концептуальной для визуализации установки

Реализация интеграционного журнала, при использовании конфигураций развертывания «ext-gatm-sender» и «ext-gatm-sender-job».

Screenshot

Схема. Интеграционный журнал с функцией переотправки сообщений

Серверные части по метрикам, трассировкам и логам могут быть установлены в рамках одного проекта и опционально настроено входящее взаимодействие через Ingressgateway.

При использовании средства визуализации VISL необходимо учесть серверные части GATM при установке, более подробно описано в рамках документации компонента VISL, документ «Руководство по установке», раздел «Установка».

При использовании приложения TRAS как источник трассировок, необходимо указать адрес серверной части GATM по сбору трассировок, при установке компонента TRAS, более подробно описано в рамках документации компонента TRAS, документ «Руководство по установке», раздел «Состав дистрибутива» (Пример и описание параметров файла values).

Установка приложения „Agent“ (logs) производится пользователем.

Использование сертификатов с приложением «vault»#

Использование KV (key value) хранилища для сертификатов

Необходимо предварительно реализовать ряд работ по настройке интеграционных взаимодействий vault:

  1. Реализовать хранилище секретов (vault), где предварительно создать сертификаты и ключи:

  • KAFKA-BROKER-CRT - опциональные сертификаты и ключ для успешного взаимодействия c Kafka (ca-bandle.pem/tls.pem/tls.key), про правила формирования необходимо уточнить в документации используемой Kafka

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

  • prometheus-metrics - опциональный сертификата для организации входящего трафика (запись) по записи метрик или записи метрик в хранилище типа Prometheus (metrics-ca-chain.pem/metrics.crt/metrics.key)

  • prometheus-metrics-select - опциональный сертификата для организации входящего трафика (чтение) метрик (metrics-select-ca-chain.pem/metrics-select.crt/metrics-select.key)

  • logs-insert - опциональный сертификата для организации входящего трафика (запись) по записи логов в хранилище GATM (logs-insert-ca-chain.pem/logs-insert.crt/logs-insert.key)

  • logs-select - опциональный сертификата для организации входящего трафика (чтение) логов (logs-select-ca-chain.pem/logs-select.crt/logs-select.key)

  • trace-insert - опциональный сертификата для организации входящего трафика (запись) по записи трассировок в хранилище GATM (trace-insert-ca-chain.pem/trace-insert.crt/trace-insert.key)

  • trace-select - опциональный сертификата для организации входящего трафика (чтение) трассировок (trace-select-ca-chain.pem/trace-select.crt/trace-select.key)

Screenshot Пример реализации секретов в системе vault.

Обращаем внимание, что используется «version: 1», в рамках создания хранилища секретов (kv).

Screenshot Пример секрета для интеграции с Kafka.

Использование PKI engine хранилища для сертификатов

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

ВАЖНО! При реализации директории, в рамках которой будет организовано хранилище PKI engine, необходимо придерживаться следующего пути /, где:

  • - значение аннотации vault в рамках приложения «vault.hashicorp.com/namespace»

  • - путь к каталогу, где будет реализован PKI engine, также необходимо указывать метод запроса, например «issue» и наименование роли, в рамках которой будет реализован сертификат

Пример итогового пути к PKI engine будет выглядеть следующим образом - «DEV/PKI/issue/role».

Реализация в рамках конфигурационных файлов, на примере генерации сертификата для Kafka:

{{`{{- with secret`}} "{{ .Values.vault.secmanNamespace }}/{{ .Values.vault.pki_engine.egress.kafka.pki_path }}" "common_name={{ .Values.vault.pki_engine.egress.kafka.common_name }}" {{`-}} {{ .Data.certificate }} {{- end }}`}}

При выпуске сертификатов идет обращение в рамках «.Data» PKI engine:

  • Корневой сертификат - параметризуется в рамках стендозависимых параметров vault.pki_engine.(egress/ingress).*.data.ca.name, с опцией проводить работу с цепочкой сертификатов.

  • Клиентский, либо серверный сертификат -

  • Приватный ключ -

Использование указанной функции производится при установке приложения и активации стендозависимых параметров:

vault:
  pki_engine:
    enabled: 'false'                     # флаг, указывающий на использование PKI engine в рамках хранения сертификатов (общий, при указании 'false' все сертификаты будут использоваться из KV version 1)
    egress:                              # группа сертификатов использующиеся для исходящего трафика
      kafka:                             # группа параметров для сертификата по интеграции с Kafka
        pki_enabled: 'false'             # локальный флаг использования PKI engine
        pki_path: PKI/issue/pki          # частичный пусть к PKI engine путь формируется по структуре ({{ .Values.vault.secmanNamespace }}/{{ .Values.vault.pki_engine.egress.kafka.pki_path }}), также необходимо указывать метод запроса, например «issue» и наименование роли в рамках которой будет реализован сертификат
        common_name: kafka.host          # параметр в рамках указывающий «common_name» выпускаемого сертификата
        data:                            # группа параметров для возможности изменения параметров по корневому сертификату
          ca:
            name: ca_chain               # имя корневого сертификата в рамках PKI engine, пример реализации по умолчанию «{{ .Data.ca_chain }}»
            range: 'false'               # флаг использования «range» для реализации цепочки сертификатов ({{ range $k, $v := .Data.ca_chain }} {{- $v }} {{- end -}})
      prometheus:                        # группа параметров для сертификата по интеграции с Prometheus (при использовании)
        pki_enabled: 'false'
        pki_path: PKI/issue/pki
        common_name: prometheus.host
        data:
          ca:
            name: ca_chain
            range: 'false'
      monitoring:                        # группа параметров для сертификата по интеграции с сервером системных метрик (при использовании сертификатов из vault)
        pki_enabled: 'false'
        pki_path: PKI/issue/pki
        common_name: federate.host
        data:
          ca:
            name: issuing_ca
            range: 'false'
    ingress:                             # группа сертификатов использующиеся для входящего трафика (при использовании)
      metrics:                           # группа сертификатов для реализации входящего трафика по метрикам (при использовании)
        insert:                          # сертификаты для реализации входящего трафика для записи метрик (при использовании)
          pki_enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-metrics-insert.host
          data:
            ca:
              name: ca_chain
              range: 'false'
        select:                          # сертификаты для реализации входящего трафика для чтения метрик (при использовании)
          pki_enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-metrics-select.host
          data:
            ca:
              name: ca_chain
              range: 'false'
      traces:                            # группа сертификатов для реализации входящего трафика по трассировкам (при использовании)
        insert:                          # сертификаты для реализации входящего трафика для записи трассировок (при использовании)
          pki_enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-trace-insert.host
          data:
            ca:
              name: ca_chain
              range: 'false'
        select:                          # сертификаты для реализации входящего трафика для чтения трассировок (при использовании)
          pki_enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-trace-select.host
          data:
            ca:
              name: ca_chain
              range: 'false'
      logs:                              # группа сертификатов для реализации входящего трафика по логам (при использовании)
        insert:                          # сертификаты для реализации входящего трафика для записи логов (при использовании)
          pki_enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-logs-insert.host
          data:
            ca:
              name: ca_chain
              range: 'false'
        select:                          # сертификаты для реализации входящего трафика для чтения логов (при использовании)
          pki_enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-logs-select.host
          data:
            ca:
              name: ca_chain
              range: 'false'

Реализация сертификатов

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

  • наименование сертификата prometheus-metrics - synapse-metrics-insert.

  • наименование сертификата prometheus-metrics-select - synapse-metrics-select.

  • наименование сертификата logs-insert - synapse-logs-insert.

  • наименование сертификата logs-select - synapse-logs-select.

  • наименование сертификата trace-insert - synapse-trace-insert.

  • наименование сертификата trace-select - synapse-trace-select.

Где:

  • - стендозависимый параметр, который унифицирует адрес (если предусматривается одна установка в рамках кластера, то параметр устанавливается пустым)

  • - стендозависимый параметр, конкретизирует домен кластера для организации внешнего запроса

Пример адреса - synapse-logs-insert.apps.ocp.cluster.solution.ru

Использование сертификатов с использованием «kind: Secret»#

Актуально в рамках использования чарта «gatm».

Если отсутствует возможность использовать внешнюю систему хранения секретов vault, то необходимо будет реализовать ряд действий после установки компонентов, а именно, реализовать конфигурации «kind: Secret» и произвести процедуру монтирования сертификатов в рамках «kind: Deployment» приложений Ingressgateway/Egressgateway.

Примеры реализации «kind: Secret» для Egressgateway:

kind: Secret
apiVersion: v1
metadata:
  name: kafka
data:
  tengri_ca.cer: *
  tengri.pem: *
  tengri.key: *
type: Opaque
---
kind: Secret
apiVersion: v1
metadata:
  name: system-metrics
data:
  tls.key: *
  tls.pem: *
type: Opaque

Пример реализации монтирования сертификатов в рамках «kind: Deployment» Egressgateway:

kind: Deployment
apiVersion: apps/v1
metadata:
  name: egw-syn-metrics-{{ .Release.Namespace }}
spec:
...
  template:
    spec:
      containers:
        - name: istio-proxy
          volumeMounts:
            - name: system-metrics
              mountPath: /secret/config/system-metrics
            - name: kafka
              mountPath: /secret/config/ssl
...
      volumes:
        - name: system-metrics
          secret:
            secretName: system-metrics
            defaultMode: 256
            optional: true
        - name: kafka
          secret:
            secretName: kafka
            defaultMode: 256
            optional: true

Примеры реализации «kind: Secret» для Ingressgateway:

kind: Secret
apiVersion: v1
metadata:
  name: prometheus-metrics
data:
  metrics-ca-chain.pem: *
  metrics.crt: *
  metrics.key: *
type: Opaque
---
kind: Secret
apiVersion: v1
metadata:
  name: prometheus-metrics-select
data:
  metrics-select-ca-chain.pem: *
  metrics-select.crt: *
  metrics-select.key: *
type: Opaque
---
kind: Secret
apiVersion: v1
metadata:
  name: logs-insert
data:
  logs-insert-ca-chain.pem: *
  logs-insert.crt: *
  logs-insert.key: *
type: Opaque
---
kind: Secret
apiVersion: v1
metadata:
  name: logs-select
data:
  logs-select-ca-chain.pem: *
  logs-select.crt: *
  logs-select.key: *
type: Opaque
---
kind: Secret
apiVersion: v1
metadata:
  name: trace-insert
data:
  trace-insert-ca-chain.pem: *
  trace-insert.crt: *
  trace-insert.key: *
type: Opaque
---
kind: Secret
apiVersion: v1
metadata:
  name: trace-select
data:
  trace-select-ca-chain.pem: *
  trace-select.crt: *
  trace-select.key: *
type: Opaque

Пример реализации монтирования сертификатов в рамках «kind: Deployment» Ingressgateway:

kind: Deployment
apiVersion: apps/v1
metadata:
  name: igw-syn-metrics-{{ .Release.Namespace }}
spec:
...
  template:
    spec:
      containers:
        - name: istio-proxy
            - name: trace-insert
              mountPath: /secret/config/trace-insert
            - name: prometheus-metrics
              mountPath: /secret/config/prometheus-metrics
            - name: trace-select
              mountPath: /secret/config/trace-select
            - name: prometheus-metrics-select
              mountPath: /secret/config/prometheus-metrics-select
            - name: logs-insert
              mountPath: /secret/config/logs-insert
            - name: logs-select
              mountPath: /secret/config/logs-select
...
      volumes:
        - name: trace-insert
          secret:
            secretName: trace-insert
            defaultMode: 256
            optional: true
        - name: trace-select
          secret:
            secretName: trace-select
            defaultMode: 256
            optional: true
        - name: prometheus-metrics
          secret:
            secretName: prometheus-metrics
            defaultMode: 256
            optional: true
        - name: prometheus-metrics-select
          secret:
            secretName: prometheus-metrics-select
            defaultMode: 256
            optional: true
        - name: logs-insert
          secret:
            secretName: logs-insert
            defaultMode: 256
            optional: true
        - name: logs-select
          secret:
            secretName: logs-select
            defaultMode: 256
            optional: true

При автоматической установке сервиса необходимо убедиться, что выполнены шаги разделов «1. Создать директорию установки» и «3. Установить необходимый перечень ресурсов».

Автоматическая установка сервиса#

Пример в рамках использования чарта «gatm».

Автоматическая установка подразумевает использование компонента SMDL, при использовании Job «SynapseInstaller».

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

Создаем файл с наименованием «values.yaml» для компонента GATM по пути Git репозитория - synapse-config-dev-gen/${имя проекта для установки}/package/conf/helm/gatm/values.yaml

Screenshot

Рисунок. Пример расположения стендозависимого файла с параметрами

Далее заполняем файл «values.yaml» по примерам, которые указаны в рамках указанного документа в разделе «Примеры стендозависимых параметров для установки», также для более детальной установки можно ознакомиться с разделом «Описание всех стендозависимых параметров».

Запустить job, компонента SMDL, «SynapseInstaller» (более подробно о настройке и запуске можно ознакомиться в документации компонента «SMDL», «Руководство оператора» раздел «SynapseInstaller»).

Ручная установка сервиса#

Необходимо убедиться, что в рамках персонального компьютера установлен Helm версии не ниже 3.0.

Для ручной установки сервиса выполните следующие действия (пример в рамках использования чарта «gatm»):

  1. Загрузить артефакт компонента GATM с конфигурациями для установки (gatm-cfg-*) в рамках дистрибутива продукта

  2. При необходимости провести корректировку конфигураций, располагаемых в каталоге «./package/conf/helm/application/gatm/templates/*» (например, провести подстановку image приложений, либо задать свои правила по сбору метрик)

  3. Перейти в рамках терминала в каталог «./package/conf/helm/application/»

  4. Провести авторизацию через терминал в кластер, где планируется установка компонента GATM (пример для Openshift «oc login –token=$ТОКЕН –server=$АДРЕС_КЛАСТЕРА»)

  5. Пройти в namespace, где планируется установка компонента GATM (пример для Openshift «oc project synapse-metrics»)

  6. Создать файл с произвольным наименованием, например «values-cluster.yaml» в рамках пути «./package/conf/helm/application/gatm/»

  7. Провести заполнение файла «./package/conf/helm/application/gatm/values-cluster.yaml» (описание параметров описано в указанном документе, раздел «Примеры стендозависимых параметров для установки», также для более детальной установки можно ознакомиться с разделом «Описание всех стендозависимых параметров»)

  8. Провести установку компонента GATM - «helm install gatm gatm/ –values gatm/values-cluster.yaml»; При необходимости удалить компонент GATM - «helm delete gatm».

Примеры стендозависимых параметров для установки#

Примеры в рамках использования чарта «gatm».

В данном разделе будет представлен минимальный набор стендозависимых параметров для установки GATM.

  1. Вариант установки приложений „agent“ и „adapter“ для сбора сетевых метрик с пользовательского проекта и дальнейшей передачи в Kafka.

Платформа Openshift.

global:
  registry: moi.space
  clusterName: moi.cluster

#registry: moi.space                                          # используется, если не произведена автоматическая сборка и не произведена замена на .Values.global.registry
registry_path: PATH/                                          # Docker path, где расположены образы приложения GATM
projectedKubeAPI_openshift_cm: 'true'                         # монтирование сертификата («kind: ConfigMap» с наименованием «openshift-service-ca.crt»)
kubeAPIIP: XXX.XXX.X.X                                        # IP-адрес сервиса KubeAPI (kubernetes.default.svc.cluster.local), можно уточнить у администраторов кластера
useControl: ose-se                                            # используемая версия Istio и платформа, при использовании версии 1.6 (в рамках платформы Openshift) необходимо указать значение «ose», а при использовании контрольной панели POLM реализовать значение «ose-se», при установке в рамках платформы Kubernetes «k8s»

seccompProfile: 'false'                                       # использование параметра seccompProfile в рамках секции Deployment «securityContext», применимо для платформы Kubernetes 1.25 и выше

image_pull_secret: default-secret                             # наименование imagePullSecrets для успешного обращения в docker registry

deploy: user                                                  # стратегия сбора метрик, параметр «user» - сбор сетевых метрик с пользовательского namespace
system_metrics: 'false'                                       # организация сбора системных метрик (для платформы Openshift это federate.openshift-monitoring.svc.cluster.local), при условии использования указанного сервиса для сбора системных метрик
use_storage_sm: 'false'                                       # установка серверной части приложений GATM по хранению метрик (опционально проведение агрегации метрик, при установке приложения alert)
enabled_metric_relabel_configs: 'false'                       # флаг активации фильтра по передаче метрик
agent:
  scrapeCluster: cluster1                                     # идентификатор кластера

adapter:
  kafkaBrokersList: kafka.apps.ocp.cluster.solution.ru:9093   # любое значение
  kafkaTopic: topic1                                          # используемый топик Kafka

install_event_exporter: 'false'                               # необходимость в установке приложения event-exporter (по умолчанию true)

# по умолчанию будет использоваться порт 9093
kafkaPort: 443                                                # внешний порт брокера
kafka:
  - host: kafka.apps.ocp.cluster.solution.ru                  # хост брокера

kafka_mesh_virtual_port: 19093                                # порт брокера kafka mesh, по умолчанию используется функционал IGEG bootstrap-cервер через egress
kafka_mesh_virtual_host: kafka.host                           # хост брокера kafka mesh

egress:
  serviceIstiod: istiod-istio-system                          # наименование сервиса контрольной панели, компонента «istiod»
  istioControlPlane: istio-system                             # наименование namespace контрольной панели, к которой подключен namespace компонента GATM

vault:
  kv: DEV_DZO/A/DEV/GATM/KV                                   # путь к секретам vault во внешнем хранилище (KV version 1)
  secmanNamespace: DEV                                        # namespace vault во внешнем хранилище
  secmanRole: role-ga-secman-gatm                             # роль vault во внешнем хранилище с доступом на чтение секретов

  auth_path_enabled: 'true'                                   # флаг использования аннотации «vault.hashicorp.com/auth-path» в рамках доступа к хранилищу vault
  auth_path: auth/gatm                                        # значение аннотации «vault.hashicorp.com/auth-path» в рамках доступа к хранилищу vault

scrape_srls_pods:                                             # сбор метрик с приложения SRLS
  scrape: "false"

При реализации указанных параметров в рамках кластера будет установлено 3 приложения: „agent“, „adapter“ и Egressgateway.

Сбор сетевых метрик (с контейнеров Istio-proxy) будет производиться в проекте, где реализована установка GATM.

  1. Вариант развертывания приложений „agent“ и „adapter“ в рамках одной Pod, а также установка приложения event-exporter для сбора событий в рамках проекта.

Платформа Openshift.

global:
  registry: moi.space
  clusterName: moi.cluster

#registry: moi.space
registry_path: PATH/
projectedKubeAPI_openshift_cm: 'true'
kubeAPIIP: XXX.XXX.X.X
useControl: ose-se

seccompProfile: 'false'

image_pull_secret: default-secret

deploy: user
system_metrics: 'false'
use_storage_sm: 'false'
enabled_metric_relabel_configs: 'false'
agent:
  scrapeCluster: cluster1

adapter:
  kafkaBrokersList: kafka.apps.ocp.cluster.solution.ru:9093
  kafkaTopic: topic1

# по умолчанию будет использоваться порт 9093
kafkaPort: 443
kafka:
  - host: kafka.apps.ocp.cluster.solution.ru

kafka_mesh_virtual_port: 19093
kafka_mesh_virtual_host: kafka.host

egress:
  serviceIstiod: istiod-istio-system
  istioControlPlane: istio-system

vault:
  kv: DEV_DZO/A/DEV/GATM/KV
  secmanNamespace: DEV
  secmanRole: role-ga-secman-gatm

scrape_srls_pods:
  scrape: "false"

singlePodAdapter: 'false'                                     # установка приложения kafka_adapter в рамках отдельного Pod

event_exporter:
  get_events_namespaces: 'gatm-ns'                            # имена проектов, с которых будет производитьcя сбор event (пример с указанием нескольких namespace - 'synapse-metrics-system,istio-system')        

При реализации указанных параметров в рамках кластера будет установлено 4 приложения „agent“, „adapter“ (в рамках одной Pod), event exporter и Egressgateway.

Сбор сетевых метрик (с контейнеров Istio-proxy) и событий («kind: Event»), будет производиться в проекте, где реализована установка GATM.

  1. Вариант развертывания приложений „agent“, серверная часть (insert, select, „storage“), настройка сбора системных метрик и запись собранных метрик в рамках локального хранилища GATM.

Платформа Openshift.

Также использование фильтра при сборе метрик.

global:
  registry: moi.space
  clusterName: moi.cluster

#registry: moi.space
registry_path: PATH/
projectedKubeAPI_openshift_cm: 'true'                         # монтирование сертификата («kind: ConfigMap» с наименованием «openshift-service-ca.crt»)
kubeAPIIP: XXX.XXX.X.X
useControl: ose-se

seccompProfile: 'false'

deploy: user
system_metrics: 'true'                                        # организация сбора системных метрик (для платформы Openshift это federate.openshift-monitoring.svc.cluster.local) 
federateIP: ZZ.ZZZ.ZZZ.ZZ                                     # опциональный, IP-адрес сервиса federate (пример для Openshift - federate.openshift-monitoring.svc.cluster.local), при условии использования указанного сервиса для сбора системных метрик
enabled_metric_relabel_configs: 'true'                        # флаг активации фильтра по передаче метрик
system_metrics_targets:                                       # сбор системных метрик (/federate) по списку
  - name: own                                                 # уникальное имя для идентификации job по scrape
    namespace: smdemo1                                        # namespace для сбора системных метрик
    relabel_regex: "('|kube_pod_container_resource_requests|node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate|kube_pod_container_resource_limits|container_memory_working_set_bytes|kube_pod_container_resource_requests|kube_pod_container_resource_limits|kube_deployment_status_replicas_available|kube_deployment_status_replicas|container_memory_usage_bytes|')"  # регулярное выражение по фильтру передаваемых метрик в kafka, по системным метрикам (указывается при установке флага enabled_metric_relabel_configs: 'true')

add_serviceaccount: 'true'

agent:
  scrapeCluster: cluster1
  remoteWrite:
    kafka: 'false'                                            # флаг передачи метрик в рамках kafka (будет использоваться интеграция с приложением GATM kafka adapter)
kafka_egress_config_apply: 'false'                            # флаг установки конфигураций Istio для организации сетевого взаимодействия через egressgateway

use_storage_sm: 'true'                                        # установка серверной части приложений GATM по хранению метрик (опционально проведение агрегации метрик, при установке приложения alert)
install_alert: "false"
install_kafka_adapter: 'false'                                # необходимость в установке приложения kafka adapter

scrape_srls_pods:
  scrape: "false"

egress:
  serviceIstiod: istiod-istio-system
  istioControlPlane: istio-system

system_metrics_ca_crt_name: service-ca.crt                    # наименование сертификата по обращению к сервису сбора системных метрик 

При реализации указанных параметров в рамках кластера будет установлено 5 приложений „agent“, select, insert, „storage“ и Egressgateway.

Сбор сетевых метрик (с контейнеров Istio-proxy) будет производиться в проекте, где реализована установка GATM, также организован сбор системных метрик из указанного проекта в параметрах.

  1. Вариант развертывания приложений „agent“, серверная часть (insert, select, „storage“), реализации агрегации метрик (alert), запись собранных метрик в рамках локального хранилища GATM.

Платформа Kubernetes.

Также будет организован сбор метрик с контрольной панели.

global:
  registry: moi.space
  clusterName: moi.cluster

#registry: moi.space
kubeAPIIP: XXX.XXX.X.X
deploy: all                                                   # стратегия сбора метрик, параметр «all» - сбор сетевых метрик с пользовательского namespace
system_metrics_ca_crt_name: ca.crt                            # наименование сертификата по обращению к сервису сбора системных метрик (service-ca.crt при установке в Openshift (по умолчанию) и ca.crt при установке в Kubernetes)
projectedKubeAPI_openshift_cm: 'false'                        # монтирование сертификата («kind: ConfigMap» с наименованием «openshift-service-ca.crt»)
affinityMatchKey: 'kubernetes.io/arch'                        # актуализация affinityMatchKey в рамках IGEG

system_metrics: 'true'
federateIP: ZZ.ZZZ.ZZZ.ZZ
system_metrics_targets:
  - name: own
    namespace: gatm
k8s_system_metrics:                                           # при установке на Kubernetes (useControl: k8s) указание endpoint по предоставлению системных метрик
  host: prometheus-service.kube-system.svc.cluster.local
  port: 8443

add_serviceaccount: 'true'
image_pull_secret: default-secret

agent_alert:
  labelAdd: 'cluster=cluster1.ru'                             # идентификатор кластера, указанный параметр будет добавлен в метки (label) собранных метрик

agent:
  scrapeCluster: cluster1.ru
  remoteWrite:
    kafka: 'false'
kafka_egress_config_apply: 'false'

scrape_srls_pods:
  scrape: "false"

use_storage_sm: 'true'
install_kafka_adapter: 'false'

podDisruptionBudget:
  apiVersion: policy/v1

egress:
  serviceIstiod: istiod-istio-system
  istioControlPlane: istio-system

При реализации указанных параметров в рамках кластера будет установлено 6 приложений „agent“, select, insert, „storage“, alert и Egressgateway.

Сбор сетевых метрик (с контейнеров Istio-proxy) будет производиться в проекте, где реализована установка GATM, организован сбор системных метрик из указанного проекта в параметрах и сбор метрик с контрольной панели.

Агрегация метрик производиться в рамках системных метрик.

  1. Вариант развертывания приложения tenant-agent для сбора системных метрик в рамках локального хранилища GATM.

В данном примере мы обогащаем сбор текущих метрик из примера номер 4 и производим установку еще одного приложения „agent“, для сбора сетевых и системных метрик пользовательского проекта, указанная механика позволяет планировать ресурсы на список проектов, которые уже добавлены в мониторинг и масштабировать приложения в рамках конкретного тенанта.

Также есть возможность устанавливать приложения event-exporter, egress, „adapter“ в рамках тенанта, для обеспечения независимой нагрузки при сборе и передаче данных.

Платформа Kubernetes.

global:
  registry: moi.space
  clusterName: moi.cluster

#registry: moi.space
kubeAPIIP: XXX.XXX.X.X
deploy: all
system_metrics_ca_crt_name: ca.crt
projectedKubeAPI_openshift_cm: 'false'
affinityMatchKey: 'kubernetes.io/arch'

system_metrics: 'true'
federateIP: ZZ.ZZZ.ZZZ.ZZ
system_metrics_targets:
  - name: own
    namespace: gatm
k8s_system_metrics:
  host: prometheus-service.kube-system.svc.cluster.local
  port: 8443

add_serviceaccount: 'true'
image_pull_secret: default-secret

agent_alert:
  labelAdd: 'cluster=cluster1.ru'

agent:
  scrapeCluster: cluster1.ru
  remoteWrite:
    kafka: 'false'
kafka_egress_config_apply: 'false'

scrape_srls_pods:
  scrape: "false"

use_storage_sm: 'true'
install_kafka_adapter: 'false'

podDisruptionBudget:
  apiVersion: policy/v1

egress:
  serviceIstiod: istiod-istio-system
  istioControlPlane: istio-system

# минимальный набор параметров в рамках тенанта (параметры идентичны в рамках параметризации основного тенанта, который параметризуется в корне стендозависимых параметров)
tenant_agent:
  - index: 'user'                        # уникальный идентификатор тенанта, префикс которого будет указываться в рамках установки приложений
    use_storage_sm: 'true'
    install_agent: 'true'
    agent:
      tenant: '0'
      replicas: 1
      remoteWrite:
        kafka: "false"
        externalPrometheus:
          integration: 'false'
          createConfig: 'false'
      maxScrapeSize: 1Gib
      maxDiskUsagePerURL: 1Gib
      use_sa_prometheus: 'false'
      scrapeInterval: 1m
      scrapeTimeOut: 1m
      scrapeCluster: 'moi.cluster.tenant'
      queues: 8
      svpx:
        resources:
          limits:
            cpu: 300m
            memory: 300Mi
          requests:
            cpu: 300m
            memory: 300Mi
      livenessProbe:
        failureThreshold: 30
        initialDelaySeconds: 5
        periodSeconds: 10
        successThreshold: 1
        timeoutSeconds: 5
      readinessProbe:
        failureThreshold: 30
        initialDelaySeconds: 5
        periodSeconds: 10
        successThreshold: 1
        timeoutSeconds: 5
      resources:
        limits:
          cpu: 300m
          ephemeral_storage: 500Mi
          memory: 300Mi
        requests:
          cpu: 300m
          ephemeral_storage: 500Mi
          memory: 300Mi
      istio_control:                     # необходимость сбора метрик из контрольной панели
        scrape: "false"
      scrape_srls_pods:                  # необходимость сбора метрик из приложений SRLS
        scrape: "false"
      istio_pods:                        # необходимость сбора сетевых метрик с istio-proxy
        scrape: "true"
        scrape_interval: 30s
        scrape_timeout: 30s
        relabel_get_label:
          stats: 'false'
          namespace: 'true'
          pod_name: 'true'
        enabled_metric_relabel_configs: 'false'
        scrape_own_namespace: 'false'
        scrape_all_namespace: 'false'
        scrape_namespaces:
          - name: srls
      system_metrics_targets:            # сбор системных метрик
        - name: srls
          scrape: "true"
          enabled_metric_relabel_configs: "true"
          relabel_regex: "('|container_memory_working_set_bytes|kube_pod_info|container_cpu_usage_seconds_total|kube_pod_container_resource_requests|kube_pod_container_resource_limitkube_deployment_status_replicas_unavailable|kube_deployment_status_replicas_available|kube_statefulset_status_replicas_ready|kube_statefulset_status_replicakube_deployment_status_replicas|container_memory_usage_bytes|kube_daemonset_status_number_unavailable|version|label_platformv_sber_ru_release_version|kube_resourcequotkube_pod_labels|container_sockets|kube_daemonset_status_updated_number_scheduled|kube_pod_container_status_restarts_total|')"
          namespace: synapse-custom-namespace
    install_adapter: 'false'
    adapter:
      kafka_egress_config_apply: 'false'
    install_egress: 'false'               # необходимость установки дополнительного egress
    install_event_exporter: 'false'       # необходимость установки дополнительного event-exporter
    event_exporter:
      scrape_interval: 1s                 # обязательно указывается для корректного подсчета hash конфигураций для сбора
      scrape_timeout: 1m
        check_config:
          jobs:
            - name_metric: istiod_readiness_tenant3
  1. Рассмотрим опциональные параметры по организации проекта GATM.

Организация входящего трафика в рамках проекта, поддерживается настройка nginx.

При реализации установки Ingressgateway необходимо реализовать сертификаты для организации входящего трафика, более подробно описано в рамках раздела «Предусловия».

# установка Ingressgateway для организации входящего трафика в рамках проекта (mTLS)
install_ingress: 'true'   # флаг установки Ingressgateway, при установке будут реализованы конфигурации на запись («kind: Route»/«kind: Ingress» в зависимости от выбранной платформы) метрик и опционально логов и трассировок
ingress:
  route_select: 'true'   # реализация входящего трафика по запросам на сбор метрик
  route_select_trace: 'true'   # реализация входящего трафика по запросам на сбор трассировок
  route_select_logs: 'true'   # реализация входящего трафика по запросам на сбор логов
  version: '1.17'
  serviceIstiod: istiod-istio-system
  istioControlPlane: istio-system

Установка серверной части логов и трассировок.

# установка 4-х приложений по организации серверной части по краткосрочному хранению трассировок
synapse_trace:
  install: 'true'
  maxTraces: 10000

# установка 3-х приложений по организации серверной части по краткосрочному хранению логов
synapse_logs:
  install: 'true'

Описание всех возможных стендозависимых параметров представлено в следующем разделе документации.

Описание всех стендозависимых параметров#

Чарт «gatm».

values.yaml

#global:
#  registry: moi.space          # registry, в рамках которого реализован образ приложений
#  clusterName: moi.cluster     # опциональный параметр для конкретизации клаcтера, будет использоваться в рамках label передаваемых метрик

release_version: "1.9.0"        # указать версию релиза
config_version: "1.9.0"         # указать версию конфигурации
component_type: service

#registry:                                          # при использовании указанного параметра, используется если не произведена автоматическая сборка и не произведена замена на .Values.global.registry
#registry_path_igegose:                             # при использовании выделенного path для istio 1.6
#registry_path_igegse117:                           # при использовании выделенного path для istio 1.17
#registry_path_igegse119:                           # при использовании выделенного path для istio 1.19
#registry_path_igegse:                              # при использовании выделенного path для istio 1.20

replicas: 1                                         # количество реплик приложения GATM (agent)
#registry_path: /                                   # Docker path, где расположены образ приложения GATM
#cluster: app.cluster.ru                            # домен кластера, для организации входящего трафика в проект GATM, используется при реализации url
indexInstall: ""                                    # префикс в рамках формирования URL для внешнего запроса (реализуется при установке Ingressgateway), например, при реализации этого параметра внешний адрес для реализации запроса будет формироваться по следующей структуре «synapse-logs-insert{{ .Values.indexInstall }}.{{ .Values.cluster }}»
kubeAPIIP: '*.*.*.*'                                # IP-адрес сервиса KubeAPI (kubernetes.default.svc.cluster.local) можно уточнить у администраторов кластера
kubePort: 443                                       # port сервиса KubeAPI (kubernetes.default.svc.cluster.local) можно уточнить у администраторов кластера
kubeAPIResolution: DNS                              # используемый resolution в рамках конфигурации «kind: ServiceEntry» для KubeAPI (kubernetes.default.svc.cluster.local)
kubeEgressRouting: TLS                              # реализация конфигураций Istio (TLS - перехват трафика в рамках tls, TCP - перехват трафика по tcp, DISABLE - инициация по HTTP протоколу и реализация сертификата на egress)
federateIP: '*.*.*.*'                               # опциональный, IP-адрес сервиса federate (пример для Openshift - federate.openshift-monitoring.svc.cluster.local), при условии использования указанного сервиса для сбора системных метрик
federateResolution: DNS                             # используемый resolution в рамках конфигурации «kind: ServiceEntry» для federate (пример для Openshift - federate.openshift-monitoring.svc.cluster.local)
deploy: control                                     # стратегия сбора метрик, параметр «all» - сбор сетевых метрик с пользовательского namespace, с контейнеров «istio-proxy» и метрик контрольной панели приложения «istiod», параметр «user» - сбор сетевых метрик с пользовательского namespace, параметр «control» - сбор метрик контрольной панели приложения «istiod»
add_drs_scrape: 'true'                              # установка конфигурации «kind: DestinationRule в рамках используемых адресов по сбору метрик с istio-proxy, istiod и istio-operator
useControl: k8s                                     # используемая версия Istio и платформа, при использовании версии 1.6 (в рамках платформы Openshift) необходимо указать значение «ose», а при использовании контрольной панели POLM реализовать значение «ose-se», при установке в рамках платформы Kubernetes «k8s»
system_metrics: 'true'                              # организация сбора системных метрик (для платформы Openshift это federate.openshift-monitoring.svc.cluster.local, для Kubernetes указывается в рамках «k8s_system_metrics»), при условии использования указанного сервиса для сбора системных метрик
system_metrics_ca_crt_name: ca.crt                  # наименование сертификата по обращению к сервису сбора системных метрик (service-ca.crt при установке в Openshift и ca.crt при установке в Kubernetes)
projectedKubeAPI: 'false'                           # флаг монтирования токена для работы с KubeAPI, если стоит значение false, то токен будет примонтирован автоматически, если true, то токен будет примонтирован в рамках «kind: Deployment»
projectedKubeAPI_openshift_cm: 'false'              # монтирование сертификата («kind: ConfigMap» с наименованием «openshift-service-ca.crt»)
projectedKubeAPI_k8s_cm: 'true'                     # монтирование сертификата («kind: ConfigMap» с наименованием «kube-root-ca.crt»)
seccompProfile: 'true'                              # использование параметра seccompProfile в рамках секции Deployment «securityContext», применимо для платформы Kubernetes 1.25 и выше
generate_ephemeral_storage: 'false'                 # указание ephemeral-storage в контейнерах в рамках секций «kind: Deployment»/«kind: StatufulSet» resources
affinity: 'false'                                   # реализация affinity, необходим для корректного распределение «kind: Pod» по нодам кластера
affinityMatchKey: 'kubernetes.io/arch'              # реализация affinityMatchKey в рамках IGEG
affinityMatchValues:                                # реализация affinityMatchValues в рамках IGEG
  - amd64
  - ppc64le
  - s390x
enabledPriorityClassName: 'false'                   # указание секции PriorityClassName в рамках конфигураций «kind: Deployment»/«kind: StatefulSet»
priorityClassName: system-cluster-critical          # priorityClassName (при указании enabledPriorityClassName: 'true')
poddistruptionbudget: 'false'                       # флаг установки конфигурации «kind: PodDistruptionBudget»
use_storage_sm: 'true'                              # установка серверной части приложений GATM по хранению метрик (опционально проведение агрегации метрик, при установке приложения alert)
tenant: '0'                                         # тенант для записи собранных метрик, это группировка хранимых метрик в рамках серверной части GATM (формирование запроса метрик с учетом тенанта «/select/{{ .Values.tenant }}/prometheus»)
add_kind_sidecar: 'true'                            # реализация конфигурации «kind: Sidecar» по ограничению используемых адресов в рамках namespace и контрольной панели istio
add_kind_sidecar_cp: 'true'                         # включение в рамках «kind: Sidecar» проект контрольной панели

k8s_system_metrics:                                 # при установке на Kubernetes (useControl: k8s) указание endpoint по предоставлению системных метрик
#  host: federate.monitoring.svc.cluster.local
  port: 8481

roleBindings:                                       # кастомный ресурс в рамках реализации ролевой модели, уникальное технические решение одного из клиентов
  useCustom:
    install: "false"
    index: ""
#    base:
#      version:
#      roleUID:
#      hash:

peer_authentication:
  install: 'true'                                   # флаг установки конфигурации «kind: PeerAuthentication»
  mtls_mode: STRICT                                 # указание используемого мода по ограничению входящего трафика на приложения
  add_source_label: 'false'                         # флаг, который применяет селектор к конфигурации «kind: PeerAuthentication» (platformv.sber.ru/componentCode: GATM)

add_serviceaccount: 'false'                         # флаг установки «kind: ServiceAccount» для приложений GATM
image_pull_secret: pull                             # наименование imagePullSecrets для успешного обращения в docker registry

dns_capture_disabled: 'true'                        # активация ISTIO_META_DNS_CAPTURE: "false" и ISTIO_META_DNS_AUTO_ALLOCATE: "false" аннотаций для корректной настройки сетевого взаимодействия с headless сервисами

enabled_metric_relabel_configs: 'true'              # флаг активации фильтра по передаче метрик
istio_pods_scrape_interval: 1m                      # настройка scrape_interval в рамках сбора метрик с istio-proxy
istio_pods_scrape_timeout: 1m                       # настройка scrape_timeout в рамках сбора метрик с istio-proxy
istio_pods_relabel_regex: ''                        # регулярное выражение по фильтру передаваемых метрик, по istio-proxy в рамках проекта (указывается при установке флага enabled_metric_relabel_configs: 'true')
istio_pods_relabel_get_label:                       # секция по добавлению меток (labels) в рамках собираемых сетевых метрик (формируются на основе спецификации «kind: Pod»)
  stats: 'false'                                    # добавление метки (label) в рамках собираемых сетевых метрик с информацией о пути сбора метрик
  namespace: 'true'                                 # добавление метки (label) в рамках собираемых сетевых метрик с информацией о проекте сбора
  pod_name: 'true'                                  # добавление метки (label) в рамках собираемых сетевых метрик с информацией о наименовании «kind: Pod»
  labels: 'true'                                    # добавление сбора меток из Pod и реализация их в тэгах по метрикам
  namespace_labels: 'false'                         # флаг для активации сбора lables с проектов при сборе сетевых метрик, значение по умолчанию - false (сбор производиться не будет)
istio_pods_namespace_list_string:                   # ввод проектов по списку, при указании указанной секции, будет проигнорированы параметры istio_cp_pods_scrape_own_namespace, istio_cp_pods_scrape_all_namespace, istio_cp_pods_scrape_namespaces. Так как указанный список проектов имеет больший приоритет для подстановки
   - gatm-test
istio_cp_pods_scrape_own_namespace: 'false'         # флаг, сбора сетевых метрик с проекта, в котором устанавливается приложение 'agent'
istio_cp_pods_scrape_all_namespace: 'false'         # флаг, сбора сетевых метрик со всех проектов кластера, при реализации указанного флага необходимо реализовать «kind: ClusterRoleBinding» на ServiceAccount приложения 'agent'
istio_cp_pods_scrape_namespaces:                    # опция, указание списка проектов с которых будет производиться сбор сетевых метрик
  - name: synapse-control-panel
#  - name: namespace2
istio_pods_relabel_add_label:                       # добавление дополнительных меток (labels) при передачи метрик по istio-proxy
  - name: namespace                                 # имя метки
    value: synapse-metrics-system                   # значение метки
istio_cp_pods_relabel_regex: ''                     # регулярное выражение по фильтру передаваемых метрик, по метрикам собранным из контрольной панели приложения «istiod» (указывается при установке флага enabled_metric_relabel_configs: 'true')
istio_cp_pods_scrape_interval: 1m                   # настройка scrape_interval в рамках сбора метрик с контрольной панели приложения «istiod»
istio_cp_pods_scrape_timeout: 1m                    # настройка scrape_timeout в рамках сбора метрик с контрольной панели приложения «istiod»
istio_cp_pods_relabel_add_label:                    # добавление дополнительных меток (labels), при передачи метрик с контрольной панели приложения «istiod»
  - name: namespace                                 # имя метки
    value: synapse-metrics-system                   # значение метки

istio_control_scrape_own:  'true'                   # сбор метрик istiod в рамках контрольной панели к которой подключен проект GATM
#istio_control_scrape_namespaces:                   # опция, для указания нескольких проектов контрольной панели для сбора метрик istiod
#  - name: synapse-control-panel

scrape_metrics_istio_cni:                           # сбор метрик с приложения CNI
  scrape: 'false'
#  scrape_interval: 30s
#  scrape_timeout: 30s
  namespace: synapse-operator
  enabled_metric_relabel_configs: 'false'
  istio_cni_pods_relabel_regex: ''
#  istio_cni_pods_relabel_add_label:
#    - name: namespace
#      value: synapse-metrics-system

scrape_kubernetes_pods:                             # секция по сбору приклданых метрик с приложений
  scrape: "false"
#  ports:                                           # список портов, в рамках которых реализуется сбор прикладных метрик (по умолчанию реализован фильтр по списку портов, можно указывать по списку - 9127|2379|9187|9080|9113|9256|9308|9100|8100|8080|8081|8088|8086|8090|9090|8082|8083|19000|8180|10080|8060|2112|8089)
#    - '8080'
#    - '8081'
#    - '9999'
  scrape_interval: 30s
  scrape_timeout: 30s
  labelmap: 'true'                                  # флаг по добавлению всех labels в рамках сервиса как тэги
  namespace_labels: 'false'                         # флаг для активации сбора lables с проектов при сборе сетевых метрик, значение по умолчанию - false (сбор производиться не будет)
#  relabel_config:                                  # реализация механик по расширению тэгов при сборе метрик, ограничение в рамках source_labels с отсылкой на аннотации сервиса
#    - source_labels:
#      target_label:
#      replacement:
#      separator:
#      regex:
#      action:
  enabled_metric_relabel_configs: 'false'
#    relabel_regex: ''
  scrape_own_namespace: 'false'
  scrape_all_namespace: 'false'
  scrape_namespaces:
    - namespace
  #  - namespace2

scrape_gatm_application:                            # параметры сбора прикладных метрик приложений GATM
  agent:
    scrape: "false"                                 # сбор метрик с приложения 'agent'
    scrape_interval: 1m                             # опционально, настройка scrape_interval
    scrape_timeout: 1m                              # опционально, настройка scrape_timeout
    relabel_add_label:                              # опционально, добавление новых label в рамках метрик
      - name: newlabel
        value: value
    enabled_metric_relabel_configs: 'false'                          # опционально, добавление фильтра на собираемые метрики
    relabel_regex: "('|gatm_job_target_up|gatm_job_target_down|')"   # указывается при указании scrape_gatm_application.agent.enabled_metric_relabel_configs: true
  event:
    scrape: "false"                                 # сбор метрик с приложения event-exporter
    #    scrape_interval: 1m
    #    scrape_timeout: 1m
    #    relabel_add_label:
    #      - name:
    #        value:
    enabled_metric_relabel_configs: 'false'
  #    relabel_regex: ""
  storage:
    scrape: "false"                                 # сбор метрик с приложения storage
    #    scrape_interval: 1m
    #    scrape_timeout: 1m
    #    relabel_add_label:
    #      - name:
    #        value:
    enabled_metric_relabel_configs: 'false'
  #    relabel_regex: ""
  adapter:                                         # сбор метрик с приложения kafka-adapter
    scrape: "false"
    #    scrape_interval: 1m
    #    scrape_timeout: 1m
    #    relabel_add_label:
    #      - name:
    #        value:
    enabled_metric_relabel_configs: 'false'
  #    relabel_regex: ""
  select:                                          # сбор метрик с приложения select
    scrape: "false"
    #    scrape_interval: 1m
    #    scrape_timeout: 1m
    #    relabel_add_label:
    #      - name:
    #        value:
    enabled_metric_relabel_configs: 'false'
  #    relabel_regex: ""
  insert:                                          # сбор метрик с приложения insert
    scrape: "false"
    #    scrape_interval: 1m
    #    scrape_timeout: 1m
    #    relabel_add_label:
    #      - name:
    #        value:
    enabled_metric_relabel_configs: 'false'
  #    relabel_regex: ""
  alert:                                          # сбор метрик с приложения alert
    scrape: "false"
    #    scrape_interval: 1m
    #    scrape_timeout: 1m
    #    relabel_add_label:
    #      - name:
    #        value:
    enabled_metric_relabel_configs: 'false'
  #    relabel_regex: ""
  logs:
    select:                                       # сбор метрик с приложения logs select
      scrape: "false"
      #      scrape_interval: 1m
      #      scrape_timeout: 1m
      #      relabel_add_label:
      #        - name:
      #          value:
      enabled_metric_relabel_configs: 'false'
    #      relabel_regex: ''
    insert:                                       # сбор метрик с приложения logs insert
      scrape: "false"
      #      scrape_interval: 1m
      #      scrape_timeout: 1m
      #      relabel_add_label:
      #        - name:
      #          value:
      enabled_metric_relabel_configs: 'false'
    #      relabel_regex: ''
    storage:                                      # сбор метрик с приложения logs storage
      scrape: "false"
      #      scrape_interval: 1m
      #      scrape_timeout: 1m
      #      relabel_add_label:
      #        - name:
      #          value:
      enabled_metric_relabel_configs: 'false'
  #      relabel_regex: ''
  trace:
    select:                                       # сбор метрик с приложения trace select
      scrape: "false"
      #      relabel_add_label:
      #        - name:
      #          value:
      enabled_metric_relabel_configs: 'false'
    #      relabel_regex: ''
    insert:                                       # сбор метрик с приложения trace insert
      scrape: "false"
      #      relabel_add_label:
      #        - name:
      #          value:
      enabled_metric_relabel_configs: 'false'
    #      relabel_regex: ''
    proxy:                                        # сбор метрик с приложения trace proxy
      scrape: "false"
      #      relabel_add_label:
      #        - name:
      #          value:
      enabled_metric_relabel_configs: 'false'
    #      relabel_regex: ''
    storage:                                      # сбор метрик с приложения trace storage
      scrape: "false"
      #      relabel_add_label:
      #        - name:
      #          value:
      enabled_metric_relabel_configs: 'false'
#      relabel_regex: ''

scrape_srls_pods:                                 # сбор метрик с приложения SRLS
  scrape: "true"
  #  scrape_interval: 30s
  #  scrape_timeout: 30s
  #  relabel_add_label:
  #    - name:
  #      value:
  enabled_metric_relabel_configs: 'false'
  #  relabel_regex: ''
  scrape_own_namespace: 'false'                     # сбор метрик с SRLS в рамках проекта, где установлено приложение 'agent'
  scrape_all_namespace: 'false'                     # сбор метрик с SRLS в рамках кластера, при использовании указанного флага необходимо реализовать «kind: ClusterRoleBinding» для ServiceAccount приложения 'agent'
  scrape_namespaces:                                # опционально, сбор метрик с SRLS по списку проектов
    - name: synapse-rate-limit
  #  - name: namespace2

scrape_metrics_istio_operator:                      # параметры для scrape метрик приложения istio-operator
  scrape: 'false'                                   # флаг по реализации scrape
  scrape_interval: 30s                              # опционально, настройка scrape_interval
  scrape_timeout: 30s                               # опционально, настройка scrape_timeout
  namespace: synapse-operator                       # namespace где установлен istio-operator
  enabled_metric_relabel_configs: 'false'           # флаг активации фильтра по передаче метрик, предоставляет возможность передавать в kafka только указываемые метрики по имени
  istio_operator_pods_relabel_regex: ''             # регулярное выражение по фильтру передаваемых метрик в kafka, по istio-proxy в рамках проекта (указывается при установке флага enabled_metric_relabel_configs: 'true')
  istio_operator_pods_relabel_add_label:            # опциональное добавление дополнительных меток, при передачи метрик
    - name: namespace                               # имя метки
      value: synapse-metrics-system                 # значение метки

system_metrics_targets_list_relabel_regex: "('|container_memory_working_set_bytes|')"   # фильтр по сбору метрик при использовании списка проектов system_metrics_targets_list, указанный фильтр будет применен для каждого проекта по сбору системных метрик
system_metrics_targets_list:                                                            # список проектов, в рамках которых будет производиться сбор системных метрик, будет проигнорирован параметр system_metrics_targets, так как указанный список проектов имеет больший приоритет для подстановки
  - 'synapse-rate-limit'

system_metrics_targets:                             # сбор системных метрик (/federate) по списку
  - name: synapse-control-plane                     # уникальное имя для идентификации job по scrape 
    namespace: synapse-control-panel                # namespace для сбора системных метрик
    scrape_interval: 1m                             # интервал по сбору системных метрик
    scrape_timeout: 1m                              # timeout по сбору системных метрик
    relabel_regex: "('|container_memory_working_set_bytes|kube_pod_info|container_cpu_usage_seconds_total|kube_pod_container_resource_requests|kube_pod_container_resource_limits|kube_deployment_status_replicas_unavailable|kube_deployment_status_replicas_available|kube_statefulset_status_replicas_ready|kube_statefulset_status_replicas|kube_deployment_status_replicas|container_memory_usage_bytes|kube_daemonset_status_number_unavailable|version|label_platformv_sber_ru_release_version|kube_resourcequota|kube_pod_labels|container_sockets|kube_daemonset_status_updated_number_scheduled|kube_pod_container_status_restarts_total|')"    # регулярное выражение по фильтру передаваемых метрик в kafka, по системным метрикам (указывается при установке флага enabled_metric_relabel_configs: 'true')
  - name: synapse-operator
    namespace: synapse-operator
    relabel_regex: "('|container_memory_working_set_bytes|kube_pod_info|container_cpu_usage_seconds_total|kube_pod_container_resource_requests|kube_pod_container_resource_limits|kube_deployment_status_replicas_unavailable|kube_deployment_status_replicas_available|kube_statefulset_status_replicas_ready|kube_statefulset_status_replicas|kube_deployment_status_replicas|container_memory_usage_bytes|kube_daemonset_status_number_unavailable|version|label_platformv_sber_ru_release_version|kube_resourcequota|kube_pod_labels|container_sockets|kube_daemonset_status_updated_number_scheduled|kube_pod_container_status_restarts_total|')"
  - name: synapse-rate-limit
    namespace: synapse-rate-limit
    relabel_regex: "('|container_memory_working_set_bytes|kube_pod_info|container_cpu_usage_seconds_total|kube_pod_container_resource_requests|kube_pod_container_resource_limits|kube_deployment_status_replicas_unavailable|kube_deployment_status_replicas_available|kube_statefulset_status_replicas_ready|kube_statefulset_status_replicas|kube_deployment_status_replicas|container_memory_usage_bytes|kube_daemonset_status_number_unavailable|version|label_platformv_sber_ru_release_version|kube_resourcequota|kube_pod_labels|container_sockets|kube_daemonset_status_updated_number_scheduled|kube_pod_container_status_restarts_total|')"
#    relabel_add_label:                              # опциональное добавление дополнительных меток, при передачи метрик
#      - name:                                       # имя метки
#        value:                                      # значение метки
#    group_namespaces:                               # опция группировки сбора системных метрик по списку проектов
#      - job_name: one                                # имя дочерней задачи по сбору системных метрик
#        first_namespace: namespace1                  # первый элемент группы
#        namespaces:                                  # список проектов для группировки
#          - name: namespace2
#          - name: namespace3
#  - name:
#    namespace:
#    relabel_regex:

podDisruptionBudget:
  apiVersion: policy/v1                        # apiVersion конфигурации «kind: PodDistruptionBudget»
  spec:
    minAvailable: 1                                 # значение параметра в приложении 'agent' - minAvailable в конфигурации «kind: PodDistruptionBudget»
  storage:
    spec:
      minAvailable: 1                               # значение параметра в приложении storage - minAvailable в конфигурации «kind: PodDistruptionBudget»
  select:
    spec:
      minAvailable: 1                               # значение параметра в приложении select - minAvailable в конфигурации «kind: PodDistruptionBudget»
  insert:
    spec:
      minAvailable: 1                               # значение параметра в приложении insert - minAvailable в конфигурации «kind: PodDistruptionBudget»
  alert:
    spec:
      minAvailable: 1                               # значение параметра в приложении alert - minAvailable в конфигурации «kind: PodDistruptionBudget»
  trace:
    storage:
      spec:
        minAvailable: 1                             # значение параметра в приложении trace storage - minAvailable в конфигурации «kind: PodDistruptionBudget»
    select:
      spec:
        minAvailable: 1                             # значение параметра в приложении trace select - minAvailable в конфигурации «kind: PodDistruptionBudget»
    insert:
      spec:
        minAvailable: 1                             # значение параметра в приложении trace insert - minAvailable в конфигурации «kind: PodDistruptionBudget»
    proxy:
      spec:
        minAvailable: 1                             # значение параметра в приложении trace proxy - minAvailable в конфигурации «kind: PodDistruptionBudget»
  logs:
    storage:
      spec:
        minAvailable: 1                             # значение параметра в приложении logs storage - minAvailable в конфигурации «kind: PodDistruptionBudget»
    select:
      spec:
        minAvailable: 1                             # значение параметра в приложении logs select - minAvailable в конфигурации «kind: PodDistruptionBudget»
    insert:
      spec:
        minAvailable: 1                             # значение параметра в приложении logs insert - minAvailable в конфигурации «kind: PodDistruptionBudget»

svpx:
  resources:
    limits:
      cpu: 300m                                    # ресурсы limits/cpu приложения SVPX в Pod приложения 'agent'
      memory: 300Mi                                # ресурсы limits/memory приложения SVPX в Pod приложения 'agent'
    requests:
      cpu: 300m                                    # ресурсы requests/cpu приложения SVPX в Pod приложения 'agent'
      memory: 300Mi                                # ресурсы requests/memory приложения SVPX в Pod приложения 'agent'

vault:
#  kv: DEV/A/DEV/GATM/KV                            # путь к секретам vault во внешнем хранилище (KV version 1)
  system_metrics_tls_vault: 'false'                # при указании 'true' шифрование будет происходить в рамках egressgateway
  system_metrics_tls_vault_crt_name: 'ca.crt'      # наименование ca сертификата в рамках Pod egressgateway (при указании system_metrics_tls_vault: 'true')
  system_metrics_custom_ca: 'false'                # использование отличного ca сертификата при сборе системных метрик (по умолчанию используется сертификат /var/run/secrets/kubernetes.io/serviceaccount/{{ .Values.vault.system_metrics_tls_vault_crt_name }})
  secret_base64: 'true'                            # флаг по формату хранения сертификатов в рамках vault, в данном случае мы расположили сертификаты в base64 (KV version 1)
  pki_engine:
    enabled: 'false'                               # флаг, указывающий на использование PKI engine в рамках хранения сертификатов (общий, при указании 'false' все сертификаты будут использоваться из KV version 1)
    egress:                                        # группа сертификатов использующиеся для исходящего трафика
      kafka:                                       # группа параметров для сертификата по интеграции с Kafka
        pki_enabled: 'false'                       # локальный флаг использования PKI engine
        pki_path: PKI/issue/pki                    # частичный пусть к PKI engine путь формируется по структуре ({{ .Values.vault.secmanNamespace }}/{{ .Values.vault.pki_engine.egress.kafka.pki_path }}), также необходимо указывать метод запроса, например «issue» и наименование роли в рамках которой будет реализован сертификат
        common_name: kafka.host                    # параметр в рамках указывающий «common_name» выпускаемого сертификата
        data:                                      # группа параметров для возможности изменения параметров по корневому сертификату
          ca:
            name: ca_chain                         # имя корневого сертификата в рамках PKI engine, пример реализации по умолчанию «{{ .Data.ca_chain }}»
            range: 'false'                         # флаг использования «range» для реализации цепочки сертификатов ({{ range $k, $v := .Data.ca_chain }} {{- $v }} {{- end -}})
      prometheus:                                  # группа параметров для сертификата по интеграции с Prometheus (при использовании)
        pki_enabled: 'false'
        pki_path: PKI/issue/pki
        common_name: prometheus.host
        data:
          ca:
            name: ca_chain
            range: 'false'
      monitoring:                                  # группа параметров для сертификата по интеграции с сервером системных метрик (при использовании сертификатов из vault)
        pki_enabled: 'false'
        pki_path: PKI/issue/pki
        common_name: federate.host
        data:
          ca:
            name: issuing_ca
            range: 'false'
    ingress:                                       # группа сертификатов использующиеся для входящего трафика (при использовании)
      metrics:                                     # группа сертификатов для реализации входящего трафика по метрикам (при использовании)
        insert:                                    # сертификаты для реализации входящего трафика для записи метрик (при использовании)
          pki_enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-metrics-insert.host
          data:
            ca:
              name: ca_chain
              range: 'false'
        select:                                    # сертификаты для реализации входящего трафика для чтения метрик (при использовании)
          pki_enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-metrics-select.host
          data:
            ca:
              name: ca_chain
              range: 'false'
      traces:                                      # группа сертификатов для реализации входящего трафика по трассировкам (при использовании)
        insert:                                    # сертификаты для реализации входящего трафика для записи трассировок (при использовании)
          pki_enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-trace-insert.host
          data:
            ca:
              name: ca_chain
              range: 'false'
        select:                                    # сертификаты для реализации входящего трафика для чтения трассировок (при использовании)
          pki_enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-trace-select.host
          data:
            ca:
              name: ca_chain
              range: 'false'
      logs:                                        # группа сертификатов для реализации входящего трафика по логам (при использовании)
        insert:                                    # сертификаты для реализации входящего трафика для записи логов (при использовании)
          pki_enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-logs-insert.host
          data:
            ca:
              name: ca_chain
              range: 'false'
        select:                                    # сертификаты для реализации входящего трафика для чтения логов (при использовании)
          pki_enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-logs-select.host
          data:
            ca:
              name: ca_chain
              range: 'false'
  resources:                                   # ресурсы для контейнера vault
    limits:
      cpu: 500m
      memory: 128Mi
    requests:
      cpu: 250m
      memory: 64Mi
  pre_populate_only: "true"                        # режим мутации контейнера vault, в рамках IGEG (true - без мутации, false - с мутацией контейнера)
#  secmanNamespace: DEV                             # namespace vault во внешнем хранилище
#  secmanRole: role-ga-secman-gatm                  # роль vault во внешнем хранилище с доступом на чтение секретов
  auth_path_enabled: 'false'                       # флаг использования аннотации «vault.hashicorp.com/auth-path» в рамках доступа к хранилищу vault
  auth_path: synapse/path                          # значение аннотации «vault.hashicorp.com/auth-path» в рамках доступа к хранилищу vault

kafka_egress_config_apply: 'true'                  # флаг установки конфигураций Istio для организации сетевого взаимодействия через egressgateway
kafkaPort: 9093                                    # внешний порт брокера
kafka_add_external_port_vs: 'true'                 # флаг конкретизации внешнего порта в конфигурации «kind: VirtualService»
kafka_add_sourceLabel: 'false'                     # реализация секции sourceLabel в «kind: VirtualService» для реализации вывода трафика через egressgateway поставляемый в рамках дистрибутива
kafka_se_install: 'true'                           # флаг публикации конфигурации «kind: ServiceEntry» на каждый брокер
kafka_isolate_egress_ef: 'false'                   # флаг для реализации конфигураций «kind: EnvoyFilter» которая реализует функционал конфигурации «kind: DestinationRule» при необходимости использовать сертификаты для шифрования только для передачи метрик
kafka_resolution: DNS                              # значение resolution конфигурцаии «kind: ServiceEntry» на каждый брокер
kafka_mesh_enabled: 'true'                         # использование функционала IGEG bootsrtap-сервер для egress
kafka_mesh_virtual_port: 19093                     # конкретизация промежуточного порта для маршрутизации, в рамках использования конфигураций маршрутизации IGEG bootsrtap-сервер для egress (необходимо использовать любой свободный порт в рамках проекта])
kafka_mesh_virtual_host: kafka.host                # хост, который будет использоваться в рамках sni запроса зашифрованного трафика к kafka
kafka:                                             # list брокеров, заполняются в зависимости от количества брокеров
  - host: kafka.host                                # хост брокера №1
#    name: brk1                                     # опционально, если не используется bootsrtap-сервер для egress (краткое наименование брокера №1)
#    ip: '*.*.*.*'                                  # опционально, если не используется bootsrtap-сервер для egress (ip брокера №1)
#    egressPort: 19021                              # опционально, если не используется bootsrtap-сервер для egress (любой свободный и уникальный порт для брокера №1)
  - host: kafka2.host                               # хост брокера №2
#    name: brk2                                     # опционально, если не используется bootsrtap-сервер для egress (краткое наименование брокера №2)
#    ip: '*.*.*.*'                                  # опционально, если не используется bootsrtap-сервер для egress (ip брокера №2)
#    egressPort: 19022                              # опционально, если не используется bootsrtap-сервер для egress (любой свободный и уникальный порт для брокера №2)
kafkaListString:                                    # список брокеров для отправки метрик в Кафка, используется только при активном параметре kafka_mesh_enabled: 'true'. Будет проигнорирован параметр kafka, так как указанный список проектов имеет больший приоритет для подстановки
  - 'kafka.broker.ru'
  - 'kafka2.broker.ru'

install_ingress: 'false'                           # флаг по установке ingressgateway, для передачи и чтения метрик
ingress:
  route_select: 'true'                             # реализация входящего трафика по запросам на сбор метрик
  route_select_trace: 'false'                      # реализация входящего трафика по запросам на сбор трассировок
  route_select_logs: 'false'                       # реализация входящего трафика по запросам на сбор логов
  version: 'false'                                 # версия istio принимаются значения 1.17/1.19 если значение отличное, то будет использоваться версия 1.20
  replicas: 1                                      # количество реплик IGEG (ingressgateway)
  readinessProbe:
    failureThreshold: 30
    initialDelaySeconds: 1
    periodSeconds: 2
    successThreshold: 1
    timeoutSeconds: 1
  serviceIstiod: istiod-basic                      # наименование сервиса контрольной панели, компонента «istiod»
  istioControlPlane: federation-istio-system       # наименование namespace контрольной панели, к которой подключен namespace компонента GATM
  resources:
    limits:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 500Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 500Mi

kubePortNamespace: <port>                          # порт, в рамках которого будет произведен перехват трафика внутри проекта на сервер KubeAPI, для дальнейшем маршрутизации на egressgateway 

install_egress: 'true'                             # установка egressgateway из дистрибутива
user_selector_egress: 'app: user-egress-selector'  # если установка egressgateway реализуется пользователем (install_egress: 'false'), то указывается selector пользовательской реализации, для успешного маршрутизирования
user_egress_secret:                                # путь до сертификатов в рамках Pod пользовательского egressgateway (install_egress: 'false'), рекомендуется организовать монтирование секретов посредством vault
  monitoring:                                      # пути к сертификатом, для сбора системных метрик
    ca: /etc/config/system-metrics/ca.crt
    crt: /etc/config/system-metrics/tls.crt
    key: /etc/config/system-metrics/tls.key
  kafka:                                           # пути к сертификатам, для передачи метрик в kafka
    ca: /etc/config/ssl/tengri_ca.cer
    crt: /etc/config/ssl/tengri.pem
    key: /etc/config/ssl/tengri.key
  prometheus:                                      # пути к сертификатам, для передачи метрик в prometheus
    ca: /secret/config/prometheus-metrics/metrics-ca-chain.pem
    crt: /secret/config/prometheus-metrics/metrics.crt
    key: /secret/config/prometheus-metrics/metrics.key
egress:
  replicas: 1                                      # количество реплик IGEG (egressgateway)
  version: '1.17'                                  # версия istio принимаются значения 1.17/1.19 если значение отличное, то будет использоваться версия 1.20
  serviceIstiod: istiod-synapse-control-panel      # наименование сервиса контрольной панели, компонента «istiod»
  istioControlPlane: synapse-control-panel         # наименование namespace контрольной панели, к которой подключен namespace компонента GATM
  readinessProbe:
    failureThreshold: 30
    initialDelaySeconds: 1
    periodSeconds: 2
    successThreshold: 1
    timeoutSeconds: 1
  resources:
    limits:
      cpu: "200m"                                  # ресурсы limits/cpu приложения IGEG (egressgateway)
      ephemeral_storage: 500Mi                     # ephemeral_storage
      memory: "300Mi"                              # ресурсы limits/memory приложения IGEG (egressgateway)
    requests:
      cpu: "200m"                                  # ресурсы requests/cpu приложения IGEG (egressgateway)
      ephemeral_storage: 500Mi                     # ephemeral_storage
      memory: "300Mi"                              # ресурсы requests/memory приложения IGEG (egressgateway)

tracing:                                           # настройка передачи трассировок приложения IGEG
  custom_tags: ''                                  # обогащение заголовками
  zipkin:                                          # адрес сервиса для сбора трассировок
    svc: synapse-tracer-svc                        # имя сервиса для сбора трассировок (в рамках кластера)
    port: 8788                                     # порт сервиса для сбора трассировок (в рамках кластера)
  sampling: 100                                    # процент передаваемых трассировок (0-100)
  maxPathTagLength: 256                            # ограничение в рамках размера трассировки
  tlsSettings:                                     # настройки TLS при передаче трассировок
    caCertificates: "/var/run/secrets/istio/root-cert.pem"
    mode: SIMPLE

singlePodAdapter: 'true'                           # установка приложения kafka_adapter в рамках отдельного Pod
install_kafka_adapter: 'true'                      # флаг установки приложения kafka adapter
adapter:
  kafkaBatchNumMessages: 20000                     # количество сообщений для пакетной записи. По умолчанию 10000, при (kfgt_integration: enabled, kfgt_proto: HTTP) рекомендуется устанавливать < 5000
#  kafkaBrokersList: kafka1.ru:9093,kafka2.ru:9093  # список брокеров
  kafkaTopic: topic                                # используемый топик Kafka
  kfgt_integration: disabled                       # передача метрик в формате плоского «.JSON» в приложение KFGT (при включении параметр enabled)
#  delimiter_labels: '_'                           # конкретизация делиметра в рамках тэгов сообщения, по умолчанию «_», пример формирования тэгов в рамках кафка - labels_app: values
#  timestamp_milli: 'true'                         # добавление милисекунд в рамках секции timestamp
  kfgt_proto: HTTP                                 # указывается при (kfgt_integration: enabled), формат взаимодействия HTTP/GRPC
  kfgt_service: service-kfgt                       # kind: service приложения KFGT (kfgt_integration: enabled)
  kfgt_port: 8080                                  # port kind: service приложения KFGT (kfgt_integration: enabled)
  kfgt_batch_period: '15'                          # по умолчанию 15, пользовательское время в секундах между отправками пакетов метрик. Используется для ненагруженых метриками систем. Необходимо для отправки малых пакетов метрик в KFGT (меньше, чем значение kafkaBatchNumMessages метрик)
  kfgt_separator: \n                               # по умолчанию \n, разделитель между метриками в рамках одного пакета, отправляемого в KFGT. Значение должно совпадать со значением spring.kafka.producer.batch.separator из конфигурации приложения KFGT. Используется при (kfgt_proto: HTTP) и если в настройках KFGT указан пользовательский параметр spring.kafka.producer.batch.separator
  userRouteConfig: 'true'                          # флаг для включения функции умной маршрутизации приложения Adapter
#   useJsonRouteConfigVar: ''                                                   # описание секции «variables» в JSON
#   useJsonRouteConfigRoute: ''                                                 # описание секции «routes» в JSON
#   routeConfig:                                                                # секция для описания правил маршрутизации Kafka. Важно! Не заполняется, если заполнены параметры useJsonRouteConfigVar, useJsonRouteConfigRoute
#     connections:                                                              # секция с перечислением брокеров Kafka
#       kafka1:                                                                 # наименование брокера (может быть произвольным)
#         batchNumMessages: 10000                                               # количество сообщений для пакетной записи
#         brokerList: '<host>:<port>'                                           # хост и порт брокера
#         compression: none                                                     # формат сжатия данных. Доступные значения: none, gzip, snappy, lz4, zstd
#     variables:                                                                # секция с перечислением переменных для фильтрации данных
#       var1:                                                                   # переменная №1, обозначение секции с параметром может быть любым строковым значением, валидным для ключей map в yaml
#         type: header                                                          # тип переменной, доступные значения - header, label
#         name: User-Agent                                                      # наименование переменной
#       var2:
#         type: label                               
#         name: job
#       var3:
#         type: label
#         name: namespace
#         regex: "(ns-test|test-test)"                                          # регулярное выражение для значений переменной, необязательный параметр (по умолчанию «(.*)»). По данному значению будет происходить фильтрация значений для конкретной переменной                
#     routes:                                                                   # секция с правилами маршрутизации
#       kafka1:                                                                 # правила для брокера kafka1                            
#         - var1: vmagent                                                       # значение для переменной var1 из секции «variables»
#           var2: istio-pods                                                    # значение для переменной var2 из секции «variables»
#           topic: topic1                                                       # наименование топика для отправки метрик
#         - var1: vmagent
#           var3: gatm-test
#           topic: topic2
#           delimiter: "."                                                      # делиметр для отправляемых метрик, необязательный параметр (значение по умолчанию «_», принимает на вход любое значение формата string)
#         - topic: default-topic        
#           delimiter: "."
#           default: true                                                       # маршрут по умолчанию
  istio:
    destinationRule:
      spec:
        trafficPolicy:                             # настройки паттерна circuit breaker в рамках вызова сервиса, параметры формируются в рамках конфигурации «kind: DestinationRule»
          outlierDetection:
            enabled: 'false'
            baseEjectionTime: 1m
            consecutive5xxErrors: 10
            interval: 1m
            maxEjectionPercent: 20
  podDisruptionBudget:
    spec:
      minAvailable: 1
  strategy:                                        # указывается при «singlePodAdapter: 'true'»
    rollingParams:
      maxSurge: 100%
      maxUnavailable: 25%
  livenessProbe:
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  resources:
    limits:
      cpu: "200m"                                  # ресурсы limits/cpu приложения gatm_kafka_adapter
      ephemeral_storage: 500Mi                     # ephemeral_storage
      memory: "300Mi"                              # ресурсы limits/memory приложения gatm_kafka_adapter
    requests:
      cpu: "200m"                                  # ресурсы requests/cpu приложения gatm_kafka_adapter
      ephemeral_storage: 500Mi                     # ephemeral_storage
      memory: "300Mi"                              # ресурсы requests/memory приложения gatm_kafka_adapter
  svpx:                                            # указывается при «singlePodAdapter: 'true'» ресурсы для контейнера svpx
    resources:
      limits:
        cpu: 200m
        memory: 300Mi
      requests:
        cpu: 100m
        memory: 200Mi

synapse_trace:                                     # параметры установки хранилища, для трассировок
  use_trace_proxy: 'false'                         # флаг использования приложения trace-proxy (устарело) при организации серверной части по хранению трассировок
  ignore_error_storage: 'true'                     # флаг по игнорированию ошибок для trace-select, позволяет вычитывать данные при ошибки на одном из реплик storage
  input_tls: 'ISTIO_MUTUAL'                        # поддерживается 2 значения SIMPLE - в рамках реализации необходимо настроить передачу трейсов в рамках istio-proxy как SIMPLE, ISTIO_MUTUAL - в рамках реализации необходимо настроить передачу трейсов в рамках istio-proxy как ISTIO_MUTUAL
  input_tls_reload_certs: 10s                      # только при указании «input_tls: 'SIMPLE'», периодичность проверки обновления сертификатов istio-proxy
  install: 'false'                                 # флаг по установки хранилища, для трассировок
  tracing_application:                             # флаг по передачи трассировок в рамках приложений trace (рекомендуем выставлять «false», для избежания бесконечного цикла)
    enabled: 'false'
  maxTraces: 10000                                 # количество трассировок которые будут храниться в рамках 1 реплики приложения «gatm_tproxy_storage»
  insert:                                          # параметры настройки приложения «gatm_tcollector» (insert)
    reconnect_interval: 3                          # интервал в секундах между повторными попытками переподключения к стораджу
    replicas: 1
    strategy:
      rollingParams:
        maxSurge: 100%
        maxUnavailable: 25%
    istio:
      destinationRule:
        spec:
          trafficPolicy:                           # настройки паттерна circuit breaker в рамках вызова сервиса, параметры формируются в рамках конфигурации «kind: DestinationRule»
            outlierDetection:
              enabled: 'false'
              baseEjectionTime: 1m
              consecutive5xxErrors: 10
              interval: 1m
              maxEjectionPercent: 20
    resources:
      limits:
        cpu: 300m
        ephemeral_storage: 500Mi
        memory: 300Mi
      requests:
        cpu: 300m
        ephemeral_storage: 500Mi
        memory: 300Mi
    livenessProbe:
      failureThreshold: 30
      initialDelaySeconds: 5
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    readinessProbe:
      failureThreshold: 30
      initialDelaySeconds: 5
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    svpx:
      resources:
        limits:
          cpu: 200m
          memory: 300Mi
        requests:
          cpu: 100m
          memory: 200Mi

  select:                                          # параметры настройки приложения «gatm_tquery» (select)
    replicas: 1
    strategy:
      rollingParams:
        maxSurge: 100%
        maxUnavailable: 25%
    istio:
      destinationRule:
        spec:
          trafficPolicy:                          # настройки паттерна circuit breaker в рамках вызова сервиса, параметры формируются в рамках конфигурации «kind: DestinationRule»
            outlierDetection:
              enabled: 'false'
              baseEjectionTime: 1m
              consecutive5xxErrors: 10
              interval: 1m
              maxEjectionPercent: 20
    resources:
      limits:
        cpu: 300m
        ephemeral_storage: 500Mi
        memory: 300Mi
      requests:
        cpu: 300m
        ephemeral_storage: 500Mi
        memory: 300Mi
    livenessProbe:
      failureThreshold: 30
      initialDelaySeconds: 5
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    readinessProbe:
      failureThreshold: 30
      initialDelaySeconds: 5
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    svpx:
      resources:
        limits:
          cpu: 200m
          memory: 300Mi
        requests:
          cpu: 100m
          memory: 200Mi

  proxy:                                           # параметры настройки приложения «gatm_tproxy_storage» (proxy)
    replicas: 1
    strategy:
      rollingParams:
        maxSurge: 100%
        maxUnavailable: 25%
    istio:
      destinationRule:
        spec:
          trafficPolicy:                          # настройки паттерна circuit breaker в рамках вызова сервиса, параметры формируются в рамках конфигурации «kind: DestinationRule»
            outlierDetection:
              enabled: 'false'
              baseEjectionTime: 1m
              consecutive5xxErrors: 10
              interval: 1m
              maxEjectionPercent: 20
    resources:
      limits:
        cpu: 300m
        ephemeral_storage: 500Mi
        memory: 300Mi
      requests:
        cpu: 300m
        ephemeral_storage: 500Mi
        memory: 300Mi
    livenessProbe:
      failureThreshold: 30
      initialDelaySeconds: 5
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    readinessProbe:
      failureThreshold: 30
      initialDelaySeconds: 5
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    svpx:
      resources:
        limits:
          cpu: 200m
          memory: 300Mi
        requests:
          cpu: 100m
          memory: 200Mi

#  count_storage:                                   # параметр в зависимости от значения «synapse_trace.storage.replicas», если значение 1, то указанная секция должна отсутствовать, если более 1-го, то нужно описать секцию «- index: 1», например предполагается реализовать 3 replicas storage, то в рамках секции необходимо заполнить 2 записи, первая «- index: 1» и вторая «- index: 2»
#    - index: 1
  storage:                                         # параметры настройки приложения «gatm_tremote_storage» (storage)
    replicas: 1
    resources:
      limits:
        cpu: 300m
        ephemeral_storage: 500Mi
        memory: 4000Mi
      requests:
        cpu: 300m
        ephemeral_storage: 500Mi
        memory: 300Mi
    istio:
      destinationRule:
        spec:
          trafficPolicy:                          # настройки паттерна circuit breaker в рамках вызова сервиса, параметры формируются в рамках конфигурации «kind: DestinationRule»
            outlierDetection:
              enabled: 'false'
              baseEjectionTime: 1m
              consecutive5xxErrors: 10
              interval: 1m
              maxEjectionPercent: 20
    livenessProbe:
      failureThreshold: 30
      initialDelaySeconds: 5
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    readinessProbe:
      failureThreshold: 30
      initialDelaySeconds: 5
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    svpx:
      resources:
        limits:
          cpu: 200m
          memory: 300Mi
        requests:
          cpu: 100m
          memory: 200Mi

synapse_logs:                                      # параметры установки хранилища для логов
  install: 'false'                                 # флаг по установки хранилища для логов
  insert:                                          # параметры настройки приложения «gatm_linsert»
    replicas: 1
    strategy:
      rollingParams:
        maxSurge: 100%
        maxUnavailable: 25%
    istio:
      destinationRule:
        spec:
          trafficPolicy:                           # настройки паттерна circuit breaker в рамках вызова сервиса, параметры формируются в рамках конфигурации «kind: DestinationRule»
            outlierDetection:
              enabled: 'false'
              baseEjectionTime: 1m
              consecutive5xxErrors: 10
              interval: 1m
              maxEjectionPercent: 20
    resources:
      limits:
        cpu: 300m
        ephemeral_storage: 500Mi
        memory: 300Mi
      requests:
        cpu: 300m
        ephemeral_storage: 500Mi
        memory: 300Mi
    livenessProbe:
      failureThreshold: 30
      initialDelaySeconds: 5
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    readinessProbe:
      failureThreshold: 30
      initialDelaySeconds: 5
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    svpx:
      resources:
        limits:
          cpu: 200m
          memory: 300Mi
        requests:
          cpu: 100m
          memory: 200Mi

  select:                                          # параметры настройки приложения «gatm_lselect»
    replicas: 1
    strategy:
      rollingParams:
        maxSurge: 100%
        maxUnavailable: 25%
    istio:
      destinationRule:
        spec:
          trafficPolicy:                          # настройки паттерна circuit breaker в рамках вызова сервиса, параметры формируются в рамках конфигурации «kind: DestinationRule»
            outlierDetection:
              enabled: 'false'
              baseEjectionTime: 1m
              consecutive5xxErrors: 10
              interval: 1m
              maxEjectionPercent: 20
    resources:
      limits:
        cpu: 300m
        ephemeral_storage: 500Mi
        memory: 300Mi
      requests:
        cpu: 300m
        ephemeral_storage: 500Mi
        memory: 300Mi
    livenessProbe:
      failureThreshold: 30
      initialDelaySeconds: 5
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    readinessProbe:
      failureThreshold: 30
      initialDelaySeconds: 5
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    svpx:
      resources:
        limits:
          cpu: 200m
          memory: 300Mi
        requests:
          cpu: 100m
          memory: 200Mi

  count_storage:                                   # параметр в зависимости от значения «synapse_logs.storage.replicas», если значение 1, то указанная секция должна отсутствовать, если более 1-го, то нужно описать секцию «- index: 1», например предполагается реализовать 3 replicas storage, то в рамках секции необходимо заполнить 2 записи, первая «- index: 1» и вторая «- index: 2»
    - index: 1
  storage:                                         # параметры настройки приложения «gatm_lstorage»
    replicas: 2
    retentionPeriod: 1d                            # время хранения логов (минимальное значение 1h)
    resources:
      limits:
        cpu: 300m
        ephemeral_storage: 500Mi
        memory: 300Mi
      requests:
        cpu: 300m
        ephemeral_storage: 500Mi
        memory: 300Mi
    istio:
      destinationRule:
        spec:
          trafficPolicy:                          # настройки паттерна circuit breaker в рамках вызова сервиса, параметры формируются в рамках конфигурации «kind: DestinationRule»
            outlierDetection:
              enabled: 'false'
              baseEjectionTime: 1m
              consecutive5xxErrors: 10
              interval: 1m
              maxEjectionPercent: 20
    livenessProbe:
      failureThreshold: 30
      initialDelaySeconds: 5
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    readinessProbe:
      failureThreshold: 30
      initialDelaySeconds: 5
      periodSeconds: 10
      successThreshold: 1
      timeoutSeconds: 5
    svpx:
      resources:
        limits:
          cpu: 200m
          memory: 300Mi
        requests:
          cpu: 100m
          memory: 200Mi

install_agent: 'true'                              # флаг установки приложения 'agent'
agent:
  install_in_proxy: 'false'                        # добавление SVPX в рамках Deployment 'agent', используется при установке в контрольную панель, которая не подключена к ServiceMesh
  user_in_proxy: 1000690001                        # реализуется при флаге install_in_proxy: 'true', если установка идет в рамках Openshift, то необходимо указать пользователя, который будет отличным от пользователя приложения, например в рамках namespace диапазон пользователей идет 10000, то пользователя для нужно указать 10001
  group_in_proxy: 1000690001                       # реализуется при флаге install_in_proxy: 'true', если установка идет в рамках Openshift, то необходимо указать группу пользователя, который будет отличным от группы пользователя приложения, например в рамках namespace диапазон группы пользователей идет 10000, то пользователя для нужно указать 10001
  add_headless_istiod: 'false'                     # добавление сервиса istiod, по сбору метрик, используется при установке в контрольной панели приложения 'agent'
  remoteWrite:
    kafka: 'true'                                  # флаг передачи метрик в рамках kafka (будет использоваться интеграция с приложением GATM kafka adapter)
    externalPrometheus:
      integration: 'false'                         # передача метрик в prometheus хранилище
  #      host:                                     # внешний хост prometheus хранилища
  #      port:                                     # внешний порт prometheus хранилища
  #      path: insert/2/prometheus                 # path внешнего хранилища
  #      resolution: DNS                           # resolution в рамках ServiceEntry внешнего хранилища формата prometheus
  #      ip:                                       # опционально, IP-адрес внешнего хранилища prometheus
  maxScrapeSize: 1Gib                              # максимальный объем ответа при scrape метрик
  maxDiskUsagePerURL: 1Gib                         # если удаленное хранилище недоступно, то метрики сохраняются в буфере приложения. Размер буфера фиксируется указанным параметром
  scrapeInterval: 1m                               # интервал по scrape
  scrapeTimeOut: 1m                                # timeout на запрос scrape
  scrapeCluster: apps.ocp.syn-dev                  # идентификатор кластера
  livenessProbe:
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  queues: 8                                        # количество очередей для отправки сообщений в удаленное хранилище (по умолчанию 8)
  resources:
    limits:
      cpu: "200m"                                  # ресурсы limits/cpu приложения gatm_agent
      ephemeral_storage: 500Mi                     # ephemeral_storage
      memory: "300Mi"                              # ресурсы limits/memory приложения gatm_agent
    requests:
      cpu: "200m"                                  # ресурсы requests/cpu приложения gatm_agent
      ephemeral_storage: 500Mi                     # ephemeral_storage
      memory: "300Mi"                              # ресурсы requests/memory приложения gatm_agent

install_event_exporter: 'true'                    # необходимость в установке приложения event-exporter
event_exporter:
  scrape_interval: 1m                              # scrape_interval сбора метрик событий
  scrape_timeout: 1m                               # scrape_timeout сбора метрик событий
  install_in_proxy: 'false'                        # добавление SVPX в рамках Deployment event_exporter, используется при установке в контрольную панель, которая не подключена к ServiceMesh 
  use_sa_agent: "true"                            # использование ServiceAccount с наименованием synapse-metrics-sa (при выставлении флага true, нужно расширить ролевую модель ServiceAccount synapse-metrics-sa на get,list,watch Event)
  replicas: 1                                      # количество реплик event_exporter
  event_types: 'warning,normal'                    # типы сбора событий (поддерживается 2 типа - warning,normal)
  get_events_namespaces: 'synapse-operator,synapse-control-panel,synapse-rate-limit'  # имена проектов, с которых будет производитьcя сбор event (пример с указанием нескольких namespace - 'synapse-metrics-system,istio-system')
  add_message: 'enabled'                           # опция добавления в tag метрики message конфигурации event 
  resyncInterval: 5                     # периодичность принудительной очистки кэша приложения Event Exporter в минутах
  eventTTL: 5                           # время в минутах, через которое событие считается устаревшим    
  eventTTLCheckIntint: 30               # интервал (в секундах) для периодической очистки от устаревших событий
  ignoreNullTime: 'false'               # флаг, управляющий поведением в ситуации, когда у события неизвестно время последнего наблюдения (по умолчанию = false). При значении true событие запишется в метрики, но удалится при ближайшей чистке, при значении false событие запишется с текущим временем
  check_config:
    enabled: 'false'                                          # реализация мониторинга в рамках конфигураций Pod, и перевод значения в метрики
    check_interval: 10s                                       # интервал в рамках синхронизации с KubeAPI                 
    jobs:                                                     # список метрик которые будут генерироваться в рамках работы event-exporter
      - name_metric: istiod_readiness_probe                   # имя метрики которая будет генерироваться по «kind: Pod»
        namespaces:                                           # список проектов где будет произведен поиск «kind: Pod» для мониторинга
          - name:
        labelSelectors:                                       # фильтр в рамках меток (label) конфигураций «kind: Pod»
          - key: app
            operator: In
            value: istiod
        deleteOldMetrics: 'true'                              # флаг по хранению удаленных конфигураций (при значении «true», удаленные конфигурации будут храниться в рамках значения configTTL, так же удаленно конфигурации формируются в рамках метрики со значением 0, если значение 1, то конфигурация активная)
        configTTL: 10m                                        # время хранения информации о «kind: Pod» после события добавления, изменения, удаления, например после публикации информации, приложение будет генерировать метрики в рамках 10 минут, после указанного диапазона метрика будет удалена
        tags:                                                 # добавление тегов в рамках мониторинга, можно ссылаться на любую структуру «kind: Pod» посредством JMES path
          - name: initialDelaySeconds                         # наименование тэга 
            path: "spec.containers[?name == 'discovery'].readinessProbe.initialDelaySeconds"      # значение тэга, результат запроса JMES path в рамках «kind: Pod»
          - name: phasestatus
            path: "status.containerStatuses[*].lastTerminationState.terminated.message"
  istio:
    destinationRule:
      spec:
        trafficPolicy:                             # настройки паттерна circuit breaker в рамках вызова сервиса, параметры формируются в рамках конфигурации «kind: DestinationRule»
          outlierDetection:
            enabled: 'false'
            baseEjectionTime: 1m
            consecutive5xxErrors: 10
            interval: 1m
            maxEjectionPercent: 20
  podDisruptionBudget:
    spec:
      minAvailable: 1                              # значение minAvailable в рамках конфигурации «podDisruptionBudget»
  strategy:                                        # параметры strategy в рамках deployment  
    rollingParams:
      maxSurge: 100%
      maxUnavailable: 25%
  livenessProbe:
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  resources:                                       # квота на ресурсы
    limits:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
  svpx:                                            # установка используемых ресурсов для контейнера svpx
    resources:
      limits:
        cpu: 200m
        memory: 300Mi
      requests:
        cpu: 100m
        memory: 200Mi

# tenant_agent:                                    # секция которая позволяет устанавливать параллельно приложения 'agent' (kafka-adapter в рамках pod прилоежния 'agent') и event-exporter (для возможности органзиации раздельного сбора с конкретной области проектов) нижеописанные параметры параметризуют тенант
#   - index: 'metrics'                             # уникальный индекс тенанта (обязательно указывается)
#     install_agent: 'true'                        # флаг установки приложения 'agent' в рамках тенанта
#     agent:
#       tenant: '2'                                # указание тенанта в рамках записи в локальное хранилище GATM (числовое значение)
#       replicas: 1
#       istio_pods:
#         relabel_get_label:
#            labels: 'true'                        # добавление сбора меток из Pod и реализация их в тэгах по метрикам
#       remoteWrite:
#         kafka: 'false'                           # передача данных в рамках Kafka
#         externalPrometheus:
#           path: insert/2/prometheus              # возможность изменить тенант при записи в удаленное хранилище формата Prometheus
#           integration: 'false'
#           createConfig: 'false'                  # реаизация внешнего трафика до сервера Prometheus (добавление конфигураций Istio для реализации корректного вывода трафика)
#           host:
#           port:
#           resolution: DNS
#           ip:
#       maxScrapeSize: 1Gib
#       maxDiskUsagePerURL: 1Gib
#       scrapeInterval: 1m
#       scrapeTimeOut: 1m
#       scrapeCluster: '272.vdc04.sy.dev.sbt'
#       queues: 8
#       svpx:
#         resources:
#           limits:
#             cpu: 300m
#             memory: 300Mi
#           requests:
#             cpu: 300m
#             memory: 300Mi
#       livenessProbe:
#         failureThreshold: 30
#         initialDelaySeconds: 5
#         periodSeconds: 10
#         successThreshold: 1
#         timeoutSeconds: 5
#       readinessProbe:
#         failureThreshold: 30
#         initialDelaySeconds: 5
#         periodSeconds: 10
#         successThreshold: 1
#         timeoutSeconds: 5
#       resources:
#         limits:
#           cpu: 300m
#           ephemeral_storage: 500Mi
#           memory: 300Mi
#         requests:
#           cpu: 300m
#           ephemeral_storage: 500Mi
#           memory: 300Mi
#       istio_control:                             # сбор метрик в рамках тенанта контрольной панели
#         scrape: "false"
#         scrape_interval: 30s
#         scrape_timeout: 30s
#       #  relabel_add_label:
#       #    - name:
#       #      value:
#         enabled_metric_relabel_configs: 'false'
#       #    relabel_regex: ''
#         scrape_own: 'false'
#         scrape_namespaces:
#           - name: istio-system
#       scrape_kubernetes_pods:                    # сбор прикладных метрик в рамках тенанта, по аннотациям в рамках «kind: Service»
#         scrape: "false"
#         scrape_interval: 30s
#         scrape_timeout: 30s
#         labelmap: 'true'
#         namespace_labels: 'false'
#       #  relabel_config:
#       #    - source_labels:
#       #      target_label:
#       #      replacement:
#       #      separator:
#       #      regex:
#       #      action:
#         enabled_metric_relabel_configs: 'false'
#       #    relabel_regex: ''
#         scrape_own_namespace: 'false'
#         scrape_all_namespace: 'false'
#         scrape_namespaces:
#           - synapse-rate-limit
#         #  - namespace2
#       scrape_srls_pods:                          # сбор метрик в рамках тенанта SRLS
#         scrape: "false"
#         scrape_interval: 30s
#         scrape_timeout: 30s
#       #  relabel_add_label:
#       #    - name:
#       #      value:
#         enabled_metric_relabel_configs: 'false'
#       #    relabel_regex: ''
#         scrape_own_namespace: 'false'
#         scrape_all_namespace: 'false'
#       #  scrape_namespaces:
#       #    - name: synapse-metrics
#         #  - name: namespace2
#       istio_pods:                                # сбор сетевых метрик (istio-proxy) в рамках тенанта
#         scrape: "true"
#         scrape_interval: 30s
#         scrape_timeout: 30s
#         relabel_get_label:
#           stats: 'false'
#           namespace: 'true'
#           pod_name: 'true'
#           namespace_labels: 'false'
#       #  relabel_add_label:
#       #    - name:
#       #      value:
#         enabled_metric_relabel_configs: 'false'
#       #    relabel_regex: ''
#         scrape_own_namespace: 'false'
#         scrape_all_namespace: 'false'
#         scrape_namespaces:
#           - name: synapse-metrics
#       system_metrics_targets:                    # сбор системных метрик в рамках тенанта
#         - name: metrics
#           scrape: "true"
#           enabled_metric_relabel_configs: "false"
#           namespace: synapse-metrics
#       #    relabel_regex:
#       #    relabel_add_label:
#       #      - name:
#       #        value:
#       #    group_namespaces:
#       #     - job_name: one
#       #       first_namespace: namespace1
#       #       namespaces:
#       #         - name: namespace2
#       #         - name: namespace3
#       #  - name:
#       #    namespace:
#       #    relabel_regex:
#     install_event_exporter: 'true'               # флаг установки приложения event-exporter в рамках тенанта
#     event_exporter:
#       scrape_interval: 1m
#       scrape_timeout: 1m
#       replicas: 1
#       event_types: 'warning,normal'
#       get_events_namespaces: 'synapse-metrics'
#       add_message: 'enabled'
#       resyncInterval: 5                          # периодичность принудительной очистки кэша приложения Event Exporter в минутах
#       eventTTL: 5                                # время в минутах, через которое событие считается устаревшим
#       eventTTLCheckIntint: 30                    # интервал (в секундах) для периодической очистки от устаревших событий
#       ignoreNullTime: 'false'                    # флаг, управляющий поведением в ситуации, когда у события неизвестно время последнего наблюдения (по умолчанию = false). При значении true событие запишется в метрики, но удалится при ближайшей чистке, при значении false событие запишется с текущим временем
#       check_config:
#         enabled: 'false'
#         check_interval: 10s
#         jobs:
#           - name_metric: istiod_readiness_probe_initial_delay_seconds
#             namespaces:
#               - name:
#             labelSelectors:
#               - key: app
#                 operator: In
#                 value: istiod
#             deleteOldMetrics: 'true'
#             configTTL: 10m
#             tags:
#               - name: initialDelaySeconds
#                 path: "spec.containers[?name == 'discovery'].readinessProbe.initialDelaySeconds"
#               - name: phasestatus
#                 path: "status.containerStatuses[*].lastTerminationState.terminated.message"
#       podDisruptionBudget:
#         spec:
#           minAvailable: 1
#       strategy:
#         rollingParams:
#           maxSurge: 100%
#           maxUnavailable: 25%
#       livenessProbe:
#         failureThreshold: 30
#         initialDelaySeconds: 5
#         periodSeconds: 10
#         successThreshold: 1
#         timeoutSeconds: 5
#       readinessProbe:
#         failureThreshold: 30
#         initialDelaySeconds: 5
#         periodSeconds: 10
#         successThreshold: 1
#         timeoutSeconds: 5
#       resources:
#         limits:
#           cpu: 300m
#           ephemeral_storage: 500Mi
#           memory: 300Mi
#         requests:
#           cpu: 300m
#           ephemeral_storage: 500Mi
#           memory: 300Mi
#       svpx:
#         resources:
#           limits:
#             cpu: 100m
#             memory: 200Mi
#           requests:
#             cpu: 100m
#             memory: 200Mi
#     install_adapter: 'true'
#     adapter:
#       replicas: 1
#       kafkaBatchNumMessages: 5000
#       use_default_adapter: 'true'                                                     # опция использования основного приложения Adapter. При значении 'true' приложение Adapter в рамках тенанта не устанавливается (значение по умолчанию - 'false')
#       kfgt_integration: disabled
#       kfgt_proto: HTTP
#       kfgt_service: http-kafka-adapter
#       userRouteConfig: 'false'
#     #   routeConfig:
#     #     connections:
#     #       kafka1:
#     #         batchNumMessages: 10000
#     #         brokerList: egress-kafka-mesh.gatm-test.svc.cluster.local:19093
#     #         compression: none
#     #     variables:
#     #       var1:
#     #         type: header
#     #         name: User-Agent
#     #       var2:
#     #         type: label
#     #         name: job
#     #       var3:
#     #         type: label
#     #         name: namespace
#     #         regex: "(gatm-test|synapse-metrics-agent)"
#     #     routes:
#     #       kafka1:
#     #         - var1: vmagent
#     #           var2: istio-pods
#     #           topic: istio-pods
#     #         - var1: vmagent
#     #           var3: gatm-test
#     #           topic: gatm-test-only
#     #           delimiter: "."
#     #         - topic: default-topic
#     #           delimiter: "."
#     #           default: true
#       delimiter_labels: '.'
#       timestamp_milli: 'true'
#       kfgt_port: 8080
#       kfgt_batch_period: '15'
#       kafkaBrokersList: kafka.solution.ru:443
#       kafkaTopic: metricstesttenant
#       kafka_egress_config_apply: 'true'
#       kafkaPort: 443
#       kafka_add_external_port_vs: 'true'
#       kafka_se_install: 'true'
#       kafka_resolution: DNS
#       kafka_add_sourceLabel: 'true'
#       kafka_isolate_egress_ef: 'false'
#       kafka_mesh_enabled: 'true'
#       kafka_mesh_virtual_port: 19094
#       kafka_mesh_virtual_host: kafka.solution.ru
#       kafka:
#         - host: kafka.solution.ru
#           name: broker2
#           ip: **.**.***.**
#           egressPort: 19002
#       livenessProbe:
#         failureThreshold: 30
#         initialDelaySeconds: 5
#         periodSeconds: 10
#         successThreshold: 1
#         timeoutSeconds: 5
#       readinessProbe:
#         failureThreshold: 30
#         initialDelaySeconds: 5
#         periodSeconds: 10
#         successThreshold: 1
#         timeoutSeconds: 5
#       podDisruptionBudget:
#         spec:
#           minAvailable: 1
#       strategy:
#         rollingParams:
#           maxSurge: 100%
#           maxUnavailable: 25%
#       resources:
#         limits:
#           cpu: 300m
#           ephemeral_storage: 500Mi
#           memory: 300Mi
#         requests:
#           cpu: 300m
#           ephemeral_storage: 500Mi
#           memory: 300Mi
#       svpx:
#         resources:
#           limits:
#             cpu: 100m
#             memory: 200Mi
#           requests:
#             cpu: 100m
#             memory: 200Mi
#     install_egress: 'true'
#     egress:
#       vault:
#         kv: DEV_DZO/A/DEV/GATM/KV
#         system_metrics_custom_ca: 'false'
#         system_metrics_tls_vault_crt_name: 'ca.crt'
#         pre_populate_only: "true"
#         system_metrics_tls_vault: 'false'
#         secret_base64: 'true'
#         pki_engine:
#           enabled: 'true'
#           egress:
#             kafka:
#               pki_enabled: 'true'
#               pki_path: A/DEV/GATM/PKI/issue/pki-sbt
#               common_name: kafka.solution.ru
#               data:
#                 ca:
#                   name: issuing_ca
#                   range: 'false'
#             prometheus:
#               pki_enabled: 'false'
#               pki_path: PKI/issue/pki
#               common_name: prometheus.host
#               data:
#                 ca:
#                   name: ca_chain
#                   range: 'false'
#             monitoring:
#               pki_enabled: 'false'
#               pki_path: PKI/issue/pki
#               common_name: federate.host
#               data:
#                 ca:
#                   name: issuing_ca
#                   range: 'false'
#         resources:
#           limits:
#             cpu: 500m
#             memory: 128Mi
#           requests:
#             cpu: 250m
#             memory: 64Mi
#         secmanNamespace: DEV_DZO
#         secmanRole: role-ga-secman-gatm
#         auth_path_enabled: 'true'
#         auth_path: auth/gatm
#       replicas: 1
#       user_egress_secret:
#         kafka:
#           ca: /var/ssl/tengri_ca.cer
#           crt: /var/ssl/tengri.pem
#           key: /var/ssl/tengri.key
#         prometheus:
#           ca: /secret/config/prometheus-metrics/metrics-ca-chain.pem
#           crt: /secret/config/prometheus-metrics/metrics.crt
#           key: /secret/config/prometheus-metrics/metrics.key
#       readinessProbe:
#         failureThreshold: 30
#         initialDelaySeconds: 1
#         periodSeconds: 2
#         successThreshold: 1
#         timeoutSeconds: 1
#       resources:
#         limits:
#           cpu: 300m
#           ephemeral_storage: 500Mi
#           memory: 500Mi
#         requests:
#           cpu: 300m
#           ephemeral_storage: 500Mi
#           memory: 500Mi


### параметры заполняются при необходимости агрегировать метрики

count_storage:                               # количество реплик приложения storage, для корректной организации записи и чтения метрик index следует организовать начиная с 0 (он же 1 replicas)
  - index: 0                                 # если количество replicas 1 (далее список останавливается)
  - index: 1                                 # если количество replicas 2 (далее список останавливается)

storage:
  replicas: 2                                # количество реплик storage (если количество реплик ровно 2, то необходимо в рамках секции count_storage указать 2 индекса «- index: 0» и «- index: 1»)
  retentionPeriod: 1d                        # время хранения метрик, также возможно указание часов (h), дней (d), недель (w) и года (y). Важно, фактически будет происходить хранение с прошедшим периодом, например при указании «1h», но физически хранение будет организовано примерно 2 часа, для корректной работы индексации
  resources:
    limits:
      cpu: 600m                              # ресурсы limits/cpu приложения storage
      ephemeral_storage: 500Mi               # ephemeral_storage
      memory: 600Mi                          # ресурсы limits/memory приложения storage
    requests:
      cpu: 300m                              # ресурсы requests/cpu приложения storage
      ephemeral_storage: 500Mi               # ephemeral_storage
      memory: 300Mi                          # ресурсы requests/memory приложения storage
  istio:
    destinationRule:
      spec:
        select:
          trafficPolicy:
            outlierDetection:
              enabled: 'false'
              baseEjectionTime: 1m
              consecutive5xxErrors: 10
              interval: 1m
              maxEjectionPercent: 20
        insert:
          trafficPolicy:
            outlierDetection:
              enabled: 'false'
              baseEjectionTime: 1m
              consecutive5xxErrors: 10
              interval: 1m
              maxEjectionPercent: 20
  livenessProbe:                             # параметры livenessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:                            # параметры readinessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  svpx:                                      # установка используемых ресурсов для контейнера svpx
    resources:
      limits:
        cpu: 300m
        memory: 300Mi
      requests:
        cpu: 300m
        memory: 300Mi

select:
  replicas: 1                                # количество реплик select
  dedup_minScrapeInterval: 60s               # интервал, в рамках которого будет производиться анализ по дублям в рамках метрик, рекомендуемое значение = scrapeInterval (при установке приложения 'Agent')
#  search_latencyOffset: 5s                  # интервал, при выставлении 5s означает, что в рамках выборки метрик значения не будут актуализированы за последние 5 секунд, рекомендовано выставлять значение по минимальному интервалу сбора метрик
  istio:
    destinationRule:
      spec:
        trafficPolicy:                       # настройки паттерна circuit breaker в рамках вызова сервиса, параметры формируются в рамках конфигурации «kind: DestinationRule»
          outlierDetection:
            enabled: 'false'
            baseEjectionTime: 1m
            consecutive5xxErrors: 10
            interval: 1m
            maxEjectionPercent: 20
  strategy:                                  # параметры strategy в рамках deployment
    rollingParams:
      maxSurge: 100%
      maxUnavailable: 25%
  resources:                                 # квота в рамках ресурсов
    limits:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
  livenessProbe:                             # параметры livenessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:                            # параметры readinessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  svpx:                                      # установка используемых ресурсов для контейнера svpx
    resources:
      limits:
        cpu: 200m
        memory: 300Mi
      requests:
        cpu: 100m
        memory: 200Mi

insert:
  replicas: 1                                # количество реплик insert
  maxLabelsPerTimeseries: 30                 # количество тегов метрики, передаваемое в рамках временного ряда 
  strategy:                                  # параметры strategy в рамках deployment
    rollingParams:
      maxSurge: 100%
      maxUnavailable: 25%
  istio:
    destinationRule:
      spec:
        trafficPolicy:                       # настройки паттерна circuit breaker в рамках вызова сервиса, параметры формируются в рамках конфигурации «kind: DestinationRule»
          outlierDetection:
            enabled: 'false'
            baseEjectionTime: 1m
            consecutive5xxErrors: 10
            interval: 1m
            maxEjectionPercent: 20
  resources:                                 # квота в рамках ресурсов
    limits:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
  livenessProbe:                              # параметры livenessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:                             # параметры readinessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  svpx:                                       # установка используемых ресурсов для контейнера svpx
    resources:
      limits:
        cpu: 200m
        memory: 300Mi
      requests:
        cpu: 100m
        memory: 200Mi

install_alert: "true"                         # необходимость в установке приложения alert
agent_alert:
  maxDiskUsagePerURL: 1Gib                    # если удаленное хранилище недоступно, то метрики сохраняются в буфере приложения. Размер буфера фиксируется указанным параметром
  labelAdd: 'cluster=clusterID'               # добавление метки по агрегированным метрикам (label)
  queues: 8                                   # количество очередей для отправки сообщений в удаленное хранилище (по умолчанию 8)
  livenessProbe:                              # параметры livenessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:                             # параметры readinessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  resources:                                  # квота в рамках ресурсов
    limits:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi

alert:
  replicas: 1                                 # количество реплик alert
  strategy:                                   # параметры strategy в рамках deployment
    rollingParams:
      maxSurge: 100%
      maxUnavailable: 25%
  resources:                                  # квота в рамках ресурсов
    limits:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
  livenessProbe:                               # параметры livenessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:                              # параметры readinessProbe
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  svpx:                                        # установка используемых ресурсов для контейнера svpx
    resources:
      limits:
        cpu: 300m
        memory: 300Mi
      requests:
        cpu: 100m
        memory: 200Mi
  rules:                                       # правила агрегации данных, задаются администраторами при установке
    - values:
        openshift-image-registry-image-registry-operator-alerts.yaml: | # наименование файла, который будет загружен в приложение alert, поддерживается формат «.yaml»
          groups:
            - name: ImageRegistryOperator                        # имя группы для агрегации
              rules:
                - expr: sum(apiserver_v1_image_imports_total)    # правило агрегации
                  record: :apiserver_v1_image_imports:sum        # новая метрика

Чарт «ext-gatm»#

Будут описаны отличия в рамках чарта «gatm», с учетом опции установки приложения alertmanager.

Изменение параметров, объединение:

# общие настройки кластера вынесены в отдельную секцию global
global:
  registry: { REGISTRY_ADDRESS }                           # ранее был registryHost
  clusterDomain: apps.kubernetes.ru                        # ранее был cluster
  imagePullSecret: "default-secret"                        # ранее был image_pull_secret
  containerOrchestrationSystem: "k8s"                      # ранее был useControl
  kubeAPIIP: '*.*.*.*'                                     # ранее был kubeAPIIP
  kubeAPIResolution: DNS                                   # ранее был kubeAPIResolution
  kubePort: 443                                            # ранее был kubePort
 
# централизованная параметризация для IGEG, поддерживаются только версии POLM
igeg:
  istioControlPlane: "synapse-control-plane"               # наименование проекта POLM, ранее параметр располагался по пути «ingress.istioControlPlane» и «egress.istioControlPlane», сервис istiod формируется по шаблону istiod-(igeg.istioControlPlane)
  pathToImage: synapse/synapse/igeg                        # path до образов IGEG
  proxyv2:
    hash: '****'                                           # sha256 образа приложения
 
# реализации подстановки hash образа приложений
gatm:
  pathToImage: synapse/synapse/gatm                             # path до образов GATM
  gatm_kafka_adapter:
    hash: dsvdbsdb                                              # sha256 образа приложения
  gatm_event_exporter:
    hash: '****'
  gatm_select:
    hash: '****'
  gatm_insert:
    hash: '****'
  gatm_agent:
    hash: '****'
  gatm_alert:
    hash: '****'
  gatm_alertmanager:
    hash: '****'
  gatm_storage:
    hash: '****'
  gatm_linsert:
    hash: '****'
  gatm_lselect:
    hash: '****'
  gatm_lstorage:
    hash: '****'
  gatm_tracing_collector:
    hash: '****'
  gatm_tracing_query:
    hash: '****'
  gatm_tracing_proxy_storage:
    hash: '****'
  gatm_tracing_remote_storage:
    hash: '****'

Новые параметры:

# установка ролевой модели
rbac:
  create: 'true'                   # установка ролевой модели для компонента GATM
  agent:
    cluster_role_binding: 'true'   # установка ClusterRoleBinding в рамках роли для работы agent
#    namespace_role_binding:       # опция указания списка проектов, в рамках которых будет реализован RoleBinding
#      - name: namespace1
#      - name: namespace2
  event_exporter:
    cluster_role_binding: 'true'   # установка ClusterRoleBinding в рамках роли для работы event_exporter
#    namespace_role_binding:       # опция указания списка проектов, в рамках которых будет реализован RoleBinding
#      - name: namespace1
#      - name: namespace2
 
# реализация сертификатов с использованием cert manager
certManager:
  enabled: 'false'                                  # флаг установки конфигураций cert manager, будут опубликованы конфигурации «kind: Certificate»
  createClusterIssuer: 'false'                      # реализация ClusterIssuer с самоподписанными сертификатами
  apiVersion: 'cert-manager.io/v1'                  # используемая API группа конфигурации «kind: Certificate»
  clusterIssuer: 'kubernetes-selfsigning-issuer'    # значение секции «spec.issuerRef.name» конфигурации «kind: Certificate»
  certs:
    egress:                                         # группа сертификатов для исходящего трафика
      kafka:                                        # сертификаты для записи в хранилище Kafka
        enabled: 'false'                            # флаг установки «kind: Certificate»
        commonName: 'kafka'                         # значение секции «spec.commonName» конфигурации «kind: Certificate»
      system_metrics:                               # сертификаты для взаимодействия с сервером по предоставлению системных метрик
        enabled: 'false'
        commonName: 'system-metrics'
      prometheus:                                   # сертификаты для записи в хранилище Prometheus формата
        enabled: 'true'
        commonName: 'prometheus'
      alert_server:                                 # реализация сертификатов в рамках сервера, который будет принимать сообщения от alertmanager, не идет в поставке GATM, реализуется потребителями
        enabled: 'true'
        commonName: 'ws-route.apps.domain.ru'
    ingress:                                        # группа сертификатов для входящего трафика
      metrics:
        insert:                                     # сертификаты для записи в хранилище GATM метрик
          enabled: 'false'
          commonName: 'system-metrics'
        select:
          enabled: 'false'
          commonName: 'system-metrics'
      traces:
        insert:                                     # сертификаты для записи в хранилище GATM трассировок
          enabled: 'false'
          commonName: 'system-metrics'
        select:
          enabled: 'false'
          commonName: 'system-metrics'
      logs:
        insert:                                     # сертификаты для записи в хранилище GATM логов
          enabled: 'false'
          commonName: 'system-metrics'
        select:
          enabled: 'false'
          commonName: 'system-metrics'
 
scrape_gatm_application:
  alert_manager:                                    # секция по сбору метрик с приложения alertmanager
    scrape: "false"
#    scrape_interval: 1m
#    scrape_timeout: 1m
#    relabel_add_label:
#      - name:
#        value:
    enabled_metric_relabel_configs: 'false'
#    relabel_regex: ''
 
podDisruptionBudget:
  alert_manager:                                   # настройка podDisruptionBudget для приложения alertmanager
    spec:
      minAvailable: 1   
 
vault:
  enabled: 'false'                                 # опция использования vault как систему хранения сертификатов
  pki_engine:
    egress:                                        # настройка pki_engine для приложения alertmanager
      alert_server:
        pki_enabled: 'false'
        pki_path: PKI/issue/pki
        common_name: federate.host
        data:
          ca:
            name: issuing_ca
            range: 'false'

# при использовании KV хранилища Vault, в рамках alertmanager необходимо реализовать структуру папок
#{{ .Values.vault.kv }}/alert-server/alert-server.crt
#{{ .Values.vault.kv }}/alert-server/alert-server-ca-chain.pem
#{{ .Values.vault.kv }}/alert-server/alert-server.key

install_alert_manager: "false"                     # установка приложения alertmanager, внимание, от пользователя необходима установка сервера, который сможет обработать генерируемые сообщения
alert_manager:
  replicas: 1
  routing:
    receivers:                                     # настройка интеграции к серверу
      name: default-receiver
      webhook_configs:
        externalServer: "true"                     # сервер, принимающий сообщения от alertmanager, находится в рамках проекта, либо вне проекта
        host: ws.gatm-test.svc.cluster.local
        port: 8080
        path: /notify
        resolution: DNS
#        ip:                                       # опционально, IP внешнего адреса сервера, принимающего запросы от приложения alertmanager, указывается при конфликте внешних взаимодействий в рамках проекта
    route:
      group_interval: 1m
      group_wait: 1s
      repeat_interval: 1m
  istio:
    destinationRule:
      spec:
        trafficPolicy:
          outlierDetection:
            enabled: 'false'
            baseEjectionTime: 1m
            consecutive5xxErrors: 10
            interval: 1m
            maxEjectionPercent: 20
  resources:
    limits:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
  livenessProbe:
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  svpx:
    resources:
      limits:
        cpu: 300m
        memory: 300Mi
      requests:
        cpu: 100m
        memory: 200Mi

#user_egress_secret:                               # использование сертификатов в рамках пользовательского egressgateway
#  alert_server:
#    ca: /etc/config/ssl/tengri_ca.cer
#    crt: /etc/config/ssl/tengri.pem
#    key: /etc/config/ssl/tengri.key

synapse_logs:                                      # точечная настройка глубины хранения логов в разрезе тенанта
#  retentionsTenants:
#    namespaces:                                   # список проектов, где реализуется сбор интеграционных логов
#      - name: "sales-demo"
#        retentionPeriod: 1d
#        accounts:                                 # конкретизация пользовательского тенанта
#          - name: /ez
#            retentionPeriod: 2d
#          - name: /filler/new
#            retentionPeriod: 1d
#      - name: gatm-test
#        retentionPeriod: 2d
#        accounts:
#          - name: /order/new
#            retentionPeriod: 2d
#          - name: /filler/new
#            retentionPeriod: 1d

alert:
  integration:
    alertmanager:                                   # блок для реализации интеграции приложения alert с alertmanager
      enabled: 'false'
      url: 'http://alertmanager:9093'

Изменение значений по умолчанию:

deploy: all                                   # было user
add_drs_scrape: 'false'                       # было 'true'
projectedKubeAPI: 'false'                     # было 'true'
generate_ephemeral_storage: 'false'           # было 'true'
affinityMatchKey: 'kubernetes.io/arch'        # было 'beta.kubernetes.io/arch'
use_storage_sm: 'true'                        # было 'false'
add_serviceaccount: 'true'                    # было 'false'
istio_cp_pods_scrape_own_namespace: 'false'   # было 'true'
istio_cp_pods_scrape_all_namespace: 'true'    # было 'false'
scrape_srls_pods:
  scrape: "true"                              # было 'false'
kafka_egress_config_apply: 'false'            # было 'true'
ingress:
  route_select: 'false'                       # было 'true'
install_kafka_adapter: 'false'                # было 'true'
synapse_trace:
  install: 'true'                             # было 'false'
  maxTraces: 20000                            # было 10000
  storage:
    resources:
      limits:
        memory: 3000Mi                        # было 1000Mi
synapse_logs:
  install: 'true'                             # было 'false'
  storage:
    resources:
      limits:
        memory: 3000Mi                        # было 1000Mi
agent:
  remoteWrite:
    kafka: 'false'                            # было 'true'
install_event_exporter: 'true'                # было 'false'
storage:
  resources:
    limits:
      memory: 3000Mi                          # было 600Mi

Минимальный набор параметров по установке:

global:
  registry: { REGISTRY_ADDRESS }
  imagePullSecret: "default-secret"
  clusterDomain: domain.ru
  containerOrchestrationSystem: "k8s"
  kubeAPIIP: XX.XX.X.X
  kubeAPIResolution: DNS
  kubePort: 443

igeg:
  istioControlPlane: "istio-se-system"
  pathToImage: synapse/istio_se
  proxyv2:
    hash: '****'

agent_alert:
  scrapeCluster: 'cluster=domain.ru'

agent:
  scrapeCluster: domain.ru

event_exporter:
  get_events_namespaces: 'test'

gatm:
  pathToImage: synapse/synapse/gatm
  gatm_kafka_adapter:
    hash: '****'
  gatm_event_exporter:
    hash: '****'
  gatm_select:
    hash: '****'
  gatm_insert:
    hash: '****'
  gatm_agent:
    hash: '****'
  gatm_alert:
    hash: '****'
  gatm_alertmanager:
    hash: '****'
  gatm_storage:
    hash: '****'
  gatm_linsert:
    hash: '****'
  gatm_lselect:
    hash: '****'
  gatm_lstorage:
    hash: '****'
  gatm_tracing_collector:
    hash: '****'
  gatm_tracing_query:
    hash: '****'
  gatm_tracing_proxy_storage:
    hash: '****'
  gatm_tracing_remote_storage:
    hash: '****'

Минимальный набор параметров по установке, с учетом реализации интеграционного журнала и использования приложения alertmanager:

global:
  registry: { REGISTRY_ADDRESS }
  imagePullSecret: "default-secret"
  clusterDomain: domain.ru
  containerOrchestrationSystem: "k8s"
  kubeAPIIP: XX.XX.X.X
  kubeAPIResolution: DNS
  kubePort: 443

igeg:
  istioControlPlane: "istio-se-system"
  pathToImage: synapse/istio_se
  proxyv2:
    hash: '****'

agent_alert:
  scrapeCluster: 'cluster=domain.ru'

agent:
  scrapeCluster: domain.ru

event_exporter:
  get_events_namespaces: 'test'

certManager:
  enabled: 'true'
  createClusterIssuer: 'false'
  apiVersion: 'security.synapse.sber/v1'
  clusterIssuer: 'kacm-issuer'
  certs:
    egress:
      alert_server:
        enabled: 'true'
        commonName: 'ws-route.apps.domain.ru'
    ingress:
      metrics:
        insert:
          enabled: 'true'
          commonName: 'synapse-metrics-insert-test.domain.ru'
      traces:
        insert:
          enabled: 'true'
          commonName: 'synapse-trace-insert-test.domain.ru'
      logs:
        insert:
          enabled: 'true'
          commonName: 'synapse-logs-insert-test.domain.ru'
        select:
          enabled: 'true'
          commonName: 'synapse-logs-select-test.domain.ru'

install_alert_manager: "true"
alert_manager:
  routing:
    receivers:
      name: default-receiver
      webhook_configs:
        externalServer: "true"
        host: ws-route.domain.ru
        port: 443
        path: /notify
        resolution: DNS

install_ingress: 'true'
ingress:
  route_select_logs: 'true'

alert:
  integration:
    alertmanager:
      enabled: 'true'
  rules:                                          # реализация alert правил для alertmanager, по спецификации Prometheus AlertManager
    - values:
          alerts-example.yaml: |
            groups:
              - name: istio-totals-alert
                rules:
                - alert: HighRequestLatency
                  expr: rate(istio_requests_total{response_code="500"})[1m] > 0
                  for: 0m
                  labels:
                    severity: critical
                  annotations:
                    summary: High request latency

gatm:
  pathToImage: synapse/synapse/gatm
  gatm_kafka_adapter:
    hash: '****'
  gatm_event_exporter:
    hash: '****'
  gatm_select:
    hash: '****'
  gatm_insert:
    hash: '****'
  gatm_agent:
    hash: '****'
  gatm_alert:
    hash: '****'
  gatm_alertmanager:
    hash: '****'
  gatm_storage:
    hash: '****'
  gatm_linsert:
    hash: '****'
  gatm_lselect:
    hash: '****'
  gatm_lstorage:
    hash: '****'
  gatm_tracing_collector:
    hash: '****'
  gatm_tracing_query:
    hash: '****'
  gatm_tracing_proxy_storage:
    hash: '****'
  gatm_tracing_remote_storage:
    hash: '****'

Чарт «ext-gatm-sender»#

Чарт предназначен для установки приложения synapse-sender (GATM), для реализации функции переотправки сообщений из интеграционного журнала.

Не все параметры будут прокомментированы, так как они описаны выше в базовых чартах GATM.

Описание стендозависимых параметров:

global:
  registry: { REGISTRY_ADDRESS }         # registry, где опубликовано приложение GATM sender
  clusterDomain: apps.kubernetes.ru      # домен, который используется как внешний адрес, по нему реализуется внешний адрес для взаимодействия (synapse-sender{{ .Values.indexInstall }}.{{ .Values.global.clusterDomain }})
  containerOrchestrationSystem: "k8s"    # система оркестрации, поддерживаются значения K8s (Kubernetes) и ose (OpenShift)

gatm:
  pathToImage: synapse/synapse/gatm      # путь в nexsus до приложения GATM sender
  gatm_sender:
    hash: '*****'                        # hash образа

igeg:
  istioControlPlane: "synapse-control-plane"     # наименование контрольной панели, к которой подключен проект для GATM sender
  add_credential_mount: 'false'                  # монтирование дополнительных volumes (для IGEG) для поддержки версий Istio

indexInstall: ""                         # префикс для Ingress маршрутов
projectedKubeAPI: 'false'                # флаг монтирования токена для работы с KubeAPI, если стоит значение false, то токен будет примонтирован автоматически, если true, то токен будет примонтирован в рамках «kind: Deployment»
seccompProfile: 'false'                  # использование параметра seccompProfile в рамках секции Deployment «securityContext», применимо для платформы Kubernetes 1.25 и выше
generate_ephemeral_storage: 'false'      # указание ephemeral-storage в контейнерах в рамках секций «kind: Deployment»/«kind: StatufulSet» resources
affinity: 'true'                         # реализация affinity, необходим для корректного распределение «kind: Pod» по нодам кластера
affinityMatchKey: 'kubernetes.io/arch'   # реализация affinityMatchKey в рамках IGEG
affinityMatchValues:                     # реализация affinityMatchValues в рамках IGEG
  - amd64
  - ppc64le
  - s390x
poddistruptionbudget: 'false'            # флаг установки конфигурации «kind: PodDistruptionBudget»
enabledPriorityClassName: 'false'        # указание секции PriorityClassName в рамках конфигураций «kind: Deployment»/«kind: StatefulSet»
priorityClassName: system-cluster-critical   # priorityClassName (при указании enabledPriorityClassName: 'true')
add_kind_sidecar: 'false'                # реализация конфигурации «kind: Sidecar» по ограничению используемых адресов в рамках namespace и контрольной панели istio
add_kind_sidecar_cp: 'true'              # включение в рамках «kind: Sidecar» проекта контрольной панели
active_port: 8439                        # порт для использования GATM sender

peer_authentication: 
  install: 'false'                       # флаг установки конфигурации «kind: PeerAuthentication»
  mtls_mode: STRICT                      # указание используемого мода по ограничению входящего трафика на приложения

sender:
  replicas: 1                            # количество реплик приложения GATM sender
  istio:
    destinationRule:                     # настройки паттерна circuit breaker в рамках вызова сервиса, параметры формируются в рамках конфигурации «kind: DestinationRule»
      spec:
        trafficPolicy:
          outlierDetection:
            enabled: 'false'
            baseEjectionTime: 1m
            consecutive5xxErrors: 10
            interval: 1m
            maxEjectionPercent: 20
  strategy:                              # strategy в рамках Deployment
    rollingParams:
      maxSurge: 100%
      maxUnavailable: 25%
  livenessProbe:                         # настройка livenessProbe в рамках Deployment
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:                        # настройка readinessProbe в рамках Deployment
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  resources:                             # настройка ресурсов приложения sender
    limits:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
  svpx:                                  # настройка ресурсов приложения SVPX (контейнер istio-proxy)
    resources:
      limits:
        cpu: 200m
        memory: 300Mi
      requests:
        cpu: 100m
        memory: 200Mi

integration:                             # настройка интеграций
  synapse_logs:
    host: synapse-logs-select.kubernetes.ru  # адрес для обращения в GATM logs, для получения данных интеграционного журнала
    port: 443
#    ip:
    resolution: DNS
#  external_addresses:                        # настройка внешних интеграций для реализации логики переотправки сообщений
#    - name: sales-demo                       # имя интеграции
#      tlsMode: DISABLE                       # мод взаимодействия MUTUAL,SIMPLE,DISABLE в рамках MUTUAL,SIMPLE будет проводится маршрут с учетом сертификатов
#      host: ingw-pharmacy-svc.sales-demo.svc.cluster.local     # внешний хост для переотправки сообщений
#      port: 8080                             # порт внешнего сервиса
#      virtualPort: 9091                      # уникальный порт внутри кластера, для корректного перехвата трафика
#      resolution: DNS                        # resolution внешнего адреса в рамках конфигурации ServiceEntry
#      certManager:
#        enabled: 'false'                     # флаг использования certManager (либо KACM) для работы с сертификатами
#        apiVersion: 'cert-manager.io/v1'
#        clusterIssuer: 'kubernetes-selfsigning-issuer'
#        commonName: 'system-metrics'
##      certs:
##        useSecretInCluster:
##          enabled: "false"                  # использование kind: Secret в рамках проекта
##          secretName: custom-secret-tls     # имя kind: Secret
### также можно использовать параметры уже примонтированных сертификатов, например, тех, которые используются для первых интеграций
##        mountPath: /var/certs/external-custom-mutual     # путь монтирования сертификатов на IGEG (egressgateway)
##        ca: caca.crt                        # имя ca сертификата в kind: Secret
##        cert: tlsls.crt                     # имя клиентского сертификата в kind: Secret
##        key: tlsls.key                      # имя приватного ключа в kind: Secret
#      vault:
#        enabled: 'false'                     # флаг использования vault для хранения сертификатов
#        secret_base64: 'true'                # сертификат храниться в vault в base64
#        pki_engine:
#          enabled: 'false'                   # использование pki engine в рамках vault, при использовании KV хранилища данные по подключению будут в рамках группы параметров в секции vault, а external сертификаты необходимо расположить как {{- .Values.vault.kv -}}/gatm-{{$v.name}} (имена сертификатов (ca - gatm-{{$v.name}}-ca-chain.pem, cert - gatm-{{$v.name}}.crt, key - gatm-{{$v.name}}.key))
#          pki_path: PKI/issue/pki
#          common_name: synapse-trace-insert.host
#          data:
#            ca:
#              name: ca_chain
#              range: 'false'

useSecretInCluster:
  enabled: 'false'                            # использование сертификатов в рамках проекта (наименование сертификатов в рамках kins: Secret, ca - ca.crt, crt - tls.crt, key - tls.key)
  egress:
    logs:
      select:
        enabled: 'false'
        secretName: logs-select               # имя kind: Secret, где реализован сертификат для взаимодействия с GATM logs 
  ingress:
    sender:
      insert:
        enabled: 'false'
        secretName: sender-secret
certManager:
  enabled: 'false'                            # флаг использования certManager (либо KACM) по реализации сертификатов посредством публикации kind: certificate
  apiVersion: 'cert-manager.io/v1'
  clusterIssuer: 'gatm-selfsigning-issuer'
  certs:
    egress:
      logs:
        select:
          enabled: 'false'
          commonName: 'system-metrics'
    ingress:
      sender:
        insert:
          enabled: 'false'
          commonName: 'system-metrics'
vault:
  enabled: 'false'                           # использование vault хранилища по работе с сертификатами
#  kv:                                       # путь к секретам vault во внешнем хранилище (KV version 1)
#  secmanNamespace:                          # namespace vault во внешнем хранилище
#  secmanRole:                               # роль vault во внешнем хранилище с доступом на чтение секретов
  pre_populate_only: "true"
  secret_base64: 'true'                      # хранение сертификатов в рамках base64
  pki_engine:
    enabled: 'false'                         # использования pki engine vault
    egress:
      logs:
        select:
          pki_enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-metrics-select.host
          data:
            ca:
              name: ca_chain
              range: 'false'
    ingress:
      sender:
        insert:
          pki_enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-trace-insert.host
          data:
            ca:
              name: ca_chain
              range: 'false'
  resources:
    limits:
      cpu: 500m
      memory: 128Mi
    requests:
      cpu: 250m
      memory: 64Mi
  auth_path_enabled: 'false'
  auth_path: synapse/path

podDisruptionBudget:                 
  apiVersion: policy/v1
  spec:
    minAvailable: 1

ingress:
  replicas: 1
  readinessProbe:
    failureThreshold: 30
    initialDelaySeconds: 1
    periodSeconds: 2
    successThreshold: 1
    timeoutSeconds: 1
  resources:
    limits:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 500Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 500Mi

egress:
  replicas: 1
  readinessProbe:
    failureThreshold: 30
    initialDelaySeconds: 1
    periodSeconds: 2
    successThreshold: 1
    timeoutSeconds: 1
  resources:
    limits:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 500Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 500Mi

tracing:
  custom_tags: '{"authority":{"header":{"defaultValue":"authority-empty","name":":authority"}},"content-type":{"header":{"defaultValue":"content-type-empty","name":"content-type"}},"grpc-accept-encoding":{"header":{"defaultValue":"grpc-accept-encoding-empty","name":"grpc-accept-encoding"}},"host":{"header":{"defaultValue":"host-empty","name":"host"}},"method":{"header":{"defaultValue":"method-empty","name":":method"}},"path":{"header":{"defaultValue":"path-empty","name":":path"}},"scheme":{"header":{"defaultValue":"scheme-empty","name":":scheme"}},"x-b3-parentspanid":{"header":{"defaultValue":"x-b3-parentspanid-empty","name":"x-b3-parentspanid"}},"x-b3-sampled":{"header":{"defaultValue":"x-b3-sampled-empty","name":"x-b3-sampled"}},"x-b3-spanid":{"header":{"defaultValue":"x-b3-spanid-empty","name":"x-b3-spanid"}},"x-b3-traceid":{"header":{"defaultValue":"x-b3-traceid-empty","name":"x-b3-traceid"}},"x-envoy-decorator-operation":{"header":{"defaultValue":"x-envoy-decorator-operation-empty","name":"x-envoy-decorator-operation"}},"x-envoy-internal":{"header":{"defaultValue":"x-envoy-internal-empty","name":"x-envoy-internal"}},"x-forwarded-proto":{"header":{"defaultValue":"x-forwarded-proto-empty","name":"x-forwarded-proto"}},"x-forwarded_for":{"header":{"defaultValue":"x-forwarded-for-empty","name":"x-forwarded-for"}},"x-request-id":{"header":{"defaultValue":"x-request-id-empty","name":"x-request-id"}},"x-synapse-corellationid":{"header":{"defaultValue":"x-synapse-corellationid-empty","name":"x-synapse-corellationid"}},"x-synapse-custom":{"header":{"defaultValue":"x-synapse-custom-empty","name":"x-synapse-custom"}},"x-synapse-from-pod-name":{"header":{"defaultValue":"x-synapse-from-pod-name-empty","name":"x-synapse-from-pod-name"}},"x-synapse-messageid":{"header":{"defaultValue":"x-synapse-messageid-empty","name":"x-synapse-messageid"}},"x-synapse-operationname":{"header":{"defaultValue":"x-synapse-operationname-empty","name":"x-synapse-operationname"}},"x-synapse-rqtm":{"header":{"defaultValue":"x-synapse-rqtm-empty","name":"x-synapse-rqtm"}},"x-synapse-rquid":{"header":{"defaultValue":"x-synapse-rquid-empty","name":"x-synapse-rquid"}},"x-synapse-scname":{"header":{"defaultValue":"x-synapse-scname-empty","name":"x-synapse-scname"}},"x-synapse-serviceversion":{"header":{"defaultValue":"x-synapse-serviceversion-empty","name":"x-synapse-serviceversion"}},"x-synapse-spname":{"header":{"defaultValue":"x-synapse-spname-empty","name":"x-synapse-spname"}},"x-synapse-status-code":{"header":{"defaultValue":"x-synapse-status-code-empty","name":"x-synapse-status-code"}}}'
  zipkin:
    svc: synapse-tracer-svc
    port: 8788
  sampling: 100
  maxPathTagLength: 256
  tlsSettings:
    caCertificates: "/var/run/secrets/istio/root-cert.pem"
    mode: SIMPLE

Пример с минимальным набором стендозависимых параметров:

# установка в отдельный проект synapse-sender
global:
  registry: registry
  imagePullSecret: "default-secret"
  clusterDomain: sgv.apps.vdc0.de
  containerOrchestrationSystem: "k8s"
igeg:
  istioControlPlane: "istio-se-system"
  pathToImage: synapse/istio_se
  proxyv2:
    hash: "***"
gatm:
  pathToImage: synapse_dev/gatm
  gatm_sender:
    hash: "****"
certManager:
  enabled: 'true'
  apiVersion: 'security.synapse.sber/v1'
  clusterIssuer: 'kacm-issuer'
  certs:
    egress:
      logs:
        select:
          enabled: 'true'
          commonName: 'synapse-logs-select.sgv.apps.vdc0.de'
    ingress:
      sender:
        insert:
          enabled: 'true'
          commonName: 'synapse-sender.sgv.apps.vdc0.de'

# описываются все адреса для реализации функции переотправки сообщений, через интеграционный журнал
integration:
  synapse_logs:
    host: synapse-logs-select.sgv.apps.vdc0.de
    port: 443
#    ip:
    resolution: DNS
  external_addresses:
    - name: sales-demo-route
      tlsMode: DISABLE    # MUTUAL/SIMPLE
      host: sales-demo-http.sgv.apps.vdc0.de
      port: 80
      virtualPort: 9090
      resolution: DNS
      certManager:
        enabled: 'false'
        apiVersion: 'cert-manager.io/v1'
        clusterIssuer: 'kubernetes-selfsigning-issuer'
        commonName: 'system-metrics'
      vault:
        enabled: 'false'
        secret_base64: 'true'
        pki_engine:
          enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-trace-insert.host
          data:
            ca:
              name: ca_chain
              range: 'false'
    - name: sales-demo
      tlsMode: DISABLE    # MUTUAL/SIMPLE
      host: ingw-pharmacy-svc.sales-demo.svc.cluster.local
      port: 8080
      virtualPort: 9091
      resolution: DNS
      certManager:
        enabled: 'false'
        apiVersion: 'cert-manager.io/v1'
        clusterIssuer: 'kubernetes-selfsigning-issuer'
        commonName: 'system-metrics'
      vault:
        enabled: 'false'
        secret_base64: 'true'
        pki_engine:
          enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-trace-insert.host
          data:
            ca:
              name: ca_chain
              range: 'false'
    - name: sales-demo-mutual
      tlsMode: MUTUAL    # DISABLE/SIMPLE
      host: sales-demo-mutual.sgv.apps.vdc0.de
      port: 443
      virtualPort: 9097
      resolution: DNS
      certManager:
        enabled: 'false'
        apiVersion: 'security.synapse.sber/v1'
        clusterIssuer: 'kacm-issuer'
        commonName: 'system-metrics'
      vault:
        enabled: 'true'
        secret_base64: 'true'
        pki_engine:
          enabled: 'false'
          pki_path: A/DEV/GATM/PKI/issue/pki-sbt
          common_name: synapse-trace-insert.sbt
          data:
            ca:
              name: issuing_ca
              range: 'false'
    - name: sales-demo-simple
      tlsMode: SIMPLE    # DISABLE/MUTUAL
      host: sales-demo-simple.sgv.apps.vdc0.de
      port: 443
      virtualPort: 9093
      resolution: DNS
      certManager:
        enabled: 'false'
        apiVersion: 'security.synapse.sber/v1'
        clusterIssuer: 'kacm-issuer'
        commonName: 'system-metrics'
      vault:
        enabled: 'true'
        secret_base64: 'true'
        pki_engine:
          enabled: 'false'
          pki_path: A/DEV/GATM/PKI/issue/pki-sbt
          common_name: synapse-trace-insert.sbt
          data:
            ca:
              name: issuing_ca
              range: 'false'
    - name: smdemo2-certmanager
      tlsMode: MUTUAL    # DISABLE/MUTUAL
      host: smdemo2-certmanager-tls.apps.ocp.syn-dev.solution.sbt
      port: 443
      virtualPort: 9084
      resolution: DNS
      certManager:
        enabled: 'false'
        apiVersion: 'security.synapse.sber/v1'
        clusterIssuer: 'kacm-issuer'
        commonName: 'smdemo2-certmanager-tls.apps.ocp.syn-dev.solution.sbt'
      certs:
        useSecretInCluster:
          enabled: "true"
          secretName: custom-secret-tls
        mountPath: /var/certs/external-custom-mutual
        ca: caca.crt
        cert: tlsls.crt
        key: tlsls.key
      vault:
        enabled: 'false'
        secret_base64: 'true'
        pki_engine:
          enabled: 'false'
          pki_path: A/DEV/GATM/PKI/issue/pki-sbt
          common_name: synapse-trace-insert.sbt
          data:
            ca:
              name: issuing_ca
              range: 'false'

Чарт «ext-gatm-sender-job»#

Чарт предназначен для установки приложения synapse-sender (GATM), для реализации функции автоматической переотправки сообщений из интеграционного журнала (планировщик заданий).

Указанный чарт реализуется владельцем интеграции, для минимизации рисков по переотправке сообщений.

Не будет реализовано полное описание всех параметров, так как они описаны выше.

Описание стендозависимых параметров:

global:
  registry: { REGISTRY_ADDRESS }
  pathToImage: /sbt/ci90000017_synapse/ci90000017_synapse
  clusterDomain: apps.kubernetes.ru
  containerOrchestrationSystem: "k8s"

gatm:
  pathToImage: sbt/ci90000017_synapse/ci90000017_synapse/gatm
  gatm_sender:
    hash: '****'

igeg:
  version: '1.17'
  istioControlPlane: "synapse-control-plane"
  add_credential_mount: 'false'

replicas: 1
indexInstall: ""
kubeEgressRouting: TLS
projectedKubeAPI: 'false'
seccompProfile: 'false'
generate_ephemeral_storage: 'false'
affinity: 'true'
affinityMatchKey: 'kubernetes.io/arch'
affinityMatchValues:
  - amd64
  - ppc64le
  - s390x
poddistruptionbudget: 'false'
enabledPriorityClassName: 'false'
priorityClassName: system-cluster-critical
add_kind_sidecar: 'false'
add_kind_sidecar_cp: 'true'
active_port: 8439

peer_authentication:
  install: 'false'
  mtls_mode: STRICT

# параметры автоматической переотправки сообщений (будет работать переотправка только тех сообщений, которые были отправлены в проекте установки senden-job), установка производится в пользовательский проект
senderSettings:
  periodQuery: 59m         # за какой период возьмем данные в рамках интеграционного журнала
  query:                   # реализация запроса в рамках GATM logs (logssql), параметры вводятся с учетом структуры данных в интеграционном журнале
    status: 500
    integration: esb
  accountNames:            # уточнение тенанта, в рамках которых реализованы данные (формат тенантов - имя проекта/пользовательский тенант (например, path выбирается пользователем, когда идет сбор логов по [[outputs.gatm_logs_journal]]))
    - /getfly
    - /jojo
  limit: 10                # лимит сообщений при переотправке сообщений
  tps: 1                   # лимит запросов в секунду при реализации переотправки сообщений
  headers:                 # опция добавления заголовков при автоматической переотправке сообщений
    - name: x-header
      value: please

senderJob:
  apiVersion: batch/v1               # apiVersion конфигурации kind: CronJob
  schedule: '@hourly'                # значение в рамках kind: CronJob секции schedule (определяет, когда будет запускаться автоматическая переотправка сообщений)
  successfulJobsHistoryLimit: 3      # значение в рамках kind: CronJob секции successfulJobsHistoryLimit
  failedJobsHistoryLimit: 1          # значение в рамках kind: CronJob секции failedJobsHistoryLimit
  istio:
  livenessProbe:
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  readinessProbe:
    failureThreshold: 30
    initialDelaySeconds: 5
    periodSeconds: 10
    successThreshold: 1
    timeoutSeconds: 5
  resources:
    limits:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 300Mi
  svpx:
    resources:
      limits:
        cpu: 200m
        memory: 300Mi
      requests:
        cpu: 100m
        memory: 200Mi

integration:
  synapse_logs:
    host: synapse-logs-select.kubernetes.ru
    virtualPort: 9499
    port: 443
#    ip:
    resolution: DNS
#  external_addresses:
#    - name: sales-demo
#      tlsMode: DISABLE    # MUTUAL/SIMPLE
#      host: ingw-pharmacy-svc.sales-demo.svc.cluster.local
#      port: 8080
#      virtualPort: 9091
#      resolution: DNS
#      certManager:
#        enabled: 'false'
#        apiVersion: 'cert-manager.io/v1'
#        clusterIssuer: 'kubernetes-selfsigning-issuer'
#        commonName: 'system-metrics'
##      certs:
##        ca: /var/certs/external/gatm-external-ca.pem
##        cert: /var/certs/external/gatm-external.cert
##        key: /var/certs/external/gatm-external.key
#      vault:
#        enabled: 'false'
#        secret_base64: 'true'
#        pki_engine:
#          enabled: 'false'
#          pki_path: PKI/issue/pki
#          common_name: synapse-trace-insert.host
#          data:
#            ca:
#              name: ca_chain
#              range: 'false'


useSecretInCluster:
  enabled: 'false'
  egress:
    logs:
      select:
        enabled: 'false'
        secretName: logs-select
certManager:
  enabled: 'false'
  apiVersion: 'cert-manager.io/v1'
  clusterIssuer: 'kubernetes-selfsigning-issuer'
  certs:
    egress:
      logs:
        select:
          commonName: 'system-metrics'

podDisruptionBudget:
  apiVersion: policy/v1
  spec:
    minAvailable: 1

vault:
  enabled: 'false'
#  kv:
#  secmanNamespace:
#  secmanRole:
  pre_populate_only: "true"
  secret_base64: 'true'
  pki_engine:
    enabled: 'false'
    egress:
      logs:
        select:
          pki_enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-metrics-select.host
          data:
            ca:
              name: ca_chain
              range: 'false'
  resources:
    limits:
      cpu: 500m
      memory: 128Mi
    requests:
      cpu: 250m
      memory: 64Mi
  auth_path_enabled: 'false'
  auth_path: synapse/path

egress:
  replicas: 1
  readinessProbe:
    failureThreshold: 30
    initialDelaySeconds: 1
    periodSeconds: 2
    successThreshold: 1
    timeoutSeconds: 1
  resources:
    limits:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 500Mi
    requests:
      cpu: 300m
      ephemeral_storage: 500Mi
      memory: 500Mi

tracing:
  custom_tags: '{"authority":{"header":{"defaultValue":"authority-empty","name":":authority"}},"content-type":{"header":{"defaultValue":"content-type-empty","name":"content-type"}},"grpc-accept-encoding":{"header":{"defaultValue":"grpc-accept-encoding-empty","name":"grpc-accept-encoding"}},"host":{"header":{"defaultValue":"host-empty","name":"host"}},"method":{"header":{"defaultValue":"method-empty","name":":method"}},"path":{"header":{"defaultValue":"path-empty","name":":path"}},"scheme":{"header":{"defaultValue":"scheme-empty","name":":scheme"}},"x-b3-parentspanid":{"header":{"defaultValue":"x-b3-parentspanid-empty","name":"x-b3-parentspanid"}},"x-b3-sampled":{"header":{"defaultValue":"x-b3-sampled-empty","name":"x-b3-sampled"}},"x-b3-spanid":{"header":{"defaultValue":"x-b3-spanid-empty","name":"x-b3-spanid"}},"x-b3-traceid":{"header":{"defaultValue":"x-b3-traceid-empty","name":"x-b3-traceid"}},"x-envoy-decorator-operation":{"header":{"defaultValue":"x-envoy-decorator-operation-empty","name":"x-envoy-decorator-operation"}},"x-envoy-internal":{"header":{"defaultValue":"x-envoy-internal-empty","name":"x-envoy-internal"}},"x-forwarded-proto":{"header":{"defaultValue":"x-forwarded-proto-empty","name":"x-forwarded-proto"}},"x-forwarded_for":{"header":{"defaultValue":"x-forwarded-for-empty","name":"x-forwarded-for"}},"x-request-id":{"header":{"defaultValue":"x-request-id-empty","name":"x-request-id"}},"x-synapse-corellationid":{"header":{"defaultValue":"x-synapse-corellationid-empty","name":"x-synapse-corellationid"}},"x-synapse-custom":{"header":{"defaultValue":"x-synapse-custom-empty","name":"x-synapse-custom"}},"x-synapse-from-pod-name":{"header":{"defaultValue":"x-synapse-from-pod-name-empty","name":"x-synapse-from-pod-name"}},"x-synapse-messageid":{"header":{"defaultValue":"x-synapse-messageid-empty","name":"x-synapse-messageid"}},"x-synapse-operationname":{"header":{"defaultValue":"x-synapse-operationname-empty","name":"x-synapse-operationname"}},"x-synapse-rqtm":{"header":{"defaultValue":"x-synapse-rqtm-empty","name":"x-synapse-rqtm"}},"x-synapse-rquid":{"header":{"defaultValue":"x-synapse-rquid-empty","name":"x-synapse-rquid"}},"x-synapse-scname":{"header":{"defaultValue":"x-synapse-scname-empty","name":"x-synapse-scname"}},"x-synapse-serviceversion":{"header":{"defaultValue":"x-synapse-serviceversion-empty","name":"x-synapse-serviceversion"}},"x-synapse-spname":{"header":{"defaultValue":"x-synapse-spname-empty","name":"x-synapse-spname"}},"x-synapse-status-code":{"header":{"defaultValue":"x-synapse-status-code-empty","name":"x-synapse-status-code"}}}'
  zipkin:
    svc: synapse-tracer-svc
    port: 8788
  sampling: 100
  maxPathTagLength: 256
  tlsSettings:
    caCertificates: "/var/run/secrets/istio/root-cert.pem"
    mode: SIMPLE

Пример с минимальным набором стендозависимых параметров:

global:
  registry: registry
  containerOrchestrationSystem: "k8s"

igeg:
  istioControlPlane: "istio-se-system"
  pathToImage: synapse/istio_se
  proxyv2:
    hash: "****"

senderJob:
  schedule: '@hourly'

gatm:
  pathToImage: synapse_dev/gatm
  gatm_sender:
    hash: "***"

senderSettings:
  periodQuery: 59m
  query:
    status: 200
    information: info
  accountNames:
    - /order/new
  limit: 10
  tps: 1
  headers:
    - name: x-header
      value: please

integration:
  synapse_logs:
    host: synapse-logs-select-test.sgv.apps.dev
    port: 443
    resolution: DNS
  external_addresses:
    - name: sales-demo
      tlsMode: DISABLE    # MUTUAL/SIMPLE
      host: ingw-market-svc.sales-demo.svc.cluster.local
      port: 8080
      virtualPort: 9091
      resolution: DNS
      certManager:
        enabled: 'false'
        apiVersion: 'cert-manager.io/v1'
        clusterIssuer: 'kubernetes-selfsigning-issuer'
        commonName: 'system-metrics'
      vault:
        enabled: 'false'
        secret_base64: 'true'
        pki_engine:
          enabled: 'false'
          pki_path: PKI/issue/pki
          common_name: synapse-trace-insert.host
          data:
            ca:
              name: ca_chain
              range: 'false'

useSecretInCluster:
  enabled: 'false'
  egress:
    logs:
      select:
        enabled: 'false'
        secretName: logs-select
certManager:
  enabled: 'true'
  apiVersion: 'security.synapse.sber/v1'
  clusterIssuer: 'kacm-issuer'
  certs:
    egress:
      logs:
        select:
          commonName: 'synapse-logs-select-test.sgv.apps.dev'

vault:
  enabled: 'false'
  kv: DEV_DZO/A/DEV/GATM/KV
  secmanNamespace: DEV_DZO
  secmanRole: role-ga-secman-gatm
  pre_populate_only: "true"
  secret_base64: 'true'
  pki_engine:
    enabled: 'false'
    egress:
      logs:
        select:
          pki_path: A/DEV/GATM/PKI/issue/pki-sbt
          common_name: synapse-metrics-select.sbt
          data:
            ca:
              name: issuing_ca
              range: 'false'
  resources:
    limits:
      cpu: 500m
      memory: 128Mi
    requests:
      cpu: 250m
      memory: 64Mi
  auth_path_enabled: 'true'
  auth_path: auth/gatm

Если в рамках установки и реализации первого запуска CronJob будут возникать ошибки исполнения sender-job, то необходимо переустановить чарт, корректируя секцию senderSettings с настройками запуска приложения.

Если Pod в рамках проекта остаются в статусе Error, то можно выполнить команду в терминале Pod (curl -fsI -X POST http://localhost:15020/quitquitquit && exit), для корректной остановки Pod.

Изменения стендозависимых параметров в рамках релиза 5.4.0#

Добавлено:

kubePortNamespace: <port>                                                       # порт, в рамках которого будет произведен перехват трафика внутри проекта на сервер KubeAPI, для дальнейшем маршрутизации на egressgateway 

tenant_agent:
  - adapter:
      use_default_adapter: 'true'                                               # опция использования основного приложения Adapter. При значении 'true' приложение Adapter в рамках тенанта не устанавливается

adapter:
  userRouteConfig: 'true'                                                       # флаг для включения функции умной маршрутизации приложения Adapter
#   useJsonRouteConfigVar: '{"var1":{"name":"User-Agent","type":"header"},"var2":{"name":"job","type":"label"},"var3":{"name":"namespace","regex":"(gatm-test|synapse-metrics-agent)","type":"label"}}'                                                                                     # описание секции «variables» в JSON
#   useJsonRouteConfigRoute: '{"kafka1":[{"topic":"istio-pods222","var1":"vmagent","var2":"istio-pods"},{"default":true,"delimiter":".","topic":"default-topic222"}],"kafka-custom":[{"delimiter":".","topic":"gatm-test-only-cluster-custom222","var1":"vmagent","var3":"gatm-test"}]}'    # описание секции «routes» в JSON
#   routeConfig:                                                                # секция для описания правил маршрутизации Kafka. Важно! Не заполняется, если заполнены параметры useJsonRouteConfigVar, useJsonRouteConfigRoute
#     connections:                                                              # секция с перечислением брокеров Kafka
#       kafka1:                                                                 # наименование брокера (может быть произвольным)
#         batchNumMessages: 10000                                               # количество сообщений для пакетной записи
#         brokerList: '<host>:<port>'                                           # хост и порт брокера
#         compression: none                                                     # формат сжатия данных. Доступные значения: none, gzip, snappy, lz4, zstd
#     variables:                                                                # секция с перечислением переменных для фильтрации данных
#       var1:                                                                   # переменная №1, обозначение секции с параметром может быть любым строковым значением, валидным для ключей map в yaml
#         type: header                                                          # тип переменной, доступные значения - header, label
#         name: User-Agent                                                      # наименование переменной
#       var2:
#         type: label                               
#         name: job
#       var3:
#         type: label
#         name: namespace
#         regex: "(ns-test|test-test)"                                          # регулярное выражение для значений переменной, необязательный параметр (по умолчанию «(.*)»). По данному значению будет происходить фильтрация значений для конкретной переменной                
#     routes:                                                                   # секция с правилами маршрутизации
#       kafka1:                                                                 # правила для брокера kafka1                            
#         - var1: vmagent                                                       # значение для переменной var1 из секции «variables»
#           var2: istio-pods                                                    # значение для переменной var2 из секции «variables»
#           topic: topic1                                                       # наименование топика для отправки метрик
#         - var1: vmagent
#           var3: gatm-test
#           topic: topic2
#           delimiter: "."                                                      # делиметр для отправляемых метрик, необязательный параметр (значение по умолчанию «_», принимает на вход любое значение формата string)
#         - topic: default-topic        
#           delimiter: "."
#           default: true                                                       # маршрут по умолчанию

istio_pods_relabel_get_label:
  namespace_labels: 'false'                                                     # флаг для активации сбора labels с проектов при сборе сетевых метрик, значение по умолчанию - false (сбор производиться не будет)
  
scrape_kubernetes_pods:
  namespace_labels: 'false'                                                     # флаг для активации сбора lables с проектов при сборе прикладных метрик, значение по умолчанию - false (сбор производиться не будет)

insert:
  maxLabelsPerTimeseries: 30                                                    # параметр для ограничения количества тегов метрики, передаваемое в рамках временного ряда

Изменены значения для установки компонента:

kubeEgressRouting: DISABLE                                                      # для данного параметра добавили поддержку значения DISABLE (инициация запроса по HTTP протоколу и реализация сертификата на egress)

replicas: 2                                                                     # увеличение реплик приложения Agent до 2 шт

kafka_add_sourceLabel: 'true'                                                   # реализация секции sourceLabel в «kind: VirtualService» для реализации вывода трафика через egressgateway, поставляемый в рамках дистрибутива

vault:
  pre_populate_only: "false"                                                    # режим «включения» мутации контейнера vault, в рамках IGEG
  secmanRole: synapse-control-panel                                             # указание роли vault во внешнем хранилище с доступом на чтение секретов (в рамках установки в контрольную панель)
  pki_engine:
    prometheus:
      pki_enabled: 'true'                                                       # активация использования PKI engine в рамках интеграции с Prometheus
      data:
        ca:
          range: 'true'                                                         # флаг реализации цепочки сертификатов prometheus (работает только в случае, если это предусмотрено PKI engine)
          
count_storage:
  - index: 1                                                                    # добавление префикса для второй реплики приложения Storage
  
storage:
  replicas: 2                                                                   # увеличение реплик приложения Agent до 2 шт
  resources:
      memory: 2000Mi                                                            # уменьшение лимита по памяти для приложения Storage до 2000Mi     

Установка контейнера „Agent“ (logs)#

В рамках поставки компонента GATM передаются бинарные файлы „Agent“ (logs), установка указанного приложения реализуется пользователями посредством добавления контейнера в свои реализации «kind: Deployment».

Для корректного сбора логов с приложения необходимо реализовать передачу прикладных логов в рамках директории Pod, в формате JSON.

Пример:

{"event_timestamp":1721667787493,"information":"Принято новое сообщение от: table:80,  rqUID: , ","level":"panic","message":"{\"airline\": \"Red Wings\"}","msg":"","operationName":"mapping","traceid":"4a8c1c92041f161800e37bc872ac4281","podSource":"unimapper-5bcf4d5dd9-bckr7","projectName":"project","rqUID":"","serviceReceiver":"table:80","status":"SUCCESS"}
{"event_timestamp":1721667787493,"information":"Отправлено по URL: http://amadeus:8080/search_flight ","level":"panic","message":"{\"airline\": \"Red Wings\"}","msg":"","operationName":"mapping","traceid":"4a8c1c92041f161800e37bc872ac4281","podSource":"unimapper-5bcf4d5dd9-bckr7","projectName":"project","rqUID":"","serviceReceiver":"table:80","status":"SUCCESS"}
{"event_timestamp":1721667787496,"information":"Oшибка отправки запроса: ошибка от редирект сервиса: {\"status\":\"500\",\"error\":\"Internal Server Error\",\"message\":\"Ошибка выполнения запроса. UNEXPECTED_ERROR_ON_EVEN_INDEX=true, включена обработка ошибок. Измените значение на false, чтобы пропускать обработку ошибок\"}, на URL: http://amadeus:8080/search_flight ","level":"panic","message":"{\"airline\": \"Red Wings\"}","msg":"","operationName":"mapping","traceid":"4a8c1c92041f161800e37bc872ac4281","podSource":"unimapper-5bcf4d5dd9-bckr7","projectName":"project","rqUID":"","serviceReceiver":"table:80","status":"ERROR"}

Рекомендуем реализовать передачу тега «»traceid»:»***»», который формируется в рамках входящего запроса и передается в заголовке сообщения (headers), наименование заголовка «x-b3-traceid». Указанный заголовок может показать логи приложения по конкретному запросу.

kind: Deployment
apiVersion: apps/v1
metadata:
  name: user-deployment
...
spec:
  template:
    spec:
      securityContext:
        runAsNonRoot: true
        fsGroup: 1001050000       # указывается при установке в Kubernetes, при установке в Openshift указание секции не требуется
        seccompProfile:           # указывается при установке в Kubernetes, при установке в Openshift указание секции не требуется
          type: RuntimeDefault
      containers:
        - resources:
            limits:
              cpu: 400m
              memory: 400Mi
            requests:
              cpu: 300m
              memory: 300Mi
          readinessProbe:
            httpGet:
              path: /ready
              port: 8081                                 # порт по пробам параметризуется в рамках ConfigMap приложения 'Agent' (logs)
              scheme: HTTP
            initialDelaySeconds: 5
            timeoutSeconds: 5
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 30
          terminationMessagePath: /dev/termination-log
          name: synapse-logs-agent
          env:                                           # реализация переменных окружения, для дальнейшего обогащения логов тегами и конкретизацией источника логов
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.namespace
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.name
            - name: NODE_NAME
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: spec.nodeName
            - name: POD_IP
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: status.podIP
            - name: NODE_PATH
              value: some.value
            - name: DEPLOYMENT_NAME
              value: user-deployment
          securityContext:
            capabilities:
              drop:
                - ALL
            privileged: false
            runAsUser: 10001             # указывается при установке в Kubernetes, при установке в Openshift указание секции не требуется
            runAsGroup: 10001            # указывается при установке в Kubernetes, при установке в Openshift указание секции не требуется
            seccompProfile:              # указывается при установке в Kubernetes, при установке в Openshift указание секции не требуется
              type: RuntimeDefault
            runAsNonRoot: true
            readOnlyRootFilesystem: true
            allowPrivilegeEscalation: false
          livenessProbe:
            httpGet:
              path: /health
              port: 8081                 # порт по пробам параметризуется в рамках ConfigMap приложения 'Agent' (logs)
              scheme: HTTP
            initialDelaySeconds: 60
            timeoutSeconds: 5
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 5
          imagePullPolicy: Always
          volumeMounts:
            - name: logs                 # общая директория, которая монтируется к пользовательскому контейнеру и к 'Agent' (logs), для корректной записи логов и их передачи
              mountPath: /var/log/audit
            - name: logs-agent-config    # монтирование ConfigMap приложения 'Agent' (logs), с настройками запуска
              mountPath: /var/logs-agent
          terminationMessagePolicy: File
          image: >-
            ${ссылка на image приложений agent (logs)}
          args:
            - '--watch-config=poll'
...
        - name: user-application
          volumeMounts:
            - name: logs                 # общая директория, которая монтируется к пользовательскому контейнеру и к 'Agent' (logs), для корректной записи логов и их передачи
              mountPath: /var/log/audit
...
      volumes:
        - name: logs                     # реализация общей директории для записи логов
          emptyDir: {}
        - name: logs-agent-config        # объявление ConfigMap для монтирование настроек старта приложения 'Agent' (logs)
          configMap:
            name: logs-agent-config
            defaultMode: 256

Пример конфигурационного файла „Agent“ (logs):

kind: ConfigMap
apiVersion: v1
metadata:
  name: logs-agent-config
data:
  telegraf.conf: |-
    [[inputs.tail]]                                    # сбор логов будет осуществляться из файла
      files = ["/var/log/audit/messageslog.log"]       # конкретизация файла, откуда производится сбор логов
      name_override = "myjsonmetric"
      data_format = "json"                             # формат логов в рамках файла сбора
      json_string_fields = ["msg", "information", "status"]    # конкретизация полей в рамках организованных логов приложения
      tag_keys = [                                             # конкретизация тегов в рамках организованных логов приложения
        "level",
        "timestamp"
      ]

    [[processors.override]]                             # генерация дополнительных тегов из переменных окружения с учетом уровня логирования
      [processors.override.tags]
        logLevel = "info"
        namespace = "$POD_NAMESPACE"
        podName = "$POD_NAME"
        nodeId = "$NODE_NAME"
        systemIp = "$POD_IP"
        nodePath = "$DEPLOYMENT_NAME.$POD_NAMESPACE"
        service = "$DEPLOYMENT_NAME"

    [[processors.regex]]                                # поиск и замена конкретных полей
      [[processors.regex.fields]]
        key = "status"
        pattern = "SUCCESS"
        replacement = "200"

      [[processors.regex.fields]]                       # поиск и замена конкретных полей
        key = "status"
        pattern = "ERROR"
        replacement = "500"

    [agent]
      debug = false                                     # рекомендованные настройки в рамках уровня логирования
      interval = "2s"                                   # интервал, в рамках которого будет организована передача логов
      flush_interval = "2s"                             # интервал по очистке данных из кэша, после успешной отправки логов, позволяет более эффективно использовать память
      disable_output = false                            # выключение передачи логов, указанное изменение применяется без перезагрузки контейнера логов

    [[outputs.loki]]                                    # плагин по передаче логов в рамках краткосрочного хранилища GATM, рекомендуем использовать loki
      domain = "${адрес сервиса Insert (logs)}:9428"    # адрес краткосрочного хранилища GATM, на сервис Insert (logs)
      endpoint = "/insert/loki/api/v1/push?_stream_fields=service&_msg_field=msg"    # path запроса, где конкретизируются технические поля GATM (_stream_fields и _msg_field)  

    [[outputs.kafka]]                                   # плагин по передаче логов в рамках Kafka
        topic = "test"                                  # конкретизация топика для записи
        brokers = ["kafka.solution.ru:443"]             # конкретизация брокеров для записи в Kafka
        data_format = "json_line"                       # формат предаваемого сообщения, json_line (плоский JSON)
        routing_tag = "message"                         # тег, в рамках которого передаются логи (поле из секции json_string_fields)
        json_timestamp_format = "FluentMicroStamp"      # формат даты, FluentMicroStamp используемый формат в рамках fluent-bit
        startup_error_behavior = "retry"                # политика поведения приложения при получении ошибок при передаче логов. retry - реализация повторных попыток без рестарта приложения. error - при возникновении ошибок при передаче логов, контейнер агента логов уйдет в перезапуск. ignore - игнорирование ошибок, без использования повторных попыток.

    [[outputs.synapse_elasticsearch]]                   # плагин по передаче логов через формат, аналогичный filebeat
      urls = [ "http://your.host.for.logs:8080/" ]      # хост для отправки логов
      timeout = "5s"                                    # таймаут клиента
      health_check_interval = "10s"                     # интервал для проверки доступности нод Elasticsearch
      index_name = "filebeat-7.6.2-%Y.%m.%d"            # метаинформация (значение поля не рекомендуется изменять), обязательное
      use_optype_create = true                          # флаг для изменения метода добавления лога (если значение = true, метод будет изменен с insert на create)
      simulate_filebeat = true                          # флаг для добавления в сообщение его метаданных (если значение = true, метаданные будут добавлены)
      full_meta = false                                 # флаг для управления полнотой метаданных (если значение = true, все метаданные будут добавлены в сообщение)
      startup_error_behavior = "retry"                  # параметр для управления работой плагина в случае, если удаленный ресурс для отправки логов будет недоступен (если значение = retry (рекомендуется использование данного значения), плагин будет работать даже в случае недоступности удаленного ресурса). Доступные значения для заполнения - error (значение по умолчанию), ignore

Параметры запуска:

[agent]
  interval                    # интервал, в рамках которого будет организована передача логов
  flush_interval              # интервал по очистке данных из кэша, после успешной отправки логов, позволяет более эффективно использовать память
  round_interval              # округляет интервал сбора данных до interval, т.е. если interval="10 секунд", то сбор данных всегда выполняется на «:00», «:10», «:20» и так далее.
  metric_batch_size           # определяет размер строки логов, которые 'Agent' (logs) отправляет на сервер
  collection_jitter           # каждый плагин будет находиться в режиме ожидания в течение случайного времени в пределах джиттера перед сбором. Это может быть использовано для того, чтобы избежать одновременного запроса множества плагинов
  precision                   # собранные показатели округляются до точности, указанной в виде int
  debug                       # ведение журнала на уровне отладки
  quiet                       # ведение журнала только для сообщений об ошибках
  logfile                     # имя файла, в который будет производиться запись при использовании лог-таргета "file". Если задана пустая строка, то журналы записываются в stderr
  logfile_rotation_interval   # время ротации журнала. Если установлено значение 0, то изменение по времени не выполняется
  logfile_rotation_max_size   # ротация в рамках объема. Если установлено значение 0, вращение в зависимости от размера не выполняется
  disable_output              # выключение передачи логов, указанное изменение применяется без перезагрузки контейнера логов

# плагины
  
# решение базируется на ряде плагинов, с которыми можно ознакомиться на сайте telegraf. Ниже будут перечислены доступные плагины 

[[inputs.*]]   # список плагинов inputs, которые собирают данные в соответствующем формате

[[inputs.file]]               # считывание данных из файла
  files                       # файлы, из которых происходит считывание
  character_encoding          # кодировка символов, используемая при интерпретации содержимого файла
  data_format                 # формат входных данных (указаны в плагинах parsers)
  file_tag                    # тег для хранения имени файла
  file_path_tag               # тег для хранения абсолютного пути и имени файла

[[inputs.http]]                                 # сбор метрик с одной/нескольких конечных точек HTTP(S)
  urls                                          # массив ссылок, с которых собираются метрики
  method                                        # метод HTTP
  headers                                       # заголовки HTTP
  body                                          # тело объекта HTTP
  content_encoding                              # HTTP Content-Encoding для сжатия в "gzip" или "identity"
  token                                         # настройки токена для API-запросов
  token_file                                    # настройки токена для API-запросов из файла
  username                                      # имя пользователя для авторизаиции
  password                                      # пароль для авторизаиции
  client_id                                     # креды для авторизации OAuth2
  client_secret                                 # креды для авторизации OAuth2
  token_url                                     # креды для авторизации OAuth2
  scopes                                        # креды для авторизации OAuth2
  use_system_proxy                              # поддержка HTTP прокси
  http_proxy_url                                # поддержка HTTP прокси
  tls_enable                                    # использование TLS (true/false)
  tls_ca                                        # настройки TLS, указание пути к файлу «ca» в рамках Pod
  tls_cert                                      # настройки TLS, указание пути к файлу «cert» в рамках Pod
  tls_key                                       # настройки TLS, указание пути к файлу «key» в рамках Pod
  tls_key_pwd                                   # настройки TLS, пароль от зашифрованного TLS ключа
  tls_server_name                               # уникальное имя TLS сервера
  tls_min_version                               # минимальная TLS версия
  tls_cipher_suites                             # список используемых шифров ("all", "secure", "insecure")
  tls_renegotiation_method                      # метод Renegotiation ("never", "once", "freely")
  insecure_skip_verify                          # проверка цепочки сертификатов (true/false)
  cookie_auth_url                               # Cookie аутентификация
  cookie_auth_method                            # Cookie аутентификация
  cookie_auth_username                          # Cookie аутентификация
  cookie_auth_password                          # Cookie аутентификация
  cookie_auth_headers                           # Cookie аутентификация
  cookie_auth_body                              # Cookie аутентификация
  cookie_auth_renewal                           # Cookie аутентификация
  timeout                                       # количество времени, отведенное на выполнение HTTP-запроса
  success_status_codes                          # список успешных статусов кодов 
  data_format                                   # формат входных данных (указаны в плагинах parsers)

[[inputs.http_listener_v2]]                     # плагин проверки HTTP2-соединения
  service_address                               # адрес и порт хоста HTTP-listner
  paths                                         # пути, по которым собираются метрики
  methods                                       # методы HTTP
  http_headers                                  # заголовки HTTP
  http_success_code                             # HTTP-код, который будет возвращен в случае успешного выполнения
  read_timeout                                  # максимальная продолжительность считывания запроса
  write_timeout                                 # максимальная продолжительность записи ответа
  max_body_size                                 # максимально допустимый размер тела HTTP-запроса в байтах (0 означает по умолчанию 500MB)
  data_source                                   # часть запроса для обработки ("body", "query")
  tls_allowed_cacerts                           # настройки TLS, указание пути к файлу «ca» в рамках Pod
  tls_cert                                      # настройки TLS, указание пути к файлу «cert» в рамках Pod
  tls_key                                       # настройки TLS, указание пути к файлу «key» в рамках Pod
  tls_min_version                               # минимальная TLS версия
  basic_username                                # имя пользователя для аутентификации по протоколу HTTP
  basic_password                                # пароль для аутентификации по протоколу HTTP
  http_header_tags                              # установка тегов к заголовкам HTTP
  data_format                                   # формат входных данных (указаны в плагинах parsers)

[[inputs.http_response]]                        # плагин проверки HTTP-соединения
  urls                                          # массив ссылок, с которых собираются метрики
  http_proxy                                    # поддержка HTTP прокси
  response_timeout                              # продолжительность записи ответа
  method                                        # метод HTTP
  follow_redirects                              # выполнение переадресации с сервера (по умолчанию false)
  bearer_token                                  # Bearer токен 
  username                                      # имя пользователя для аутентификации по протоколу HTTP
  password                                      # пароль для аутентификации по протоколу HTTP
  body                                          # тело объекта HTTP
  body_form                                     # пары ключ-значение для кодирования и установки в форме URL-адреса 
  response_body_field                           # имя поля, которое будет содержать основную часть ответа
  response_body_max_size                        # максимально допустимый размер тела HTTP-ответа в байтах (0 означает по умолчанию 500MB)
  response_string_match                         # совпадение подстроки или регулярного выражения в тексте ответа
  response_status_code                          # ожидаемый код состояния ответа
  tls_ca                                        # настройки TLS, указание пути к файлу «ca» в рамках Pod
  tls_cert                                      # настройки TLS, указание пути к файлу «cert» в рамках Pod
  tls_key                                       # настройки TLS, указание пути к файлу «key» в рамках Pod
  insecure_skip_verify                          # проверка цепочки сертификатов (true/false)
  tls_server_name                               # уникальное имя TLS сервера
  tls_renegotiation_method                      # метод Renegotiation ("never", "once", "freely")
  [inputs.http_response.headers]                # дополнительные заголовки HTTP-запроса
    Host = "github.com"
  http_header_tags                              # установка тегов к заголовкам HTTP
  interface                                     # интерфейс, используемый при наборе адреса
  cookie_auth_url                               # Cookie аутентификация
  cookie_auth_method                            # Cookie аутентификация
  cookie_auth_username                          # Cookie аутентификация 
  cookie_auth_password                          # Cookie аутентификация
  cookie_auth_body                              # Cookie аутентификация
  cookie_auth_renewal                           # Cookie аутентификация

[[inputs.internal]]                             # сбор метрик о самом агенте-сборщике
  collect_memstats                              # сбор статистики памяти агента
  collect_gostats                               # сбор показателей из runtime.metrics в Go
 
[[inputs.tail]]                                 # сбор сообщений журнала logfile
  files                                         # файлы, из которых происходит считывание
  from_beginning                                # чтение файла с начала
  pipe                                          # является ли файл named pipe
  watch_method                                  # отслеживание обновлений файлов ("inotify" - Linux, *bsd и macOS, "poll" - Windows)
  max_undelivered_lines                         # максимальное количество строк файла для обработки, которые еще не были записаны в выходные данные
  character_encoding                            # кодировка символов, используемая при интерпретации содержимого файла
  data_format                                   # формат входных данных (указаны в плагинах parsers)
  path_tag                                      # тег, который будет содержать путь к завершенному файлу. Если вам не нужен этот тег, замените его пустой строкой
  filters                                       # фильтры, применяемые к файлам перед генерацией метрик
  [inputs.tail.multiline]                       # обработка нескольких строк журнала
    pattern                                     # регулярное выражение, которое соответствует тому, что поле является частью события, состоящего из нескольких строк данных журнала.
    match_which_line                            # указание на отношение к многострочному событию ("previous", "next")
    invert_match                                # инвертированное соответствие ("true" - сообщение, не соответствующее шаблону, будет соответствовать многострочному фильтру; "false" - сообщение, соответствующее шаблону, не будет соответствовать многострочному фильтру)
    quotation                                   # обработка текста в кавычки ("ignore" - без кавычек, "single-quotes" - одинарные кавычки ', "double-quotes" - двойные каычки ", "backticks" - косые кавычки `)
    preserve_newline                            # сохранение символа новой строки "\n" для многострочных элементов
    timeout                                     # отправление многострочного события по истечении указанного времени (по умолчанию 5с) 

[[outputs.*]]   # список плагинов outputs, которые отправляют данные в соответствующем формате

[[outputs.discard]]                             # плагин удаляет все отправляемые ему метрики. Он предназначен только для использования в целях тестирования

[[outputs.file]]                                # отправка метрик в отдельный файл в Pod
  files                                         # файлы, в которые будет происходить запись
  use_batch_format                              # использование batch сериализации
  rotation_interval                             # промежуток времени, через который будет происходить ротация файлов
  rotation_max_size                             # максимальный размер файла, при превышении которого будет происходить ротация файлов 
  rotation_max_archives                         # максимальное количество хранимых архивов
  data_format                                   # формат входных данных (указаны в плагинах parsers)
  compression_algorithm                         # сжатие выходных данных ("zstd", "gzip", "zlib")
  compression_level                             # уровень сжатия для параметра выше ("zstd" - поддерживает уровни 1, 3, 7, 11; "gzip" - поддерживает уровни 0, 1, 9; "zlib" - поддерживает уровни 0, 1, 9)

[[outputs.health]]                              # плагин, который предоставляет возможность health check точки доступа
  service_address                               # настройка порта для liveness/readness проб
  read_timeout                                  # максимальная продолжительность считывания запроса
  write_timeout                                 # максимальная продолжительность записи ответа
  basic_username                                # имя пользователя для аутентификации по протоколу HTTP
  basic_password                                # пароль для аутентификации по протоколу HTTP
  tls_allowed_cacerts                           # настройки TLS, указание пути к файлу «ca» в рамках Pod
  tls_cert                                      # настройки TLS, указание пути к файлу «cert» в рамках Pod
  tls_key                                       # настройки TLS, указание пути к файлу «key» в рамках Pod

[[outputs.http]]                                # плагин, который отправляет метрики в HTTP-сообщении
  url                                           # ссылка, на которую отправляются метрики
  timeout                                       # количество времени, отведенное на выполнение HTTP-запроса                     
  method                                        # метод HTTP (один из "POST", "PUT", "PATCH")                     
  username                                      # имя пользователя для авторизаиции                        
  password                                      # пароль для авторизаиции                       
  client_id                                     # креды для авторизации OAuth2                       
  client_secret                                 # креды для авторизации OAuth2                           
  token_url                                     # креды для авторизации OAuth2                       
  audience                                      # креды для авторизации OAuth2                       
  scopes                                        # креды для авторизации OAuth2                    
  google_application_credentials                # google api авторизация                                             
  use_system_proxy                              # поддержка HTTP прокси                               
  http_proxy_url                                # поддержка HTTP прокси                             
  tls_ca                                        # настройки TLS, указание пути к файлу «ca» в рамках Pod                     
  tls_cert                                      # настройки TLS, указание пути к файлу «cert» в рамках Pod                       
  tls_key                                       # настройки TLS, указание пути к файлу «key» в рамках Pod                     
  insecure_skip_verify                          # проверка цепочки сертификатов (true/false)                                   
  cookie_auth_url                               # Cookie аутентификация                             
  cookie_auth_method                            # Cookie аутентификация                                 
  cookie_auth_username                          # Cookie аутентификация                                   
  cookie_auth_password                          # Cookie аутентификация                                   
  cookie_auth_headers                           # Cookie аутентификация                                 
  cookie_auth_body                              # Cookie аутентификация                               
  cookie_auth_renewal                           # Cookie аутентификация                                 
  data_format                                   # формат входных данных (указаны в плагинах parsers)                         
  use_batch_format                              # использование batch сериализации                               
  content_encoding                              # HTTP Content-Encoding для сжатия в "gzip" или "identity"                              
  max_idle_conn                                 # определяет максимальное количество незанятых поддерживаемых соединений на всех хостах                           
  max_idle_conn_per_host                        # определяет максимальное количество незанятых поддерживаемых соединений для каждого хоста                    
  idle_conn_timeout                             # Время ожидания соединения
  region                                        # регион Amazon                               
  aws_service                                   # креды Amazon                         
  non_retryable_statuscodes                     # список кодов состояния (<200 или >300), по которым не следует повторять запросы                                       
  [outputs.http.headers]                        # дополнительные заголовки HTTP-запроса                                     
    Content-Type = "text/plain; charset=utf-8"                                                           

[[outputs.kafka]]                               # плагин отправляет данные в Kafka Broker, выступая в роли Kafka Producer
  brokers                                       # список брокеров Kafka
  topic                                         # топик Kafka
  topic_tag                                     # значение этого тега будет использовано в качестве топика
  exclude_topic_tag                             # удаление topic_tag из метрики
  client_id                                     # Id клиента
  version                                       # установите минимальную поддерживаемую версию Kafka. Эта настройка позволяет использовать новые функции и API-интерфейсы. Требуется версия не менее 0.10.0.0                 
  routing_tag                                   # тег routing определяет ключ в метрике, значение которого используется в качестве ключа сообщения. Ключ message используется для определения того, в какой раздел отправлять сообщение
  routing_key                                   # задается как ключ сообщения и используется для определения того, какому разделу отправлять сообщение. Это значение используется только в том случае, если routing_tag не задан, или в качестве запасного варианта, когда тег, указанный в теге маршрутизации, не найден
  compression_codec                             # кодек сжатия, распознаваемый Kafka в сообщениях (0 : None, 1 : Gzip, 2 : Snappy, 3 : LZ4, 4 : ZSTD)               
  idempotent_writes                             # идемпотентная запись, если она включена, записывается ровно одна копия каждого сообщения
  required_acks                                 # сколько подтверждений реплик брокер должен увидеть, прежде чем ответить (0: producer никогда не ждет подтверждения от брокера, 1: producer получает подтверждение после того, как ведущая реплика получит данные, -1: producer получает подтверждение после того, как все синхронизированные реплики получат данные)
  max_retry                                     # максимальное количество повторных попыток отправки
  max_message_bytes                             # максимальный размер сообщения при отправке
  producer_timestamp                            # временная метка сообщения kafka producer ("metric", "now")                
  metric_name_header                            # добавление названия метрики в соответствии с указанным заголовком Kafka
  enable_tls                                    # использование TLS (true/false)
  tls_ca                                        # настройки TLS, указание пути к файлу «ca» в рамках Pod
  tls_cert                                      # настройки TLS, указание пути к файлу «cert» в рамках Pod
  tls_key                                       # настройки TLS, указание пути к файлу «key» в рамках Pod
  insecure_skip_verify                          # проверка цепочки сертификатов (true/false)
  keep_alive_period                             # настройка времени соединения без запросов (15s)
  socks5_enabled                                # настройка прокси-сервера SOCKS5 для использования при подключении к брокерам
  socks5_address                                # настройка прокси-сервера SOCKS5 для использования при подключении к брокерам
  socks5_username                               # настройка прокси-сервера SOCKS5 для использования при подключении к брокерам
  socks5_password                               # настройка прокси-сервера SOCKS5 для использования при подключении к брокерам
  sasl_username                                 # конфигурация SASL
  sasl_password                                 # конфигурация SASL
  sasl_mechanism                                # конфигурация SASL ("OAUTHBEARER", "PLAIN", "SCRAM-SHA-256", "SCRAM-SHA-512", "GSSAPI")
  sasl_gssapi_service_name                      # конфигурация SASL, используется, если sasl_mechanism = "GSSAPI" 
  sasl_gssapi_auth_type                         # конфигурация SASL ("KRB5_USER_AUTH", "KRB5_KEYTAB_AUTH")
  sasl_gssapi_kerberos_config_path              # конфигурация SASL 
  sasl_gssapi_realm                             # конфигурация SASL
  sasl_gssapi_key_tab_path                      # конфигурация SASL
  sasl_gssapi_disable_pafxfast                  # конфигурация SASL
  sasl_access_token                             # указывается токен доступа, если sasl_mechanism = "OAUTHBEARER"
  sasl_extensions                               # пары строк ключ-значение для передачи в виде таблицы TOML
  sasl_version                                  # версия SASL
  metadata_full                                 # отключение полной выборки метаданных Kafka
  metadata_retry_max                            # максимальное количество повторных попыток для операций с метаданными
  metadata_retry_type                           # логика retry ("constant", "exponential")
  metadata_retry_backoff                        # время ожидания перед retry
  metadata_retry_max_duration                   # время ожидания перед retry при metadata_retry_type = "exponential"
  data_format                                   # формат входных данных (указаны в плагинах parsers) 
  [outputs.kafka.topic_suffix]                  # добавление суффикса конфигурации
    method                                      # "measurement" - суффикс строится как значение separator и имя измерения; "tags" - суффикс строится как значение separator и значения тегов, разделенных separator
    separator
    keys                                        # если зачение method = "tags"

[[outputs.loki]]                                # плагин отправляет логи в Loki, используя имя метрики и теги в качестве меток
  domain                                        # домен Loki
  endpoint                                      # endpoint для записи API
  timeout                                       # продолжительность времени подключения (по умолчанию 5с)
  username                                      # имя пользователя для авторизаиции   
  password                                      # пароль для авторизации   
  http_headers                                  # дополнительные заголовки HTTP-запроса  
  gzip_request                                  # кодирование запроса в формате "gzip"
  tls_ca                                        # настройки TLS, указание пути к файлу «ca» в рамках Pod 
  tls_cert                                      # настройки TLS, указание пути к файлу «cert» в рамках Pod 
  tls_key                                       # настройки TLS, указание пути к файлу «key» в рамках Pod 
  sanitize_label_names                          # очистка имен тегов
  metric_name_label                             # метка, которая будет использоваться в качестве имени метрики при отправке

[[processors.*]]                                # список плагинов processors, которые преобразовывают собранные данные

[[processors.converter]]                                          # плагин используется для изменения типа тега или значений полей
  [processors.converter.tags] или [processors.converter.fields]   # теги или поля для преобразования. Ключ таблицы определяет целевой тип, а массив ключей-значений обозначает ключи для преобразования
    measurement = []
    string = []
    integer = []
    unsigned = []
    boolean = []
    float = []

[[processors.date]]
  tag_key или field_key                         # создание нового тега или поля
  date_format                                   # формат времени в виде строки, например, date_format = "Jan" или date_format = "unix" для полей
  date_offset                                   # промежуток времени, добавляемый к дате нового тега
  timezone                                      # временная зона 

[[processors.dedup]]                            # плагин позволяет фильтровать метрики, значения полей которых являются точными повторениями предыдущих значений
  dedup_interval                                # время отслеживания дублей за этот промежуток времени

[[processors.defaults]]                         # плагин позволяет гарантировать, что определенные поля всегда будут иметь указанное значение по умолчанию в метриках
  [processors.defaults.fields]
    <target-field> = <value>

[[processors.enum]]                             # плагин позволяет настраивать сопоставления значений для метрик или полей
  [[processors.enum.mapping]]
    field или tag                               # поле или тег для сопоставления
    dest                                        # итоговое значение поля или тега
    default                                     # значение по умолчанию для всех полей/тегов
    [processors.enum.mapping.value_mappings]    # таблица сопоставлений
      <target-field> = <value>

[[processors.filter]]                           # плагин позволяет указать набор правил для метрик с возможностью сохранения или удаления этих метрик
  default                                       # действие по умолчанию, если правило не применяется
  [[processors.filter.rule]]
    name                                        # cписок имен метрик, соответствующих фильтру
    tags                                        # cписок тегов ключ-значение, соответствующих фильтру
    fields                                      # cписок полей, соответствующих фильтру
    action                                      # действие, необходимое для применения этого правила

[[processors.override]]                         # плагин позволяет переопределять все модификации, поддерживаемые плагинами ввода и агрегаторами
  name_override                                 # перезаписать новое имя
  name_prefix                                   # перезаписать новый префикс
  name_suffix                                   # перезаписать новый суффикс
  [processors.override.tags]
    additional_tag                              # добавление нового тега

[[processors.parser]]                           # плагин анализирует определенные поля или теги, содержащие указанный формат данных, и создает новые метрики на основе содержимого поля или тега
  parse_fields                                  # название полей, значения которых будут проанализированы
  parse_fields_base64                           # поля для декодирования в base64
  parse_tags                                    # названия тегов, значения которых будут проанализировано
  drop_original                                 # если значение равно true, то входящие метрики не генерируются
  merge                                         # если drop_original = "false", то генерируемые метрики объединяются путем переопределения исходной метрики
  data_format                                   # формат входных данных (указаны в плагинах parsers) 

[[processors.regex]]                            # плагин преобразует значения тегов и полей, а также переименовывает теги, поля и метрики с использованием шаблонов регулярных выражений
  namepass
  [[processors.regex.tags]]                     # преобразование значений тегов
    key
    pattern
    replacement
  [[processors.regex.fields]]                   # преобразование значений полей
    key
    pattern
    replacement
  [[processors.regex.field_rename]]             # переименование полей
    pattern
    replacement
  [[processors.regex.tag_rename]]               # переименование тегов
    pattern
    replacement
 [[processors.regex.metric_rename]]             # переименование метрик
    pattern
    replacement

[[processors.rename]]                           # плагин переименовывает измерения, поля и теги
  measurement или tag или field
  dest

[[processors.template]]                         # плагин применяет шаблон Go к метрикам для генерации нового тега
  tag
  template

[[parsers.*]]   # список плагинов parsers, которые переводят входящие данные в соответствующие структуры

[[parsers.avro]]
[[parsers.binary]]
[[parsers.collectd]]
[[parsers.csv]]
[[parsers.dropwizard]]
[[parsers.form_urlencoded]]
[[parsers.graphite]]
[[parsers.grok]]
[[parsers.influx]]
[[parsers.json]]
[[parsers.json_v2]]
[[parsers.logfmt]]
[[parsers.opentsdb]]
[[parsers.parquet]]
[[parsers.prometheus]]
[[parsers.prometheusremotewrite]]
[[parsers.value]]
[[parsers.wavefront]]
[[parsers.xpath]]

[[serializers.*]]   # список плагинов serializers, которые предоставляю данные в различных форматах

[[serializers.binary]]
[[serializers.carbon2]]
[[serializers.cloudevents]]
[[serializers.csv]]
[[serializers.graphite]]
[[serializers.influx]]
[[serializers.json]]
[[serializers.json_line]]
[[serializers.msgpack]]
[[serializers.nowmetric]]
[[serializers.prometheus]]
[[serializers.prometheusremotewrite]]
[[serializers.splunkmetric]]
[[serializers.template]]
[[serializers.wavefront]]

Настройка интеграции с Kafka посредством реализации конфигураций Istio для шифрования на граничном прокси egressgateway.

Необходимые параметры:

Параметр

Пример заполнения

Описание

TOKEN

1

Уникальный номер брокера

BROKER

broker1.ru

Хост брокера

BROKER_IP

*.*.*.*

IP-адрес брокера

NAMESPACE

namespace

Наименование проекта, где реализуется интеграция

EGRESS_SELECTOR

egw-namespace

Значение selector в рамках egressgateway ключа «Istio»

EGRESS_PORT

19443

Любой свободный порт для egressgateway, должен быть уникальный для каждого брокера

KAFKA_PORT

9093

Внешний порт брокера 9092/9093

Перед запуском заполните параметры, следующей командой:

TOKEN=<ваш параметр>
BROKER=<ваш параметр>
BROKER_IP=<ваш параметр>
NAMESPACE=<имя namespace, где реализуется интеграция>
EGRESS_SELECTOR=<ваш параметр>
EGRESS_PORT=<ваш параметр>
KAFKA_PORT=<ваш параметр>

Пример реализации шаблона для конфигураций:

kubectl apply -n $NAMESPACE --validate=false -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: kafka-gw-$TOKEN
spec:
  selector:
    istio: $EGRESS_SELECTOR
  servers:
    - hosts: ['$BROKER']
      port:
        name: 'tcp-kafka-$TOKEN'
        number: $EGRESS_PORT
        protocol: TCP
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: kafka-vs-$TOKEN
spec:
  exportTo: [.]
  gateways:
    - kafka-gw-$TOKEN
    - mesh
  hosts: ['$BROKER']
  tcp:
    - match:
        - destinationSubnets: ['$BROKER_IP']
          gateways: [mesh]
      route:
        - destination:
            host: egressgateway-kafka-$TOKEN
            port:
              number: $EGRESS_PORT
    - match:
        - gateways: ['kafka-gw-$TOKEN']
      route:
        - destination:
            host: '$BROKER'
            port:
              number: $KAFKA_PORT
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: kafka-dr-$TOKEN
spec:
  exportTo: [.]
  host: '$BROKER'
  trafficPolicy:
    loadBalancer:
      simple: LEAST_CONN
    portLevelSettings:
      - port:
          number: $KAFKA_PORT
        tls:
          caCertificates: /etc/config/ssl/tengri_ca.cer
          clientCertificate: /etc/config/ssl/tengri.pem
          mode: MUTUAL
          privateKey: /etc/config/ssl/tengri.key
          sni: $BROKER
---
kind: Service
apiVersion: v1
metadata:
  name: egressgateway-kafka-$TOKEN
spec:
  ports:
    - name: tcp-kafka-$TOKEN
      protocol: TCP
      port: $EGRESS_PORT
      targetPort: $EGRESS_PORT
  selector:
    istio: $EGRESS_SELECTOR
  type: ClusterIP
---
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: kafka-se-$TOKEN
spec:
  addresses:
    - $BROKER_IP
  endpoints:
    - address: $BROKER_IP
  exportTo:
    - .
  hosts:
    - $BROKER
  location: MESH_EXTERNAL
  ports:
    - name: tcp
      number: $KAFKA_PORT
      protocol: TCP
  resolution: DNS
EOF

Ожидаемый результат:

gateway.networking.istio.io/kafka-gw-${token} created
virtualservice.networking.istio.io/kafka-vs-${token} created
destinationrule.networking.istio.io/kafka-dr-${token} created
service/egressgateway-kafka-${token} created
serviceentry.networking.istio.io/kafka-se-${token} created

ВАЖНО! В рамках корректной маршрутизации трафика рекомендуем использовать сертификаты на стороне IGEG для безопасной маршрутизации. Пример, приложение логов реализует передачу логов, используя конфигурации Istio, нужно маршрутизировать запрос на egress, в рамках которого публикуются сертификаты по внешнему взаимодействию. Более подробные рекомендации указаны в документации компонента IGEG.

Конфигурации в рамках кластера#

Конфигурации запуска Kafka „adapter“ (реализуются в рамках «kind: ConfigMap» с наименованием «synapse-kafka-adapter-env»)

Параметр

Пример

Описание

GIN_MODE

release

Управление механизмом отладки gin. Возможные значения: debug или release

KAFKA_BATCH_NUM_MESSAGES

20000

Количество сообщений для пакетной записи. По умолчанию 10000

KAFKA_BROKER_LIST

kafka1.ru,kafka2.ru

Список используемых брокеров Kafka

KAFKA_TOPIC

Synapse.Metrics

Используемый топик Kafka

LOG_LEVEL

info

Уровень логирования, доступны следующие значения: debug, info, warn, error, fatal или panic, по умолчанию info

PORT

8080

Порт, по которому приложение Kafka „adapter“ будет принимать сообщения

SERIALIZATION_FORMAT

json

Формат передачи данных в Kafka

Конфигурации «умной» маршрутизации Kafka „adapter“ (реализуются в рамках «kind: ConfigMap» с наименованием «synapse-kafka-routes-config») описаны в документе Руководство по системному администрированию, в разделе «Подключение и конфигурирование».

Конфигурации запуска „Agent“ (Реализуются посредством уcтановки аргументов запуска в «kind: StatefulSet»)

Аргумент

Пример

Описание

-promscrape.config

/scrapeconfig/scrape.yml

Место расположение файлов с scrape конфигурациями

-promscrape.maxScrapeSize

1GiB

Максимальный объем ответа при запросе метрик

-promscrape.cluster.memberNum

$(POD_NAME)

Номер Pod, желательно не менять параметр при расчете

-promscrape.cluster.membersCount

1

Номер Pod, указанный параметр должен быть равен replicas

-promscrape.cluster.name

$(POD_NAME)-$(POD_NAMESPACE)

Уникальный идентификатор Pod

-loggerLevel

INFO

Уровень логирования. Возможное значения - INFO, WARN, ERROR, FATAL, PANIC

-promscrape.streamParse

true

Включение синтетического анализа метрик

-promscrape.suppressDuplicateScrapeTargetErrors

Выключение визуализации ошибок в логе про дублирование метрик

-remoteWrite.maxDiskUsagePerURL

1GiB

Если удаленное хранилище недоступно, то метрики сохраняются в буфере приложения. Размер буфера фиксируется указанным параметром

-remoteWrite.tmpDataPath

/data

Место сохранения данных, в рамках Pod

-remoteWrite.queues

8

Количество очередей для отправки сообщений в удаленное хранилище (по умолчанию 8)

-remoteWrite.url

http://localhost:8080/receive

Адрес хранилища Prometheus, либо адрес Kafka „Adapter“, для передачи собранных метрик

Опционально, можно настроить шардирование в рамках работы компонент GATM.

При установке рекомендуем реализовать аргументы по шардированию, по следующей логике.

kind: ConfigMap
apiVersion: v1
metadata:
  name: synapse-agent-env
data:
  GATM_promscrape_cluster_membersCount: '{{ .Values.replicas }}'
....

При установке компонента GATM, более 1 реплики, будет производиться scrape метрик равномерно на каждую пользовательскую Pod, например, в рамках пользовательского проекта реализовано 8 Pod и при установке компонента GATM необходимо заполнить параметры следующим образом:

kind: ConfigMap
apiVersion: v1
metadata:
  name: synapse-agent-env
data:
  GATM_promscrape_cluster_membersCount: '{{ .Values.replicas }}'
....

При старте приложений каждый Pod GATM будет производить scrape метрик по 4 пользовательским Pod, что позволяет равномерно распределить нагрузку на компонент GATM и исключить дублирование при сборе метрик.

Screenshot

Схема. Концептуальная схема параллельного scrape метрик при работе более 1 реплики Pod GATM

Screenshot

Схема. Реализация тенантирования при установке GATM

Настройка интеграции#

В рамках безопасного сетевого взаимодействия также необходимо реализовать конфигурации Istio для каждого брокера Kafka, если брокеров более 1, то необходимо добавлять конфигурации повторно, с уникальными значениями.

Необходимые параметры

Параметр

Пример заполнения

Описание

TOKEN

1

Уникальный номер брокера

BROKER

broker1.ru

Хост брокера

BROKER_IP

...

IP-адрес брокера

GATM_NAMESPACE

namespace

Наименование проекта, куда устанавливается GATM

EGRESS_PORT

19443

Любой свободный порт для egressgateway, должен быть уникальный для каждого брокера

KAFKA_PORT

9093

Внешний порт брокера 9092/9093

Перед запуском заполните параметры, следующей командой:

TOKEN=<ваш параметр>
BROKER=<ваш параметр>
BROKER_IP=<ваш параметр>
GATM_NAMESPACE=<имя namespace, где установлен GATM>
EGRESS_PORT=<ваш параметр>
KAFKA_PORT=<ваш параметр>

Пример реализации шаблона для конфигураций:

kubectl apply -n $GATM_NAMESPACE --validate=false -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: kafka-gw-$TOKEN
spec:
  selector:
    istio: egr-syn-metrics-$GATM_NAMESPACE
  servers:
    - hosts: ['$BROKER']
      port:
        name: 'tcp-kafka-$TOKEN'
        number: $EGRESS_PORT
        protocol: TCP
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: kafka-vs-$TOKEN
spec:
  exportTo: [.]
  gateways:
    - kafka-gw-$TOKEN
    - mesh
  hosts: ['$BROKER']
  tcp:
    - match:
        - destinationSubnets: ['$BROKER_IP']
          gateways: [mesh]
      route:
        - destination:
            host: egressgateway-kafka-$TOKEN
            port:
              number: $EGRESS_PORT
    - match:
        - gateways: ['kafka-gw-$TOKEN']
      route:
        - destination:
            host: '$BROKER'
            port:
              number: $KAFKA_PORT
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: kafka-dr-$TOKEN
spec:
  exportTo: [.]
  host: '$BROKER'
  trafficPolicy:
    loadBalancer:
      simple: LEAST_CONN
    portLevelSettings:
      - port:
          number: $KAFKA_PORT
        tls:
          caCertificates: /etc/config/ssl/tengri_ca.cer
          clientCertificate: /etc/config/ssl/tengri.pem
          mode: MUTUAL
          privateKey: /etc/config/ssl/tengri.key
          sni: $BROKER
---
kind: Service
apiVersion: v1
metadata:
  name: egressgateway-kafka-$TOKEN
spec:
  ports:
    - name: tcp-kafka-$TOKEN
      protocol: TCP
      port: $EGRESS_PORT
      targetPort: $EGRESS_PORT
  selector:
    istio: egr-syn-metrics-$GATM_NAMESPACE
  type: ClusterIP
---
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: kafka-se-$TOKEN
spec:
  addresses:
    - $BROKER_IP
  endpoints:
    - address: $BROKER_IP
  exportTo:
    - .
  hosts:
    - $BROKER
  location: MESH_EXTERNAL
  ports:
    - name: tcp
      number: $KAFKA_PORT
      protocol: TCP
  resolution: DNS
EOF

Ожидаемый результат:

gateway.networking.istio.io/kafka-gw-${token} created
virtualservice.networking.istio.io/kafka-vs-${token} created
destinationrule.networking.istio.io/kafka-dr-${token} created
service/egressgateway-kafka-${token} created
serviceentry.networking.istio.io/kafka-se-${token} created

В рамках конфигурации реализуются механизмы шифрования данных по «mTLS 1.2 и выше» на граничном прокси (egressgateway).

Для взаимной аутентификации и шифрования трафика должны использоваться сертификаты x509.

Системные метрики

Если установка произведена в Openshift, то будет возможность производить scrape системных метрик.

Пример реализации scrape конфигурации:

apiVersion: v1
kind: ConfigMap
metadata:
  name: synapse-metrics-agent-scrapeconfig
data:
  scrape.yml: |
...
    - job_name: federate
      honor_labels: true
      honor_timestamps: true
      params:
        'match[]':
          - '{namespace="$GATM_NAMESPACE"}'
      metrics_path: /federate
      scheme: https
      static_configs:
      - targets:
        - federate.openshift-monitoring.svc.cluster.local:9090
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
        insecure_skip_verify: false

Также возможна кастомизация адреса сервиса в рамках кластера Kubernetes по реализации сбора системных метрик

Пример реализации scrape конфигурации с опциональной реализацией группировки по проектам:

apiVersion: v1
kind: ConfigMap
metadata:
  name: synapse-metrics-agent-scrapeconfig
data:
  scrape.yml: |
...
    - job_name: federate-scrape-own
      honor_labels: true
      honor_timestamps: true
      metric_relabel_configs:
      - source_labels: [__name__]
        action: keep
        regex: ('|container_memory_working_set_bytes|kube_pod_info|container_cpu_usage_seconds_total|kube_pod_container_resource_requests|kube_pod_container_resource_limits|kube_deployment_status_replicas_available|kube_deployment_status_replicas|container_memory_usage_bytes|')
      metrics_path: /federate
      scheme: http
      static_configs:
      - targets:
        - prometheus-service.kube-system.svc.cluster.local:8080
        labels:
          job: federate-scrape-one
          __metrics_path__: federate?match%5B%5D=%7Bnamespace%3D%22synapse-metrics-system%22%7D&match%5B%5D=%7Bnamespace%3D%22istio-operator-v117%22%7D&match%5B%5D=%7Bnamespace%3D%22default%22%7D
      - targets:
        - prometheus-service.kube-system.svc.cluster.local:8080
        labels:
          job: federate-scrape-two
          __metrics_path__: federate?match%5B%5D=%7Bnamespace%3D%22istio-test%22%7D&match%5B%5D=%7Bnamespace%3D%22istio-system-v117%22%7D
      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token

Внешнее хранилище секретов

Пример реализации аннотаций для интеграции на Egressgateway

...
        vault.hashicorp.com/agent-inject-secret-tengri_ca.cer: 'true'
        vault.hashicorp.com/agent-inject-template-tengri.key: >
          {{`{{- with secret`}}
          "{{- .Values.vault.kv -}}/KAFKA-BROKER-CRT"
          {{`-}}
            {{ index .Data "tls.key" `}}{{ if  .Values.vault.secret_base64 }}| base64Decode {{ end }}{{`}}
          {{- end }}`}}
        vault.hashicorp.com/agent-inject-secret-tengri.pem: 'true'
        vault.hashicorp.com/namespace: {{ .Values.vault.secmanNamespace }}
        vault.hashicorp.com/role: {{ .Values.vault.secmanRole }}
        vault.hashicorp.com/agent-pre-populate-only: '{{ .Values.vault.pre_populate_only }}'
        {{- if eq .Values.useControl "k8s" }}
        vault.hashicorp.com/agent-run-as-same-user: 'true'
        {{ end }}
        vault.hashicorp.com/secret-volume-path-tengri.pem: /etc/config/ssl
        vault.hashicorp.com/agent-inject-template-tengri_ca.cer: >
          {{`{{- with secret`}}
          "{{- .Values.vault.kv -}}/KAFKA-BROKER-CRT"
          {{`-}}
            {{ index .Data "ca-bandle.pem" `}}{{ if  .Values.vault.secret_base64 }}| base64Decode {{ end }}{{`}}
          {{- end }}`}}
        vault.hashicorp.com/agent-inject: 'true'
        vault.hashicorp.com/agent-init-first: 'false'
        vault.hashicorp.com/agent-inject-secret-tengri.key: 'true'
        vault.hashicorp.com/agent-pre-populate: 'true'
        vault.hashicorp.com/secret-volume-path-tengri.key: /etc/config/ssl
        vault.hashicorp.com/agent-inject-template-tengri.pem: >
          {{`{{- with secret`}}
          "{{- .Values.vault.kv -}}/KAFKA-BROKER-CRT"
          {{`-}}
            {{ index .Data "tls.pem" `}}{{ if  .Values.vault.secret_base64 }}| base64Decode {{ end }}{{`}}
          {{- end }}`}}
        vault.hashicorp.com/secret-volume-path-tengri_ca.cer: /etc/config/ssl
... # при хранении сертификатов для системных метрик
        vault.hashicorp.com/agent-inject-secret-tls.crt: 'true'
        vault.hashicorp.com/secret-volume-path-tls.crt: /etc/config/system-metrics
        vault.hashicorp.com/agent-inject-template-tls.crt: >
          {{`{{- with secret`}}
          "{{- .Values.vault.kv -}}/monitoring"
          {{`-}}
            {{ index .Data "tls.crt" `}}{{ if  .Values.vault.secret_base64 }}| base64Decode {{ end }}{{`}}
          {{- end }}`}}
        vault.hashicorp.com/agent-inject-secret-tls.key: 'true'
        vault.hashicorp.com/secret-volume-path-tls.key: /etc/config/system-metrics
        vault.hashicorp.com/agent-inject-template-tls.key: >
          {{`{{- with secret`}}
          "{{- .Values.vault.kv -}}/monitoring"
          {{`-}}
            {{ index .Data "tls.key" `}}{{ if  .Values.vault.secret_base64 }}| base64Decode {{ end }}{{`}}
          {{- end }}`}}
...

Где: {{- .Values.vault.kv -}} - путь к секретам в «Hashicorp Vault» {{ .Values.vault.secmanNamespace }} - namespace в рамках «Hashicorp Vault» {{ .Values.vault.secmanRole }} - наименование роли на чтение секретов в «Hashicorp Vault» {{ .Values.vault.secret_base64 }} - формат хранения сертификатов в «Hashicorp Vault» (true/false)

Более подробно можно ознакомиться в официальной документации «Hashicorp Vault».

Интеграция с компонентом KFGT (kafka шлюз)

При необходимости передачи собранных метрик в компонент KFGT необходимо дополнительно реализовать параметры в ConfigMap приложения Kafka „Adapter“

kind: ConfigMap
apiVersion: v1
metadata:
  name: synapse-kafka-adapter-env
data:
  KFGT_INTEGRATION: enabled
  KFGT_PROTO: HTTP                # также поддерживается GRPC
  KFGT_URL: service-kfgt:port     # url kind: service приложения KFGT и port

Обновление#

  • Через CLI Kubectl

Шаг

Действия

Описание

Создать директорию для установки

На компьютере, с которого будет производиться установка, создать папку, например, «synapse-gatm»

Разархивировать файлы

Распаковать в созданную папку архив с конфигурационными артефактами компонента GATM

  • Через Helm

Данный алгоритм актуален при ручной установке компонента GATM. Для обновления компонента через Helm необходимо выполнить алгоритм действий по запуску команды, описанный ниже в пункте «Загрузить новую версию».

Подключиться к проекту#

  • Через CLI Kubectl

Шаг

Действия

Описание

Выполнить вход в Kubernetes

Загрузить «kubeConfig» от вашего «ServiceAccount». Завести переменную KUBECONFIG=~/.kube/config, где располагается выгруженная конфигурация

Перейти в нужный «Namespace»

Ввести команду:
kubectl config set-context --current --namespace=<имя вашего проекта>

Остановить компонент#

  • Через CLI Kubectl

Шаг

Действия

Описание

Остановка компонента

В консоли выполните команду
kubectl scale --replicas=0 statefulset/<имя>

Удалить артефакты действующей версии#

  • Через CLI Kubectl

Шаг

Действия

Описание

Сохранение Statefulset

В консоли выполнить команду:
kubectl get -o yaml statefulset/<имя> > <путь к файлу>.yaml

Сохранение конфигурации

В консоли выполнить команду:
kubectl get -o yaml configmaps/<имя config map> > <путь к файлу>.yaml

Удаление Statefulset

В консоли выполнить команду:
kubectl delete statefulset <имя>

Удаление конфигурации

В консоли выполнить команду:
kubectl delete configmap <имя config map>

При необходимости изменить конфигурацию

Загрузить новую версию#

  • Через CLI Kubectl

Шаг

Действия

Описание

Загрузка конфигурации

В консоли выполнить команду:
kubectl apply -f ${FILE_NAME}.yml

С новыми конфигурационными файлами

Загрузка Statefulset

В консоли выполнить команду:
kubectl apply -f ${FILE_NAME}.yml

С новой версией «kind: Statefulset»

  • Через Helm

Шаг

Действия

Описание

Отредактировать стендозависимые параметры

В ранее установленном чарте GATM открыть файл «values.yaml», отредактировать его значения

Запустить команду обновления

В командной строке ввести команду:
helm upgrade gatm /path/to/gatm_chart -f /path/to/gatm_values.yaml -n <namespace> --kubeconfig=/path/to/kubeconfig

Запустить новую версию компонента#

  • Через CLI Kubectl

Шаг

Действия

Описание

Запустить новую версию компонента

В консоли выполнить команду
kubectl scale --replicas=${N} statefulset/<имя>

$N — необходимое количество «kind: Pod», рекомендованное значение 2

Удаление#

Подключиться к проекту#

  • Через CLI Kubectl

Шаг

Действия

Описание

Выполнить вход в Kubernetes

Загрузить «kubeConfig» от вашего «ServiceAccount». Завести переменную KUBECONFIG=~/.kube/config, где располагается выгруженная конфигурация.

Перейти в нужный «Namespace»

Ввести команду:
kubectl config set-context --current --namespace=<имя вашего проекта>

Остановить компонент#

  • Через CLI Kubectl

Шаг

Действия

Описание

Остановка приложения

В консоли выполнить команду
kubectl scale --replicas=0 statefulset/<имя>

Удалить артефакты действующей версии#

  • Через CLI Kubectl

Шаг

Действия

Описание

Удалить Statefulset

В консоли выполнить команду:
kubectl delete -o yaml statefulset/<имя> > <путь к файлу>.yaml

Удалить конфигурации

В консоли выполнить команду:
kubectl delete -o yaml configmaps/<имя config map> > <путь к файлу>.yaml

Удалить все зависимые ресурсы из раздела «Установить необходимый перечень ресурсов»

В консоли выполнить команду:
kubectl delete -o yaml customresourcedefinitions/<имя custom resource definitions> > <путь к файлу>.yaml

Проверка работоспособности#

„Agent“#

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get po

Выбрать наименование Pod с наименованием «synapse-metrics-agent-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 8429:8429
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:8429/ready
Команда должна вывести строку «OK».
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).

Kafka „adapter“#

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get po

Выбрать наименование Pod с наименованием «synapse-metrics-agent-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 8080:8080
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:8080/healthz
Команда должна вывести строку «OK».
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).

Event exporter#

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get po

Выбрать наименование Pod с наименованием «synapse-metrics-event-exporter-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 9102:9102
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:9102/healthz
Команда не должна вывести ошибку.
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).

Select#

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get po

Выбрать наименование Pod с наименованием «synapse-metrics-select-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 8481:8481
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:8481/health
Команда должна вывести строку «OK».
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).

Insert#

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get po

Выбрать наименование Pod с наименованием «synapse-metrics-insert-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 8480:8480
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:8480/health
Команда должна вывести строку «OK».
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).

„Storage“#

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get po

Выбрать наименование Pod с наименованием «synapse-metrics-storage-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 8482:8482
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:8482/health
Команда должна вывести строку «OK».
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).

Alert#

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get po

Выбрать наименование Pod с наименованием «synapse-metrics-alert-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 8880:8880
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:8880/health
Команда должна вывести строку «OK».
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).

Проверка работоспособности всех интеграций производится на стороне приложений, с которыми приложения GATM взаимодействуют, подробнее описание можно найти в документации таких приложений (Kafka, IGEG, SVPX, KFGT, DropAPP, Vault, POLM).

При установке GATM посредством компонентов SMDL, SYOP фактом, подтверждающим работоспособность данных компонентов, будет являться успешная установка всех необходимых пользователю приложений в рамках GATM.

Alert Manager#

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get po

Выбрать наименование Pod с наименованием «synapse-metrics-alertmanager-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 9093:9093
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:9093/-/healthy
Команда должна вывести строку «OK».
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).

Sender#

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get po

Выбрать наименование Pod с наименованием «synapse-sender-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 8439:8439
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:8439/health/healthz
Команда должна вывести строку «OK».
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).

Откат#

Обратная совместимость поддерживается со всеми прошлыми версиями компонента GATM.

Остановить компонент#

  • Через CLI Kubectl

Шаг

Действия

Описание

Остановка приложения

В консоли выполнить команду
kubectl scale --replicas=0 statefulset/<имя>

Удалить артефакты действующей версии#

  • Через CLI Kubectl

Шаг

Действия

Описание

Сохранение Statefulset

В консоли выполнить команду:
kubectl get -o yaml statefulset/<имя> > <путь к файлу>.yaml

Сохранение конфигурации

В консоли выполнить команду:
kubectl get -o yaml configmaps/<имя config map> > <путь к файлу>.yaml

Удаление Statefulset

В консоли выполнить команду:
kubectl delete statefulset <имя>

Удаление конфигурации

В консоли выполнить команду:
kubectl delete configmap <имя config map>

При необходимости изменить конфигурацию

Загрузить сохраненные артефакты#

  • Через CLI Kubectl

Шаг

Действия

Описание

Загрузить конфигурации в рамках компонента

В консоли выполнить команду:
kubectl apply -f ${FILE_NAME}.yml

Переменная $FILE_NAME в рамках добавления необходимых конфигураций компонента («kind: Statefulset»/«kind: ConfigMap»)

Запустить восстановленную версию компонента#

  • Через CLI Kubectl

Шаг

Действия

Описание

Запустить восстановленную версию компонента

В консоли выполнить команду
kubectl scale --replicas=${N} statefulset/<имя>

$N — необходимое количество «kind: Pod», рекомендованное значение 2

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

Проблема

Причина

Решение

Ошибка при подключении к проекту

Пользователю не предоставлен доступ в проект
Нет физического доступа к кластеру

Запросить доступ к проекту у администратора кластера

Ошибка при загрузке артефактов

У пользователя, под которым производится загрузка отсутствуют необходимые права

Запросить доступ к проекту у администратора кластера

Ошибка при Pull docker-образа из репозитория

Отсутствуют права на Pull образа из репозитория
Недоступен репозиторий
Неверная ссылка на image в Deployment

Запросить права у администратора registry.
Проверить ссылку, при необходимости скорректировать Deployment

Ошибки при взаимодействии сервисов insert/select с „storage“

Проблемы актуализации IP адресов „storage“ для взаимодействия

Пересоздать kind: Service у приложений „storage“

Чек-лист валидации установки#

  1. Успешно установлен компонент GATM.

  2. Реализована и подключена scrape конфигурация «kind: ConfigMap».

  3. Отсутствует внешние адреса к доступу в „storage“.

  4. В рамках кластера реализован Vault.

Проверка

Действия

Результат

Все артефакты загружены в проект

По списку артефактов найти их в «namespace Kubernetes»

Все Pod шлюза запущены

Найти StatefulSet, перейти на вкладку «Pods», проверить, что статус всех подов — Running

Интеграция с Kafka проведена успешно

В log Kafka „Adapter“ 2XX коды об отправке событий в Kafka

Отсутствие ошибок в логах контейнеров

Для каждого Pod проверить на вкладке „Logs“, что в логе контейнеров Pod отсутствуют ошибки

Проверка корректности реализации интеграции с внешними приложениями

Для каждой интеграции проверить корректность интеграции согласно документации приложения, с которым производилась данная интеграция

Интеграция корректна