Руководство по установке#
В руководстве приведены инструкции по установке компонента «Сбор и анализ метрик» (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 или |
Операционная система |
Да |
Docker CE 19.03.14 и выше |
Средство контейнеризации |
Да |
Platform V DropApp (K8S) 1.3 и выше (K8S Core (K8SC)) или |
Среда контейнеризации |
Да |
Nexus-Public 3.42.0 |
Сервис централизованного хранения репозиториев артефактов (хранилище артефактов) |
Да |
GitLab Community Edition 15.7 и выше |
Сервис централизованного хранения репозиториев исходного кода |
Нет |
Istio 1.6 и выше или |
Сервис интеграции и оркестрации микросервисов в облаке |
Нет |
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 должны быть выполнены следующие условия:
Развернут и настроен кластер «Kubernetes» версии 1.19 или выше в соответствии с требованиями, предъявляемыми к Платформе.
В кластере создан проект (namespace), в котором установлена контрольная панель.
В проекте создана учетная запись с правами на get, list, watch ресурсов Pod и Namespace, при опциональной установке компонента event exporter необходимо также реализовать ролевую модель на get, list, watch к ресурсу «kind: Event».
В проекте имеются свободные ресурсы по limits и requests не менее, чем зарезервировано в конфигурационных артефактах.
В проект добавлен секрет для загрузки Docker-образов из целевого Docker-репозитория.
В кластере создан проект (namespace), или используется ранее реализованный пользовательский проект, где будут реализованы компонент GATM, так же необходимо будет подключить указанный проект к контрольной панели.
В рамках реализованного кластера созданы необходимые роли («kind: ClusterRole») и привязки к роли в рамках проекта («kind: RoleBinding»), в рамках ролевой модели компонента GATM.
Для установки через консоль на рабочем месте должен быть установлен клиент 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 |
Выполните команду, находясь в корне распакованного архива: |
$Registry — это host Docker реестра. Необходимо ввести логин с паролем для авторизации |
Соберите Docker образ для установки приложения |
Выполните команду, находясь в корне распакованного архива: |
$registry_tag — полный путь, где будет реализован образ, $version — версия образа. Пример заполнения двух параметров «registry/dev/gatm-agent:0.0.1» |
Загрузите полученный Docker образ в Registry |
Выполните команду, находясь в корне распакованного архива: |
– |
Сохраните полученный sha256 образа |
При выполнении шага «Загрузите полученный Docker образ в Registry» в терминале будет информация о sha256 загруженного образа, пример вывода терминала |
Сохраните указанное значение в переменную $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 }}"
}
]
}
],
Запустить инструмент автоматической сборки - компонент SMDL, «ClientUnpacker» (более подробно о настройке и запуске можно ознакомиться в документации компонента «SMDL», «Руководство оператора»), результатом исполнения будут собранные артефакты для установки приложения (на email сотрудника, который запустил job, придет таблица со ссылками на артефакты).
Провести проверку корректной подстановки образов по шаблону, указанному в шаге 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» с правами администратора. Заведите переменную |
– |
Перейти в «namespace», где будет реализован компонент GATM |
Введите команду: |
– |
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 в рамках проекта где планируется производиться сбор системных метрик, по данным настройкам также необходимо обратиться к вашему администратору кластера.
Установка#
Предусловия#
Первоначально необходимо определиться со схемой развертывания компонента:
Определить набор компонент, необходимый для установки;
Определить необходимость установки серверной части в рамках трассировок и логов;
Выбрать сервер для хранения метрик (Kafka, серверная часть GATM, внешний сервер формата Prometheus);
Определить точку сборка метрик (централизованный сбор метрик с ServiceMesh, установка в пользовательский namespace).
Рассмотрим схемы по установке.
Метрики.
Схема. Схема развертывания сбора метрик из пользовательского namespace. Данная схема является концептуальной для визуализации установки
Схема. Схема развертывания установки в рамках Kubernetes (с установкой event exporter). Данная схема является концептуальной для визуализации установки
Схема. Схема развертывания сбора метрик из контрольной панели RHSM. Данная схема является концептуальной для визуализации установки
Схема. Схема развертывания сбора метрик из контрольной панели. Данная схема является концептуальной для визуализации установки
Используется аналогичная схема при реализации сбора метрик с namespace «istio-operator», для успешного сбора необходимо реализовать сетевую доступность из проекта GATM к проекту «istio-operator», также убедиться что при установке «istio-operator» был реализован command «- „–monitoring-port=15014“» в рамках «kind: Deployment».
Трассировки и логи.

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

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

Схема. Схема развертывания сбора логов (проект synapse-metrics-system). Данная схема является концептуальной для визуализации установки
Реализация интеграционного журнала, при использовании конфигураций развертывания «ext-gatm-sender» и «ext-gatm-sender-job».

