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

Для отслеживания состояния компонентов 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-taskman
                    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, в параметрах TASKMAN_HEALTH_CHECK_PORT (по умолчанию используется 8100), 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 экземпляры компонента «Универсальный диспетчер» могут быть установлены на нескольких узлах. Доступ к узлам организуется через балансировщик нагрузки, но для механизма проверок состояния нужно обращаться к каждому узлу напрямую. 

Компонент изначально задействован для работы по протоколу 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 экземпляры компонента «Менеджер рабочих мест» могут быть установлены на нескольких узлах, но активен должен быть только один из них. Все остальные компоненты являются резервными и, по умолчанию, находятся в состоянии «Passive».

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

  • для непосредственно компонента «Менеджер рабочих мест», а именно службы termidesk-taskman TASKMAN_HEALTH_CHECK_IPTASKMAN_HEALTH_CHECK_PORTHEALTH_CHECK_CERTHEALTH_CHECK_KEY. Для параметров HEALTH_CHECK_CERTHEALTH_CHECK_KEY нужно  указать путь к сертификату и ключу, используемых для защищенного подключения, и выполнить перезапуск служб Termidesk;
  • для непосредственно компонента «Менеджер рабочих мест (очереди)», а именно службы 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.

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

TASKMAN_HEALTH_CHECK_PORT=8100
TASKMAN_HEALTH_CHECK_IP='0.0.0.0'
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

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

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