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

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

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

Определение

JMX

Java Management Extensions — технология Java, предназначенная для контроля и управления приложениями, системными объектами, устройствами и компьютерными сетями

HTTP

HyperText Transfer Protocol — протокол передачи гипертекста

HTTPS

Secure HyperText Transfer Protocol — протокол передачи гипертекста c использованием TLS (криптографического протокола, обеспечивающего защищенную передачу данных в компьютерной сети)

TLS

Transport Layer Security — протокол защиты транспортного уровня

S3

Облачное хранилище данных

Pod

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

Общие положения при администрировании компонента#

  1. Администрирование приложения происходит в Kubernetes-кластере.

  2. Администратор должен следить за истечением срока годности сертификатов и своевременно обновлять их.

  3. Для развертывания компонента File Storage Gateway в Kubernetes администратору необходимы права на чтение и запись всех используемых шаблонов, а также возможность читать логи pods.

  4. Сетевая безопасность обеспечивается средствами Istio (SSM), и возлагается на администраторов АС, использующих компонент File Storage Gateway.

Сценарии администрирования#

Ролевая модель для сценариев администрирования не предусмотрена.

Администратор осуществляет:

  • конфигурирование Ingress/Egress;

  • настройку мониторинга и просмотр метрик мониторинга;

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

  • отслеживание срока годности сертификатов и их обновление;

  • обеспечение сетевой безопасности при использовании компонента;

  • отслеживание работоспособности pods.

Конфигурирование#

Конфигурирование Ingress#

Сконфигурируйте Ingress, согласно приведенным шаблонам:

Назначение конфигурации

Шаблон конфигурации

Примечание

Настраивает перенаправление траффик с балансировщика кластера в namespace проекта

route.yml

Балансировка и маршрутизация входящего трафика

ingress-proxy-svc.yml

Определяет виртуальные порты

ingress-gateway.yml

caCertificates – цепочка корневых сертификатов.
PrivateKey – приватный ключ, выпускается в центре сертификации.
serverCertificate – публичный сертификат для обеспечения входящего mTLS-соединения, выпускается в центре сертификации, должен быть подписан удостоверяющим центром вашей сети

Описание правил маршрутизации с Ingress Proxy на целевые сервисы

target-service-vs.yml

Описание сервиса

target-service-svc.yml

Конфигурирование Egress#

Сконфигурируйте Egress, согласно приведенным шаблонам:

Назначение конфигурации

Шаблон конфигурации

Примечание

Описание виртуальных портов для исходящего трафика

egress-gateway.yml

Описание сервиса для исходящего трафика

egress-proxy-svc.yml

Конфигурирование DestinationRule, ServiceEntry, VirtualService для доступа в S3-хранилище, для каждого кластера.

Назначение конфигурации

Шаблон конфигурации

Примечание

Описывает правила маршрутизации из pod на Egress сервис

s3-vs.yml

Описывает внешние подключения

s3-se.yml

Определяет политики, применяемые к трафике, предназначаемому VirtualService

s3-dsr.yml

Конфигурирование DestinationRule, ServiceEntry, VirtualService для брокера Kafka аудита. Данный набор артефактов необходим для каждого брокера Kafka.

Назначение конфигурации

Шаблон конфигурации

Примечание

Описывает правила маршрутизации из pod на Egress сервис

kafka-broker-vs.yml

Описывает внешние подключения

kafka-broker-se.yml

Определяет политики, применяемые к трафике, предназначаемому VirtualService

kafka-broker-dsr.yml

Работа с мониторингом внутри компонента#

Включение метрик не требуется, по умолчанию доступны все.

Чтобы увидеть список всех доступных метрик во время работы компонента, выполните GET-запрос по пути:

/actuator/prometheus

Для получения информации конкретной метрики выполните GET-запрос:

GET /actuator/metrics/<название метрики>

Пример:
GET /actuator/metrics/FSGW_OBJECT_CONTENT_DECRYPTION

Ответом на GET запрос будет событие следующего формата:

{
    "name": "FSGW_OBJECT_CONTENT_DECRYPTION",
    "description": "Общее количество дешифрованных объектов",
    "baseUnit": null,
    "measurements": [
        {
            "statistic": "COUNT",
            "value": 0.0
        }
    ],
    "availableTags": []
}

Работа с журналированием внутри компонента#

Параметры журналирования можно разделить на три типа: общие параметры, параметры локального журнала, параметры журналирования для отправки в Platform V Monitor (LOGA)

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

platform.utils:
  logging:
    startup-parameters:
        level:
          root: INFO # DEBUG / INFO / WARN / ERROR
          name: # указать java пакеты, либо оставить пусто

Для включения локального журнала

platform.utils:
  logging:
    startup-parameters:
      local:
        enabled: true # false

Параметры журналирования для отправки в Platform V Monitor (LOGA)