Схема. Интеграционный журнал с функцией переотправки сообщений
Серверные части по метрикам, трассировкам и логам могут быть установлены в рамках одного проекта и опционально настроено входящее взаимодействие через Ingressgateway.
При использовании средства визуализации VISL необходимо учесть серверные части GATM при установке, более подробно описано в рамках документации компонента VISL, документ «Руководство по установке», раздел «Установка».
При использовании приложения TRAS как источник трассировок, необходимо указать адрес серверной части GATM по сбору трассировок, при установке компонента TRAS, более подробно описано в рамках документации компонента TRAS, документ «Руководство по установке», раздел «Состав дистрибутива» (Пример и описание параметров файла values).
Установка приложения „Agent“ (logs) производится пользователем.
Использование сертификатов с приложением «vault»#
Использование KV (key value) хранилища для сертификатов
Необходимо предварительно реализовать ряд работ по настройке интеграционных взаимодействий vault:
Реализовать хранилище секретов (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)
Пример реализации секретов в системе vault.
Обращаем внимание, что используется «version: 1», в рамках создания хранилища секретов (kv).
Пример секрета для интеграции с 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

Рисунок. Пример расположения стендозависимого файла с параметрами
Далее заполняем файл «values.yaml» по примерам, которые указаны в рамках указанного документа в разделе «Примеры стендозависимых параметров для установки», также для более детальной установки можно ознакомиться с разделом «Описание всех стендозависимых параметров».
Запустить job, компонента SMDL, «SynapseInstaller» (более подробно о настройке и запуске можно ознакомиться в документации компонента «SMDL», «Руководство оператора» раздел «SynapseInstaller»).
Ручная установка сервиса#
Необходимо убедиться, что в рамках персонального компьютера установлен Helm версии не ниже 3.0.
Для ручной установки сервиса выполните следующие действия (пример в рамках использования чарта «gatm»):
Загрузить артефакт компонента GATM с конфигурациями для установки (gatm-cfg-*) в рамках дистрибутива продукта
При необходимости провести корректировку конфигураций, располагаемых в каталоге «./package/conf/helm/application/gatm/templates/*» (например, провести подстановку image приложений, либо задать свои правила по сбору метрик)
Перейти в рамках терминала в каталог «./package/conf/helm/application/»
Провести авторизацию через терминал в кластер, где планируется установка компонента GATM (пример для Openshift «oc login –token=$ТОКЕН –server=$АДРЕС_КЛАСТЕРА»)
Пройти в namespace, где планируется установка компонента GATM (пример для Openshift «oc project synapse-metrics»)
Создать файл с произвольным наименованием, например «values-cluster.yaml» в рамках пути «./package/conf/helm/application/gatm/»
Провести заполнение файла «./package/conf/helm/application/gatm/values-cluster.yaml» (описание параметров описано в указанном документе, раздел «Примеры стендозависимых параметров для установки», также для более детальной установки можно ознакомиться с разделом «Описание всех стендозависимых параметров»)
Провести установку компонента GATM - «helm install gatm gatm/ –values gatm/values-cluster.yaml»; При необходимости удалить компонент GATM - «helm delete gatm».
Примеры стендозависимых параметров для установки#
Примеры в рамках использования чарта «gatm».
В данном разделе будет представлен минимальный набор стендозависимых параметров для установки GATM.
Вариант установки приложений „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.
Вариант развертывания приложений „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.
Вариант развертывания приложений „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, также организован сбор системных метрик из указанного проекта в параметрах.
Вариант развертывания приложений „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, организован сбор системных метрик из указанного проекта в параметрах и сбор метрик с контрольной панели.
Агрегация метрик производиться в рамках системных метрик.
Вариант развертывания приложения
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
Рассмотрим опциональные параметры по организации проекта 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 и исключить дублирование при сборе метрик.

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

Схема. Реализация тенантирования при установке 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». Завести переменную |
– |
Перейти в нужный «Namespace» |
Ввести команду: |
– |
Остановить компонент#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Остановка компонента |
В консоли выполните команду |
– |
Удалить артефакты действующей версии#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Сохранение Statefulset |
В консоли выполнить команду: |
– |
Сохранение конфигурации |
В консоли выполнить команду: |
– |
Удаление Statefulset |
В консоли выполнить команду: |
– |
Удаление конфигурации |
В консоли выполнить команду: |
При необходимости изменить конфигурацию |
Загрузить новую версию#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Загрузка конфигурации |
В консоли выполнить команду: |
С новыми конфигурационными файлами |
Загрузка Statefulset |
В консоли выполнить команду: |
С новой версией «kind: Statefulset» |
Через Helm
Шаг |
Действия |
Описание |
|---|---|---|
Отредактировать стендозависимые параметры |
В ранее установленном чарте GATM открыть файл «values.yaml», отредактировать его значения |
– |
Запустить команду обновления |
В командной строке ввести команду: |
– |
Запустить новую версию компонента#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Запустить новую версию компонента |
В консоли выполнить команду |
$N — необходимое количество «kind: Pod», рекомендованное значение 2 |
Удаление#
Подключиться к проекту#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Выполнить вход в Kubernetes |
Загрузить «kubeConfig» от вашего «ServiceAccount». Завести переменную |
– |
Перейти в нужный «Namespace» |
Ввести команду: |
– |
Остановить компонент#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Остановка приложения |
В консоли выполнить команду |
– |
Удалить артефакты действующей версии#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Удалить Statefulset |
В консоли выполнить команду: |
– |
Удалить конфигурации |
В консоли выполнить команду: |
– |
Удалить все зависимые ресурсы из раздела «Установить необходимый перечень ресурсов» |
В консоли выполнить команду: |
– |
Проверка работоспособности#
„Agent“#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполнить команду |
Выбрать наименование Pod с наименованием «synapse-metrics-agent-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполнить команду: |
— |
Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).
Kafka „adapter“#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполнить команду |
Выбрать наименование Pod с наименованием «synapse-metrics-agent-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполнить команду: |
— |
Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).
Event exporter#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполнить команду |
Выбрать наименование Pod с наименованием «synapse-metrics-event-exporter-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполнить команду: |
— |
Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).
Select#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполнить команду |
Выбрать наименование Pod с наименованием «synapse-metrics-select-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполнить команду: |
— |
Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).
Insert#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполнить команду |
Выбрать наименование Pod с наименованием «synapse-metrics-insert-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполнить команду: |
— |
Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).
„Storage“#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполнить команду |
Выбрать наименование Pod с наименованием «synapse-metrics-storage-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполнить команду: |
— |
Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).
Alert#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполнить команду |
Выбрать наименование Pod с наименованием «synapse-metrics-alert-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполнить команду: |
— |
Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).
Проверка работоспособности всех интеграций производится на стороне приложений, с которыми приложения GATM взаимодействуют, подробнее описание можно найти в документации таких приложений (Kafka, IGEG, SVPX, KFGT, DropAPP, Vault, POLM).
При установке GATM посредством компонентов SMDL, SYOP фактом, подтверждающим работоспособность данных компонентов, будет являться успешная установка всех необходимых пользователю приложений в рамках GATM.
Alert Manager#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполнить команду |
Выбрать наименование Pod с наименованием «synapse-metrics-alertmanager-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполнить команду: |
— |
Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).
Sender#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполнить команду |
Выбрать наименование Pod с наименованием «synapse-sender-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполнить команду: |
— |
Также проверить отсутствие ошибок в рамках логов приложения (документ «Руководство по системному администрированию», раздел «Выгрузка системных логов»).
Откат#
Обратная совместимость поддерживается со всеми прошлыми версиями компонента GATM.
Остановить компонент#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Остановка приложения |
В консоли выполнить команду |
– |
Удалить артефакты действующей версии#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Сохранение Statefulset |
В консоли выполнить команду: |
– |
Сохранение конфигурации |
В консоли выполнить команду: |
– |
Удаление Statefulset |
В консоли выполнить команду: |
– |
Удаление конфигурации |
В консоли выполнить команду: |
При необходимости изменить конфигурацию |
Загрузить сохраненные артефакты#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Загрузить конфигурации в рамках компонента |
В консоли выполнить команду: |
Переменная $FILE_NAME в рамках добавления необходимых конфигураций компонента («kind: Statefulset»/«kind: ConfigMap») |
Запустить восстановленную версию компонента#
Через CLI Kubectl
Шаг |
Действия |
Описание |
|---|---|---|
Запустить восстановленную версию компонента |
В консоли выполнить команду |
$N — необходимое количество «kind: Pod», рекомендованное значение 2 |
Часто встречающиеся проблемы и пути их устранения#
Проблема |
Причина |
Решение |
|---|---|---|
Ошибка при подключении к проекту |
Пользователю не предоставлен доступ в проект |
Запросить доступ к проекту у администратора кластера |
Ошибка при загрузке артефактов |
У пользователя, под которым производится загрузка отсутствуют необходимые права |
Запросить доступ к проекту у администратора кластера |
Ошибка при Pull docker-образа из репозитория |
Отсутствуют права на Pull образа из репозитория |
Запросить права у администратора registry. |
Ошибки при взаимодействии сервисов insert/select с „storage“ |
Проблемы актуализации IP адресов „storage“ для взаимодействия |
Пересоздать kind: Service у приложений „storage“ |
Чек-лист валидации установки#
Успешно установлен компонент GATM.
Реализована и подключена scrape конфигурация «kind: ConfigMap».
Отсутствует внешние адреса к доступу в „storage“.
В рамках кластера реализован Vault.
Проверка |
Действия |
Результат |
|---|---|---|
Все артефакты загружены в проект |
По списку артефактов найти их в «namespace Kubernetes» |
– |
Все Pod шлюза запущены |
Найти StatefulSet, перейти на вкладку «Pods», проверить, что статус всех подов — Running |
– |
Интеграция с Kafka проведена успешно |
В log Kafka „Adapter“ 2XX коды об отправке событий в Kafka |
– |
Отсутствие ошибок в логах контейнеров |
Для каждого Pod проверить на вкладке „Logs“, что в логе контейнеров Pod отсутствуют ошибки |
– |
Проверка корректности реализации интеграции с внешними приложениями |
Для каждой интеграции проверить корректность интеграции согласно документации приложения, с которым производилась данная интеграция |
Интеграция корректна |