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

Для отслеживания состояния компонентов Termidesk и обращения к ним для выполнения проверок состояния (health check) используется API-запрос /api/health.

Начальная спецификация схемы HealthCheck API в формате OpenAPI соответствует описанию:

openapi: 3.0.3
info:
  title: Termidesk health check api schema
  version: 0.1
paths:
  /api/health:
    get:
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum: [pass, warn, fail]
                    example: fail
                    description: "Состояние компонента"
                  version:
                    type: string
                    example: 3.3
                    description: "Версия компонента"
                  description:
                    type: string
                    example: termidesk-celery
                    description: "Описание компонента"
                  output:
                    type: string
                    example: "django.db.utils.OperationalError: FATAL:  password authentication failed for user 'termidesk'"
                    description: "Описание ошибки (если есть)"
                required:
                  - status
        '401':
          description: Authorization information is missing or invalid
BASH

Базовый URL для API: /api/health.
Тип контента: application/json.

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

Для компонента «Универсальный диспетчер» порт определен настройками веб-сервера (по умолчанию используется 443).

  • для компонента «Менеджер рабочих мест» - в файле /etc/opt/termidesk-vdi/termidesk.conf, в параметрах CELERY_BEAT_HEALTH_CHECK_PORT (по умолчанию используется 8103), CELERY_WORKER_HEALTH_CHECK_PORT (по умолчанию используется 8104);
  • для компонента «Шлюз» -  в файле /etc/termidesk/gateway.yaml, в параметре ${mgtServerPort:8102} (по умолчанию используется 8102).

Для исключения злоупотреблением частыми вызовами API, способными создать нагрузку на систему, доступ к API-запросу контролируется отдельным токеном. Значение токена задается конфигурационным файлом:

  • для компонентов «Универсальный диспетчер», «Менеджер рабочих мест» - в файле /etc/opt/termidesk-vdi/termidesk.conf, в параметре HEALTH_CHECK_ACCESS_KEY;
  • для компонента «Шлюз» -  в файле /etc/termidesk/gateway.yaml, в параметре token: ${healthCheckAccessKey}.

Пример HEALTH_CHECK_ACCESS_KEY:  

HEALTH_CHECK_ACCESS_KEY = "9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b"
BASH

Пример token: ${healthCheckAccessKey}:  

${healthCheckAccessKey:9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b}
BASH

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

  • компонент Termidesk помещает информацию о себе в очередь брокера сообщений RabbitMQ;
  • служба termidesk-celery-beat (реализована в компоненте «Менеджер рабочих мест») с периодичностью в 60 секунд забирает из очереди RabbitMQ список всех узлов компонентов Termidesk;
  • служба termidesk-celery-beat создает задачу на опрос состояния;
  • далее служба termidesk-celery-worker выполняет задачу на опрос состояния узлов. Полученные результаты служба termidesk-celery-worker записывает в БД.

Следующие порты должны быть доступны с узла «Менеджер рабочих мест»:

  • 8102 (опрос компонента «Шлюз»);
  • 8103 (опрос службы termidesk-celery-beat);
  • 8104 (опрос службы termidesk-celery-worker);
  • 443 (опрос компонента «Универсальный диспетчер», а именно - «Портала администратора» и «Портала пользователя»).

В случае если используются несколько узлов «Менеджера рабочих мест», опрос выполняет узел, первый забравший очередь из RabbitMQ. Опрос инициируется по времени:

  • служба termidesk-celery-beat в 60 секунд подключается к очереди RabbitMQ для получения списка узлов;
  • узлы, в свою очередь, раз в 60 секунд помещают информацию о себе в очередь RabbitMQ.

Состояние компонента «Универсальный диспетчер»

При распределенной установке Termidesk экземпляры компонента «Универсальный диспетчер» могут быть установлены на нескольких узлах. Доступ к узлам организуется через балансировщик нагрузки, но для механизма проверок состояния нужно обращаться к каждому узлу напрямую. 

Компонент изначально задействован для работы по протоколу HTTP, поэтому механизм проверки состояния реализуется отдельными вызовами REST API. 

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

curl --insecure -v -s -X 'GET' "https://${HOSTNAME}:443/api/health/check" -H 'accept: application/json' -H "Authorization: Token ${HEALTH_CHECK_ACCESS_KEY}"
BASH

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

Состояние компонента «Шлюз»

При распределенной установке Termidesk экземпляры компонента «Шлюз» могут быть установлены на нескольких узлах. Доступ к узлам организуется через балансировщик нагрузки, но для механизма проверок состояния нужно обращаться к каждому узлу напрямую. 

Для исключения злоупотреблением частыми вызовами API, способными создать нагрузку на систему, доступ к API-запросу компонента «Шлюз» termidesk-gateway контролируется отдельным токеном. Значение токена задается при запуске службы «Шлюза» в параметре token: ${healthCheckAccessKey}.

Пример команды проверки состояния компонента через утилиту  curl для компонента «Шлюз» termidesk-gateway (предполагается, что «Шлюз» настроен для работы по защищенному соединению):

curl --insecure -v -s -X 'GET' "https://${HOSTNAME}:8102/api/health" -H 'accept: application/json' -H "Authorization: Token ${healthCheckAccessKey}"
BASH

Состояние компонента «Менеджер рабочих мест»

При распределенной установке Termidesk экземпляры компонента «Менеджер рабочих мест» могут быть установлены на нескольких узлах.

Для использования механизма проверки состояния компонента необходимо в конфигурационном файле /etc/opt/termidesk-vdi/termidesk.conf раскомментировать строки параметров:

  • для непосредственно компонента «Менеджер рабочих мест», а именно службы termidesk-celery-beat: CELERY_BEAT_CHECK_IP, CELERY_BEAT_HEALTH_CHECK_PORTHEALTH_CHECK_CERT, HEALTH_CHECK_KEY. Для параметров HEALTH_CHECK_CERTHEALTH_CHECK_KEY нужно  указать путь к сертификату и ключу, используемых для защищенного подключения, и выполнить перезапуск служб Termidesk;
  • для непосредственно компонента «Менеджер рабочих мест», а именно службы termidesk-celery-worker: CELERY_WORKER_CHECK_IP, CELERY_WORKER_HEALTH_CHECK_PORTHEALTH_CHECK_CERTHEALTH_CHECK_KEY. Для параметров HEALTH_CHECK_CERTHEALTH_CHECK_KEY нужно  указать путь к сертификату и ключу, используемых для защищенного подключения, и выполнить перезапуск служб Termidesk.

Пример задания значений:

CELERY_BEAT_HEALTH_CHECK_PORT=8103
CELERY_BEAT_HEALTH_CHECK_IP='0.0.0.0'
CELERY_WORKER_HEALTH_CHECK_PORT=8104
CELERY_WORKER_HEALTH_CHECK_IP='0.0.0.0'
HEALTH_CHECK_CERT=/etc/opt/termidesk-vdi/healthcheck.pem
HEALTH_CHECK_KEY=/etc/opt/termidesk-vdi/healthcheck-decrypted.key
BASH

Пример команды проверки состояния компонента «Менеджер рабочих мест» через утилиту curl (предполагается, что «Менеджер рабочих мест» настроен для работы по защищенному соединению):

curl --insecure -v -s -X 'GET' "${HOSTNAME}:8103/api/health/check" -H 'accept: application/json' -H "Authorization: Token ${HEALTH_CHECK_ACCESS_KEY}"
BASH