platform.utils:
  logging:
    startup-parameters:
      remote:
        level:
          root: INFO
          name:
        appender:
          kafka:
            enabled: true
            connection:
              topic: FSGW.LOGGER #имя топика, согласуется с Platform V Monitor (LOGA)
              producer:
                "[bootstrap.servers]": localhost:9094 #адрес сервера Platform V Monitor (LOGA)

Обновление сертификатов#

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

Алгоритм работы с сертификатами безопасности:

  1. Получить новые сертификаты.

  2. Добавить в секреты Kubernetes или Vault KV Engine совместимом хранилище.

  3. Перезапустить POD.

Алгоритм работы с ключами доступа:

  1. Получить ключи доступа к S3 хранилищу.

  2. Добавить в секреты Kubernetes или Vault KV Engine совместимом хранилище.

  3. Перезапустить POD.

События системного журнала#

Просмотреть события журналирования можно как в логах Pod в интерфейсе Kubernetes, так и отправив GET-запрос по адресу /actuator/loggers.

Возможны следующие уровни журналирования:

  • Trace — в проекте не используются;

  • Debug — отладочная информация (получение запроса на отправку файлов, журналирование заполнения буферов и т. д.) - не рекомендован для использования в ПРОМ;

  • Info — информационные сообщения;

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

  • Error — ошибки (необходимо следить за ними и реагировать).

Сопоставление уровней журналирования и событий относящимся к ним:

Уровень

Событие

Описание

Error

Неизвестная ошибка исполнения репликации

Ошибка в процессе асинхронной репликации данных

Error

Событие аудита не удалось отправить: '{}'

Ошибка в процессе отправки событий аудита

Error

"Объект {} поврежден, найдены не все части, ReplicationInfo: {}"

Ошибка в процессе завершения мультипарт загрузки с использованием шифрования и подписи

Error

"Возникла необработанная корректным образом ошибка."

Ошибка в процессе обработки HTTP запроса

Warn

"%s завершение обработки входящего запроса: S3 action - '%s', replica set - '%s'"

Не успешное завершение обработки S3 запроса

Warn

"Указанная минорная версия конфигурации '{}' превышает максимально поддерживаемую данным дистрибутивом продукта '{}'.\n Часть указанных настроек конфигурационного файла могут быть проигнорированы."

Предупреждение о конфигурации приложения при старте

Warn

"Неуспешное завершение шифрования: S3 action - '{}', replica set - '{}', bucket - '{}', object key - '{}'."

Проблемы в процессе шифрования

Warn

"Неуспешное завершение расчета digest: hash algorithm - '{}', S3 action - '{}', replica set - '{}', bucket - '{}', object key - '{}'."

Проблемы в процессе расчета подписи

Warn

"Неуспешное завершение наложения ЭЦП: signature suite - '{}', S3 action - '{}', replica set - '{}', bucket - '{}', object key - '{}'."

Проблемы в процессе наложения ЭП

Warn

"Неуспешное завершение дешифрования: S3 action - '{}', cluster - '{}', bucket - '{}', object key - '{}'."

Проблемы в процессе дешифрования

Warn

"Неуспешное завершение проверки ЭЦП: S3 action - '{}', cluster - '{}', bucket - '{}', object key - '{}'."

Проблемы в процессе проверки подписи

Info

"Событие аудита успешно отправлено: '{}'."

Отправка события аудита

Info

"Начало обработки входящего запроса: S3 action - '%s', replica set - '%s'"

Событие начала обработки S3 запроса

Info

"Отправка ответа на входящий запрос: status - '{}'.", httpResponse.getStatusCode()

Событие завершения обработки S3 запроса

Info

"Успешное завершение шифрования: S3 action - '{}', replica set - '{}', bucket - '{}', object key - '{}'."

Успех в процессе шифрования

Info

"Успешное завершение расчета digest: hash algorithm - '{}', S3 action - '{}', replica set - '{}', bucket - '{}', object key - '{}'."

Успех в процессе расчета подписи

Info

"Успешное завершение наложения ЭЦП: signature suite - '{}', S3 action - '{}', replica set - '{}', bucket - '{}', object key - '{}'."

Успех в процессе наложения ЭП

Info

"Успешное завершение дешифрования: S3 action - '{}', cluster - '{}', bucket - '{}', object key - '{}'."

Успех в процессе дешифрования

Info

"Успешное завершение проверки ЭЦП: S3 action - '{}', cluster - '{}', bucket - '{}', object key - '{}'."

Успех в процессе проверки подписи

Info

"Версия файла конфигурации не была указана явно, поэтому будет интерпретирована как '{}'."

Предупреждение о пропуске секции версии конфига в файле конфигурации приложения

Info

"Получена задача на репликацию из kafka: {}"

Событие чтения задачи на асинхронную репликацию

Info

"Запущена задача репликации: {}"

Начало исполнения задачи асинхронной репликации

Info

