Мониторинг состояния

Мониторинг состояния

Начиная с версий Itgrix bx 3.6.0 и Itgrix amo 2.9.0, в API модуля интеграции добавляется метод проверки статуса приложения <Asterisk IP>:8077/status. Периодическая проверка ответа на этот запрос может быть использована для отслеживания состояния приложения и автоматической реакции на проблемы.

Примеры запросов

Ниже приводятся запросы отдельных элементов статусов с пояснениями их предполагаемого использования. Элементы извлекаются из ответа при помощи утилиты jq - процессора json-данных, доступного для установки на совместимых с Itgrix системах.

Полные данные о состоянии можно получить запросом:

curl -s --digest -u <login>:<password> "<Asterisk IP>:8077/status"

Здесь <Asterisk IP> - адрес сервера Asterisk, на который был установлен модуль. -s - уменьшает количество промежуточного вывода от curl. --digest -u - указывает способ авторизации. <login> и <password> - логин и пароль от админки.

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

Пример ответа:

{
  "app": {
    "c2c": {
      "connected": true,
      "on": true,
      "portal": "example.bitrix24.ru",
      "stayon": false,
      "url": "https://apix.itgrix.ru:9004"
    },
    "calls_queue": {
      "calls": 0,
      "lock": "locked in 384ns"
    },
    "calls_storage": {
      "calls": 0
    },
    "crm": {
      "host": "https://example.bitrix24.ru",
      "manager": {
        "batch_queue": 0,
        "connector": {
          "app_type": "LicenseType_Subscription",
          "authseq": {
            "err": "<nil>",
            "sequences": 0
          },
          "on": true,
          "portal": "example.bitrix24.ru"
        },
        "on": true
      },
      "on": true,
      "users_cache": {
        "last_updated": "2023-05-11 13:03:55.485 +05:00",
        "phones": 39,
        "users": 120
      }
    },
    "crm_type": "bitrix",
    "customizer": {
      "enabled": true,
      "methods": {
        "customize_activity": true,
        "customize_attach_record_url": true,
        "customize_autodistribution": true,
        "customize_entity": true,
        "customize_show_call_card": true,
        "need_registration": true,
        "post_registration": true,
        "process_client_phone": true,
        "process_final_params": true,
        "process_originate_params": true,
        "process_record_file_path": true,
        "process_registration_params": true,
        "process_task_creation_params": true,
        "process_user_phone": true
      },
      "path": "/opt/itgrix_bx/customizer/customize.php",
      "timeout": 2000
    },
    "err": "<nil>",
    "license_manager": {
      "currentLicense": {
        "offline": false,
        "type": "Professional",
        "valid_till": "2025-04-15"
      },
      "on": true,
      "soft_mode": "ready"
    },
    "lock": "locked in 279ns",
    "master": {
      "general": {
        "app_err": "<nil>",
        "app_state": "",
        "app_status": "Ok",
        "app_status_updated": "2023-04-27 08:58:38.172 +05:00"
      }
    },
    "originated": 0,
    "pbx": {
      "ami": {
        "logged_in": true,
        "on": true,
        "pending_actions": 0
      },
      "cel_queue": {
        "calls": 0,
        "pending_events": 0
      },
      "db": {
        "connected": true,
        "dbConnector": {
          "on": true
        }
      },
      "fmc_cache": {
        "last_refresh": "2023-05-11 13:03:55.485 +05:00",
        "phones": 39
      },
      "last_id": 713065,
      "on": true,
      "parked": 0,
      "sql_parser": {
        "originated": 0,
        "transfer_bridges": 0
      },
      "trunks": 2
    },
    "restarting": false,
    "version": "Itgrix_bx v3.10.12"
  },
  "instance": {
    "config": "/etc/itgrix_bx/config.json",
    "index": 0,
    "log": "/var/log/itgrix_bx.log",
    "service": "itgrix_bx"
  }
}

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

С помощью описанных ниже запросов можно отследить когда и почему приложение перестаёт работать.

curl -s --digest -u <login>:<password> "<Asterisk IP>:8077/status?path=app.master.general.app_state

Варианты значений app_state:

  • При нормальной работе будет возвращаться значение "".

  • Значение "stopped" возвращается когда приложение столкнулось с ошибкой, препятствующей дальнейшей работе и ожидает действий со стороны пользователя.

  • Значение "restarting" возвращается когда приложение перезапускается. Это может быть вызвано проблемой, которая предположительно решится переподключением и/или коротким ожиданием, например при проблемах с сетью. Перезапуск также может быть и штатным, например при изменении настроек подключений.

curl -s --digest -u <login>:<password> "<Asterisk IP>:8077/status?path=app.master.general.app_status" 

app_status содержит общий статус приложения, который может быть "Ok"/"Warning"/"Error". Это статус, который отображается вверху главной страницы админки. Во многих случаях он соответствует состоянию работает/перезапускается/остановлено, но в некоторых ситуациях может предоставлять дополнительную информацию. Например, он может помочь отличить штатный перезапуск от перезапуска в результате ошибки.

curl -s --digest -u <login>:<password> "<Asterisk IP>:8077/status?path=app.master.general.app_err"

app_err содержит детали ошибки, на основании которой формируется текст ошибки под статусом приложения на главной странице. Этот элемент может быть полезен для выяснения причин сбоя.

Смена лицензии

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

curl -s --digest -u <login>:<password> "<Asterisk IP>:8077/status?path=app.license_manager.currentLicense.type"

license.type возвращает тип лицензии, отображаемый вверху главной страницы админки. Возможные значения:

  • "Professional" - оплаченная лицензия с полным функционалом.

  • "Subscription" - лицензия "по подписке" с ограниченным функционалом.

  • "Free" - бесплатная лицензия с базовым функционалом.

curl -s --digest -u <login>:<password> "<Asterisk IP>:8077/status?path=app.license_manager.currentLicense.valid_till"

license.valid_till содержит дату истечения лицензии (последний день когда она имеет силу) в формате ГГГГ-ММ-ДД.

Last updated