"Задача {}\nна репликацию завершена со статусом {} для кластера: {}"

Окончание исполнения задачи асинхронной репликации

Debug

"Попытки отложенной записи файла '{}' в bucket '{}' кластера файлового хранилища '{}' выполняться не будут, в связи с отключенным механизмом асинхронной репликации данных в рамках данного bucket."

Планирование задачи при неудачных размещения файла в S3 сверх min-success-factor

Debug

"При предоставлении s3 async client был проигнорирован tenant '{}'."

Предупреждение об отсутствии тенанта при конфигурировании S3

Debug

"Успешная аутентификация использую Kubernetes аутентификацию"

Сообщения аутентификации через SA K8s или OpenShift

Debug

"StorageChecker::check"

Помимо ведения журнала в Platform V Monitor (LOGA) журнал может вестись локально, подробнее в руководстве по установке

События мониторинга#

Метрики в формате Prometheus#

FSGW не отправляет метрики мониторинга самостоятельно, сбор происходит по модели PULL

Platform V Monitor компонент MONA может осуществлять сбор метрик по пути /actuator/prometheus в формате Prometheus.

Метрики для мониторинга событий#

Кроме стандартных метрик, предоставляемых Spring Boot Actuator, приложение предоставляет метрики для мониторинга событий, полный список которых приведен в таблице ниже.

Название метрики

Теги

Описание

FSGW_INBOUND_S3_ACTION_REQUEST

action, bucket, replica-set

Входящий S3 action запрос

FSGW_INBOUND_S3_ACTION_RESPONSE

action, bucket, replica-set, success

Ответ на входящий S3 action запрос

FSGW_INBOUND_REPLICATION_TASK

action, bucket, replica-set

Суммарное количество входящих задач репликации

FSGW_INBOUND_REPLICATION_TASK_SUCCESS

action, bucket, replica-set, state

Успешно выполненные задачи репликации

FSGW_INBOUND_REPLICATION_TASK_FAILED

action, bucket, replica-set, state

Не выполненные задачи репликации

FSGW_OUTBOUND_S3_ACTION_REQUEST

action, bucket, cluster, user

Исходящий S3 action запрос

FSGW_OUTBOUND_S3_ACTION_RESPONSE

action, bucket, cluster, user

Ответ на исходящий S3 action запрос

FSGW_OBJECT_CONTENT_ENCRYPTION

action, bucket, replica-set, success

Шифрование содержимого объекта

FSGW_OBJECT_CONTENT_DECRYPTION

action, bucket, replica-set, success

Дешифрование содержимого объекта

FSGW_OBJECT_CONTENT_SIGNING

action, bucket, replica-set, success

Наложение ЭП на содержимое объекта

FSGW_OBJECT_CONTENT_VERIFYING

action, bucket, replica-set, success

Проверка ЭП содержимого объекта

FSGW_OBJECT_CONTENT_HASHING

action, bucket, replica-set, success

Расчет digest по содержимому объекта

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

Проблема

Последствия

Решение

Истекли сертификаты безопасности

Передача файлов невозможна

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

Не регистрируются события мониторинга

Нет возможности увидеть историю событий мониторинга

Проверить корректность в разделе application.yaml
#изменен ли порт прослушивания запросов
spring.server.port
#Не изменен ли путь доступа к метрикам
management.endpoints.web.path-mapping.*

Неправильно сконфигурированы настройки Ingress/Egress

Проблемы с доступом до FSGW или до компонентов развертывания (S3, и т.д.)

Проверить правильность конфигурации на соответствие рекомендациям данным в разделе Конфигурирование данного руководства

Не стартуют Pods

Передача файлов невозможна

Общий алгоритм действий при данном виде проблем:
1. Нужно посмотреть Events в Kubernetes. Чаще всего тут написана ошибка, почему Pods не стартуют или завершают работу с ошибкой.
2. Также можно посмотреть в Вашем Deployments ошибки в блоке Conditions.
3. На Overview можно посмотреть какие pods рестартовались.
4. Зайдя внутрь pod, можно посмотреть логи pods всех контейнеров, в том числе и envoy.
5. Если настраивали логирование в систему Журналирование (LOGA), то можно посмотреть в Grafana по Id свой сервис и код ошибки.
6. В jaeger/координаторе можно посмотреть traces и также найти звено в цепи, где произошла ошибка. Адрес уникальный для каждой контрольной панели. Узнать название вашей control plane можно посмотрев в NetworkPolicy (Networking — NetworkPolicy).
7. Посмотреть в pod ingress/egress gateway также блок Logs на предмет ошибок.
8. Попросить больше прав для анализа проблемы: Повышение привилегий администратора АС в проекте Kubernetes.
9. Проверить еще раз все залитые артефакты OS, в частности смотреть имена, порты и как между собой объекты связаны.
10. Написать сопровождению Synapse на предмет ошибок на Control Plane