Настройка подсистемы мониторинга#

Вход в подсистему#

При обращении к URL AdminUI пользователь автоматически будет переведен на сервис Keycloak, где необходимо выполнить вход.

В случае настроенной интеграции с каталогом пользователей LDAP, пользователь должен использовать свои персональные УЗ.

../../_images/set_1.png

По умолчанию, в Платформе создаётся локальный (с точки зрения Keycloak) пользователь admin-internal с паролем, заданным при установке (через указание пароля admin_ui.password или через указание имени секрета admin_ui.secretName).

Для смены пароля в Keycloak:

  1. На кластере необходимо перейти по адресу http://<адрес_сервера_мониторига>/oidc/ (пример: https://admin-ui-mon-mon-mon-mon.10-177-181-74.sslip.io/oidc/).

  2. После открытия окна с Keycloak нажать Administration Console.

  3. Ввести логин и пароль (по умолчанию admin:password).

  4. В открывшемся окне:

  • для смены логина и пароля пользователя для входа в Keycloak:

    • выбрать в верхнем левом углу realm «master», перейти на вкладку Users;

    • выбрать Username=admin и перейти на вкладку Credentials;

    • нажать Reset password. Далее сбросить пароль на новый;

  • для смены логина и пароля для входа в Admin UI:

    • выбрать в верхнем левом углу realm «astra-monitoring», перейти на вкладку Users;

    • выбрать Username=admin-internal и перейти на вкладку Credentials;

    • нажать Reset password. Далее сбросить пароль на новый;

  • для создания нового логина и пароля пользователя для входа в Keycloak:

    • выбрать в верхнем левом углу realm «master», перейти на вкладку Users;

    • нажать Add user и заполнить поле Username;

    • нажать кнопку Create. перейти на вкладку Credentials и нажать Set password;

    • создать пароль и сохранить его;

    • перейти на вкладку Role mapping и нажать Assign role и выбрать admin и **default-roles-master ** (можно выбрать те роли, которые необходимы);

  • для создания нового логина и пароля для входа в Admin UI:

    • выбрать в верхнем левом углу realm «astra-monitoring», перейти на вкладку Users;

    • нажать Add user и заполнить поле Username;

    • нажать кнопку Create. перейти на вкладку Credentials и нажать Set password;

    • создать пароль и сохранить его.

Для увеличения времени действия сессии в Keycloak:

  1. Перейти на адрес keycloak.

  2. Изменить параметры в разделе /admin/master/console/#/astra-monitoring/realm-settings/sessions:

  • SSO Session Idle (12 часов);

  • SSO Session Max (12 часов).

  1. Изменить параметры в разделе admin/master/console/#/astra-monitoring/realm-settings/tokens:

  • Access Token Lifespan (12 часов);

  • Access Token Lifespan For Implicit Flow (12 часов);

  • Client Login Timeout (5 минут).

../../_images/set_2.png ../../_images/set_3.png

Настройка интеграции с LDAP#

Интеграцию Keycloak с LDAP каталогом пользователей (ALD Pro, FreeIPA, MS AD) можно настроить самостоятельно через интерфейс Keycloak, согласно официальной инструкции.

Добавление объектов мониторинга#

Примечание

Добавление объекта/хоста в ПМ выполняется через установку Агента на этом хосте. Установка Агента недоступна через интерфейс пользователя.

Необходимо развернуть Агент на хосте, после чего он зарегистрируется на ПМ и станет доступен к конфигурированию из интерфейса пользователя.

Все требуемые Агенту встроенные экспортеры, а также необходимые сторонние экспортеры, могут в дальнейшем устанавливаться и конфигурироваться автоматически, в соответствии с настройками Агента, обеспечивая сбор и выдачу соответствующих метрик.

Если через Агент будут передаваться диагностические данные с других Агентов, то необходимо данный Агент разворачивать с установленным режимом прокси.

При наличии установленного Агента на хосте запись объекта/агента создается автоматически с параметрами Агента и Узла / Точки подключения, на который(ую) Агент сконфигурирован при установке. При этом в блоке Источники данных в секции Встроенные экспортеры представлены управляемые Агентом экспортеры, которые установлены и сконфигурированы вместе с ним.

Добавление внешних по отношению к Агенту объектов мониторинга производится в пользовательском интерфейсе путем добавления стороннего экспортера (кликом по кнопке Добавить в блоке Источники данных в секции Встроенные экспортеры):

../../_images/set_4.png

В открывшейся форме задаются следующие параметры:

Параметр

Описание

Имя стороннего экспортера

Имя стороннего экспортера, вводится в поле руками

Адрес:порт сервера

В формате <ip-адрес>:<порт>; адрес, с которого собираются метрики

URL путь метрик

Начинается с «/»

Labels

Лейблы для собираемых метрик. Формат Ключ:Значение. По этим лейблам данные метрик будут фильтроваться для показа графиков на дашбордах

Добавить лейбл

По кнопке в список добавляются поля для задания нового лейбла

Удалить лейбл

По кнопке соответствующий лейбл удаляется из списка

Интервал, сек

Интервал сбора метрик в секундах, целое неотрицательное число

Включить сбор данных

Включает сбор данных экспортером

По кнопке Отмена/ОК сохранение настроек экспортера отменяется/выполняется.

Если в списке сторонних экспортеров присутствуют лишние, их можно удалить, последовательно кликая по соответствующим кнопкам Удалить и подтверждая операцию:

../../_images/set_5.png

При необходимости добавить встроенный экспортер под управление Агентом, кликнуть по кнопке Добавить в секции Источники данных/Встроенные экспортеры:

../../_images/set_6.png

Поля формы аналогичны форме редактирования встроенного экспортера. До выбора имени экспортера из списка все остальные поля формы не доступны к изменениям.

../../_images/set_7.png

После задания экспортера, поля формы открываются и предзаполняются дефолтными значениями.

Дефолтный файл конфига соответствует выбранному экспортеру.

Пользователь может изменять их под свою задачу.

../../_images/set_8.png

По кнопке Отмена/ОК сохранение настроек экспортера отменяется/выполняется.

Примечание

Добавленные через UI экспортеры в дальнейшем автоматически устанавливаются из централизованного хранилища ПМ на хост объекта.

Список добавленных на ПМ хостов доступен на странице Мониторинг — Интерфейсы по хостам.

Для редактирования настроек уже имеющегося экспортера нужно кликнуть по имени этого экспортера в соответствующем списке, откроется форма с полями:

  • для встроенного экспортера:

    ../../_images/set_9.png

    На форме задаются следующие параметры:

    Параметр

    Описание

    Имя экспортера

    Имя встроенного экспортера, не изменяется

    Вариант настроек

    args/am для собственных экспортеров, args - для опенсорсных

    Адрес:порт сервера

    В формате <Адрес сервера>:<Порт>, с которого собираются метрики

    Args

    Поле доступно, если Вариант настроек=args

    Config

    Параметры конфигурационного файла экспортера. Это либо сам конфиг файл, либо путь к нему

    Labels

    Лейблы для собираемых метрик. Формат Ключ:Значение. По этим лейблам данные метрик будут фильтроваться для показа графиков на дашбордах

    Добавить лейбл

    По кнопке в список добавляются поля для задания нового лейбла

    Удалить лейбл

    По кнопке соответствующий лейбл удаляется из списка

    Интервал, сек

    Интервал сбора метрик в секундах

    Включить сбор данных

    Включает сбор данных экспортером

    По кнопке Отмена/ОК сохранение настроек экспортера отменяется/выполняется.

  • для стороннего экспортера

    ../../_images/set_10.png

    На форме задаются следующие параметры:

    Элемент интерфейса

    Описание

    Имя стороннего экспортера

    Имя стороннего экспортера, не изменяется

    Адрес:порт сервера

    В формате <ip-адрес>:<порт>; адрес, с которого собираются метрики

    URL путь метрик

    Начинается с «/»

    Labels

    Лейблы для собираемых метрик. Формат Ключ:Значение. По этим лейблам данные метрик будут фильтроваться для  показа графиков на дашбордах

    Добавить лейбл

    По кнопке в список добавляются поля для задания нового лейбла

    Удалить лейбл

    По кнопке соответствующий лейбл удаляется из списка

    Интервал, сек

    Интервал сбора метрик в секундах

    Включить сбор данных

    Включает сбор данных экспортером

    По кнопке Отмена/ОК сохранение настроек экспортера отменяется/выполняется.

Примечание

Для корректного использования предустановленных дашбордов в Grafana необходимо использовать специальные теги product и component. Они позволяют корректно фильтровать необходимые объекты и показывать графики для нужных продуктов. В данный момент такие теги необходимо создавать и назначать вручную на соответствующие объекты. В главе 6 документации для каждого продукта даны необходимые пояснения по созданию и использованию данных тегов. Указанная особенность касается только использования этих двух тегов.

Из итогового списка объектов мониторинга затем формируется список targets в формате json, включающий в себя имя (hostname), адрес инстанса (instance) и теги (labels) каждого объекта мониторинга. Этот список доступен по специальному адресу <admin-ui-url>/api/endpoints?format=prometheus. Prometheus обращается к указанному адресу, считывает список объектов и, посредством механизма HTTP Service Discovery, добавляет их в свою конфигурацию, после чего начинает опрос и получение метрик от объектов мониторинга.

Настройка триггеров для создания событий#

Правила триггеров для создания событий описаны в конфигурационных файлах:

  • в директории ./alert-rules/ в случае установки в кластер Kubernetes;

  • в директории ./vmalert/config/ в случае установки в виде Docker Compose.

Файлы логически разделены по функциональным группам, например, ald-pro.yaml, brest.yaml или node-exporter.yaml.

Правила описываются в формате YAML следующим образом:

groups:
  - name: ald-pro
    interval: 30s
    concurrency: 2
    rules:
      - alert: IPATestUserConnection
        expr: |
          ipa_user_connect{} == 0
        for: 5m
        labels:
          severity: critical
          team: ipa_support
        annotations:
          summary: "Server {{ $labels.hostname }} has an issue with test user authentication"
          description: "Test user {{ $labels.user_check }} can't connect to domain on server {{ $labels.hostname }} ({{ $labels.instance }})"

      - alert: IPAUserConnectionTime
        expr: |
          avg_over_time(ipa_time_for_connect[5m]) > 2 * avg_over_time(ipa_time_for_connect[5m] offset 5m)
        labels:
          severity: warning
          team: ipa_support
        annotations:
          summary: "Server {{ $labels.hostname }} ({{ $labels.instance }}) has highly increased test user connection time ({{ humanize $value }} ms.)"
          description: "Test user {{ $labels.user_check }} has an issue with very long test user connection time ({{ humanize $value }} ms.) on server {{ $labels.hostname }} ({{ $labels.instance }})"

где:

  • name — имя группы правил;

  • interval — интервал обработки правил группы;

  • alert — имя триггера;

  • expr — условие для срабатывания триггера в формате PromQL;

  • for — минимальная длительность состояния перед срабатыванием триггера;

  • labels — дополнительные лейблы для триггера:

    • severity — уровень критичности;

    • team — маршрут для отправки уведомлений о срабатывании триггера, например, имя команды поддержки системы/продукта. (дополнительное опциональное поле, приведенное в качестве примера для конкретного набора правил),

  • annotations — дополнительные информационные сообщения для получателей сообщений:

    • summary — краткое описание проблемы в заголовке сообщения;

    • description — общее описание проблемы в тексте сообщения.

Набор полей, указанных в списке labels может отличаться, в зависимости от правила, например, включать в себя имя сервиса systemd, точку монтирования файловой системы mountpoint, имя пользователя, название метрики и т.д., но при этом рекомендуется всегда указывать уровень критичности severity.

Для добавления нового правила к уже существующей группе, необходимо определить имя триггера, условия для его срабатывания, критичность и получателя сообщений о срабатывании триггера. Далее добавить описание триггера в формате YAML в список rules требуемой группы правил, например, группы ald-pro в файле ./alert-rules/ald-pro.yaml (./vmalert/config/ald-pro.yaml).

Для создания нового набора правил необходимо создать новый файл в директории ./alert-rules/ (./vmalert/config/) с требуемой группой (например, файл rupost.yaml с группой правил rupost), описать в группе требуемый набор правил и сохранить файл.

Также правила могут быть размещены в файле values.tmpl, в секции vmalert / additionalPrometheusRulesMap, аналогично описанному выше.

После окончания добавления или редактирования правил, необходимо обновить компоненты ПМ с помощью инструментов docker-compose / helm-chart.

Настройка оповещений#

Правила оповещений о событих описаны в конфигурационном файле:

  • в директории ./templates/alertmanager-cm.yaml в случае установки в кластер Kubernetes;

  • в директории ./alertmanager/config/alertmanager.yml в случае установки в виде Docker.

Настройки описываются в формате YAML. Например, для интеграции с Mattermost необходимо подставить <webhookid> и <channel-name> в блок slack_configs группы receivers и т.д. Имя канала оповещений (receiver) задается произвольно. Неиспользуемые каналы можно удалить из конфигурации.

global:
templates:
- '/etc/alertmanager-templates/*.tmpl'
route:
  receiver: alert-null  # канал для отправки всех сообщений по умолчанию.
  # В примере указана пустая заглушка для отправки сообщений только по указанным далее маршрутам, но может быть использован любой другой канал.
  group_by: ['alertname', 'hostname', 'group', 'severity', 'metric']
  group_wait: 3m
  group_interval: 5m
  repeat_interval: 1d
  routes:
  - receiver: alert-mmost
    matchers: # задаем условия для отправки сообщений через этот канал
    - team = ipa_support
  - receiver: alert-telegram1
    matchers:
    - group = infra
  - receiver: send-to-telegram2
    matchers:
    - group = middleware
    - severity =~ "warning|critical"
  - receiver: email-alerts
    matchers:
    - group = middleware
    - severity = critical

receivers:
- name: alert-mmost1
  slack_configs:
  - api_url: https://im.astralinux.ru/hooks/<webhookid>
    channel: '<channel-name>'  # имя канала в mattermost
    send_resolved: true
    title: '{{ template "slack.title" . }}'
    color: '{{ template "slack.color" . }}'
    text: '{{ template "slack.text" . }}'
- name: alert-telegram1
   # Оповещения в первую группу telegram
  telegram_configs:
  - bot_token: '<bot_token>'   # https://core.telegram.org/bots/features#botfather
    api_url: 'https://api.telegram.org'
    # Не забудьте добавить бота в группу, в которую должны приходить сообщения
    chat_id: -1000000000001 # <указать id группы в формате -1234567890, в начале стоит минус
    send_resolved: true
    message: '{{ template "telegram.message" . }}'
- name: send-to-telegram2
  # Оповещения во вторую группу telegram (при необходимости)
  telegram_configs:
  - bot_token: '<bot_token>'
    api_url: 'https://api.telegram.org'
    chat_id: -1000000000002
    send_resolved: true
    message: '{{ template "telegram.message" . }}'
- name: email-alerts
  email_configs:
  - to: email@example-domain.ru
        send_resolved: false
        from: astra-monitoring@example-domain.ru
        smarthost: <smtp-relay-address>:25
        require_tls: false
- name: alert-null   # пустой канал-заглушка

inhibit_rules:
  - source_matchers: [severity="critical"]
    target_matchers: [severity="warning"]
    # Apply inhibition if the alertname is the same.
    # CAUTION:
    #   If all label names listed in `equal` are missing
    #   from both the source and target alerts,
    #   the inhibition rule will apply!
    equal: [alertname, hostname, instance, group]

Из «коробки» поддерживается много разных типов каналов оповещений, например:

  • email;

  • Telegram;

  • Discord;

  • Jira;

  • Mattermost (Slack);

  • MS Teams;

  • OpsGenie;

  • PagerDuty;

  • VictorOps;

  • SNS (Amazon AWS);

  • Webex;

  • Webhook.

Указанный в списке механизм Webhook позволяет расширить список возможностей интеграции, если требуемый канал оповещений не поддерживается нативно Alertmanager. Так, в списке совместимых интеграций заявлены GitLab, Ansible Tower, IRC, Zoom, SMS (с использованием веб-сервисов провайдеров) и прочие продукты <https://prometheus.io/docs/operating/integrations/#alertmanager-webhook-receiver>.

Набор конкретных используемых каналов оповещений задается в блоке receivers. Далее для каждого канала в отдельности задается имя и специфичные параметры, такие как адрес получателся email, token бота, id группы Telegam и так далее. Может быть несколько каналов одного типа, но с разными параметрами, например, разными группами в Telegram или получателями email.

Выбор того или иного канала оповещений зависит от условий, заданных в секции route, включая канал «по умолчанию» (в примере выше это alert-null), куда будут отправляться все оповещения. Для остальных маршрутов условия задаются в блоке matchers маршрута. Например, это может быть проверка на значение каких-либо лейблов — severity, group и т.д. Оповещение может быть отправлено в несколько разных каналов. Так, в примере выше описана отправка в telegram2 алертов, у которых лейбл group = middleware, а severity = warning" или critical. При этом, алерты с лейблами group = middleware и severity = critical будут также дублироваться на электронную почту из канала email-alerts.

Оповещения можно группировать по различным признакам для уменьшения их количества, например, объединить все алерты от одного хоста в одно сообщение. Группировка задается параметром group_by, который определяет лейблы, по совпадению значений которых будут группироваться алерты. Дополнительно применяются параметры group_wait — задержка для начальной группировки алертов перед первым оповещением, а также group_interval — через какое время отправлять дополнительные оповещения, если в эту же группу добавлены новые алерты. Параметр repeat_interval задает время для повторной отправки оповещения о все еще активной проблеме, как напоминание.

Секция inhibit_rules позволяет задать правила «подавления» одних алертов другими. Например, при наличии алерта с лейблом severity = critical, Alertmanager не будет реагировать на приходящие алерты с такими же лейблами (alertname, hostname, instance, group), но c severity = warning.

Активные настройки Alertmanager, его состояние и список активных алертов можно проверить в веб-интерфейсе, по доменному имени, заданному при развертывании в среде Kubernetes (например, вида https://alertmanager.am.domain.local/ , пример: https://alertmanager-mon-dev.10-177-181-13.sslip.io) или по порту 9093 при развертывании в среде Docker Compose (вида http://<server_address>:9093/, пример: http://10.177.180.139:9093). Также, используя API Alertmanager возможно проверять его состояние GET-запросами по пути /-/healthy, /-/ready или инициировать перезагрузку конфигурации POST-запросом по пути /-/reload.

Более подробно о возможностях настройки подсистемы оповещения можно найти в официальной документации.

Конфигурация webhook_configs должна быть сохранена для наполнения базы событий и отображения актуальной информации в Admin UI.

После внесения изменений, необходимо обновить компоненты ПМ.

Настройка (добавление) дополнительных дашбордов Grafana#

Дополнительные пользовательские дашборды Grafana могут быть добавлены в ПМ на этапе развертывания. Для этого заранее подготовленный код дашборда в формате json необходимо добавить в файл values.yaml и затем провести обновление компонентов с помощью инструментов helm-chart.

Формат описания дополнительных дашбордов в values.yaml состоит из двух частей — провайдера и группы дашбордов с содержимым в виде непосредственно json-кода или в виде ссылки на него (в том же формате json). Добавление дашбордов с несуществующим провайдером может вызвать ошибки при развертывании ПМ.

Примерный фрагмент файла values.yaml:

grafana:
  dashboardProviders:
    dashboardproviders.yaml:
      apiVersion: 1
      providers:
      - name: 'custom-dashboards'   # имя провайдера дашбордов
        orgId: 1
        folder: ''
        type: file
        disableDeletion: false
        updateIntervalSeconds: 60
        editable: true
        allowUiUpdates: true
        options:
          path: /src/grafana/dashboards/
          foldersFromFilesStructure: true
      - name: 'web-dashboards'
        orgId: 1
        folder: ''
        type: file
        disableDeletion: false
        updateIntervalSeconds: 60
        editable: true
        allowUiUpdates: true
        options:
          path: /var/lib/grafana/dashboards/Web-dashboards
          foldersFromFilesStructure: true
  dashboards:
    custom-dashboards:    # совпадает с именем провайдера в dashboardProviders
      mydashboard:        # название дашборда
        json: |
          { }             # код дашборда в формате json
      json-dashboard-2:
        json: |
          { }
    web-dashboards:                                                # совпадает с именем провайдера в dashboardProviders
      mydashboard-3:                                               # название дашборда
        url: http://externalurl:8080/grafana/mydashboard.json      # путь к загружаемому дашборду

Подробное описание провайдеров и дашбордов можно найти в документации Grafana <https://grafana.com/docs/grafana/latest/administration/provisioning/#dashboards> и на странице GitHub <https://github.com/grafana/helm-charts/blob/main/charts/grafana/values.yaml>.

Дашборды, загружаемые с помощью url, должны быть доступны для ПМ во время развертывания, так как при этом происходит загрузка (скачивание) файла во внутреннюю директорию Grafana, указанную в настройках соответствующего провайдера.

Примечание

После удаления дашбордов или изменения путей у провайдеров, при повторном развертывании Платформы без удаления pvc Grafana может сложиться ситуация, когда дашборды появляются в новой директории и остаются в старой. Решением может оказаться ручное удаление pvc Grafana перед повторным развертыванием Платформы АМ.

Использование API#

Для того, чтобы иметь доступ к выполнению API запросов необходимо аутентифицироваться в системе аутентификации (Keycloak), при этом будет получен токен доступа (access_token), обеспечивающий дальнейшую работу с API.

> export USER_NAME="<your_user_name>"
> export USER_PASSWORD="<your_user_password>"
> export ADMINUI_ENDPOINT="<url_to_your_admin_ui>"

> curl --silent -k -X POST -d "grant_type=password&username=${USER_NAME}&password=${USER_PASSWORD}&client_id=admin-ui" -H "Content-Type:application/x-www-form-urlencoded" ${ADMINUI_ENDPOINT}/oauth/login | jq
{
  "token_type": "Bearer",
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJpdk1UUDgtRGptSmU2LTE2ejVYaHlpUk0xUkx5X2lYYUlHblRjTGhkdTNrIn0.eyJleHAiOjE3MTAzOTgyNzksImlhdCI6MTcxMDM5Nzk3OSwianRpIjoiY2VhMzY4OTUtOTNjYS00N
jJjLWI1ZmItZTc3OTIzNDdiZDgxIiwiaXNzIjoiaHR0cHM6Ly9hZG1pbi11aS1tb24tZGV2LjEwLTE3Ny0xODEtMTMuc3NsaXAuaW8vb2lkYy9yZWFsbXMvYXN0cmEtbW9uaXRvcmluZyIsImF1ZCI6ImFkbWluLXVpIiwic3ViIjoiNWFkMjI3OTYtYzdmOS00NzJiLTgyM2YtY
zQwNzAxN2JhYzJjIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiYWRtaW4tdWkiLCJzZXNzaW9uX3N0YXRlIjoiZmE2YjkxODEtZTFhNy00NDJkLTkxNDctYTUxYWI3Mzk1OWE3Iiwic2NvcGUiOiJvcGVuaWQgYXVkaWVuY2UtYWRtaW4tdWkgcHJvZmlsZSBlbWFpbCIsInNpZCI6I
mZhNmI5MTgxLWUxYTctNDQyZC05MTQ3LWE1MWFiNzM5NTlhNyIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwicHJlZmVycmVkX3VzZXJuYW1lIjoiYWRtaW4taW50ZXJuYWwiLCJlbWFpbCI6ImFkbWluLWludGVybmFsQG9pZGMtbW9uLWRldi4xMC0xNzctMTgxLTEzLnNzbGlwL
mlvIn0.cxUz5EVS5idt8wR9Zx8GCgD7Taz1aT0dAwgerM_ce1agXnYbiHz4I5_1wtEk3EPu6A2EUbv1xkX36eZD1JBi5wEmCfAeNuNX2do3_rfSEtRcGML4tA6DSeiV2CrTybfIr2ciE6z3_LPfU2CZQEnoVB54zOf2HbUgJti5KhuH5bNcLnYm6VTE4gdDY43S3UgX04Ny-Vkdo
oY2_Gk9cHWls6iW5GefLxFh7yzNsxEgMS_BDvZ-UiPbWVWss660sA7G-DKv91FLEGFhbxWdtVYhU9CvEygEYaqfSlPBE43BXI0jo_IWm8SB_MEKW_vl4gXZP9hXjjpf0x7OnGpfoRHjAA",
  "id_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJpdk1UUDgtRGptSmU2LTE2ejVYaHlpUk0xUkx5X2lYYUlHblRjTGhkdTNrIn0.eyJleHAiOjE3MTAzOTgyNzksImlhdCI6MTcxMDM5Nzk3OSwiYXV0aF90aW1lIjowLCJqdGkiOiJlMDcxN
mVlYy01M2IyLTRiMTctYWZmOC1hODY2ODM3NDY4OTEiLCJpc3MiOiJodHRwczovL2FkbWluLXVpLW1vbi1kZXYuMTAtMTc3LTE4MS0xMy5zc2xpcC5pby9vaWRjL3JlYWxtcy9hc3RyYS1tb25pdG9yaW5nIiwiYXVkIjoiYWRtaW4tdWkiLCJzdWIiOiI1YWQyMjc5Ni1jN2Y5L
TQ3MmItODIzZi1jNDA3MDE3YmFjMmMiLCJ0eXAiOiJJRCIsImF6cCI6ImFkbWluLXVpIiwic2Vzc2lvbl9zdGF0ZSI6ImZhNmI5MTgxLWUxYTctNDQyZC05MTQ3LWE1MWFiNzM5NTlhNyIsImF0X2hhc2giOiJjeGF6NktNekpiVVNpemNENEEzbXNRIiwic2lkIjoiZmE2YjkxO
DEtZTFhNy00NDJkLTkxNDctYTUxYWI3Mzk1OWE3IiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJhZG1pbi1pbnRlcm5hbCIsImVtYWlsIjoiYWRtaW4taW50ZXJuYWxAb2lkYy1tb24tZGV2LjEwLTE3Ny0xODEtMTMuc3NsaXAuaW8ifQ.mV
8nKQEbidOMlyGsUr7jdAPWoZbeLV_ed_FQ15YuFf2i-ECmxq3xPwLFNfVJVsU4nsKc0g0ZpIVoSFXLUO2mRofoPJBK60ypzP3DmjwP5nwiDWmkgXijVM-rp1WQAzA7lNZQVFbkM4c-sOsKG4hjj994sTi3IaQh2JxE5OJ35bNU7j_rhjgShH3LfPD2C3b1qcRrNrqe-2Ku74fLEl
XHGAAiVqWnpVk0h6ewGRrauY1k1fyYf2lGBIgeboLBRShjY_TM80iCaRU7WWKMmdV9AFVWyoN3GNMelAdKstBRFJZb1cCml8I0ndkDPA-zQhvi-ZmTkuSme2hUplL95Iywow",
  "refresh_token": "WGA0F30ClihVgYrSp7yd7Rb5kcpRbHelbXBaWkzQ8hJlkF84AFinHWYTLwfvhGXxkBFbRAKMfk5OmktUXPmZbb4X/VviKu5g/8oHYQgm9JTYmDld5O5AqYyJOJ54xlMUn8rjhpeVdO5y1IoSulZWcMQh5nbWWs2H916JobR64+eyXDyGYXAm+B0dtG62
ao//F+csewM6JHzvk9s+JNhe/8yCg+kYTTqg23U0UFHCiOY9geCDPzd0DT72HGLtjtd5nyanYgxzBSqW4LR5uOBiJ85HNpmx1rBzJTd027hOC1Uy76291JWsij/YOxw/Pv/3/KIFJLQd5WBq8t1YLv2PchivEPmTQH39eN6zdwkTEaueiSsooRO6lX3AYhm3kZqg5Jwt+NYgjEXu
qbG/V1rFr1UhsqHivO1wOJFEDtGteaZN6pn2pqlGGW1hOfVhrp/mQ3jwTaOLHw0u8kcdO5HdjKHBHEGHIGkkeCPRRP1LxR625PdnBRlbTjE7B4dc/CevwUxrcyvAWhqtMXbPY+Ub19nwtlyitJuGLoyF+ifllAzjAbj0+CAsrFsmFobaCP878kp4TNqheLGB+ZykLCY9y/mGjmJ/
l9MzMvME5gxNPzriVKVZQOuuhb1IQONKfj8WQPPgIgmuJkdh+krqa+PkEkWXx/loSRxOl1ZDfISdfvhplyhDe/Tan7vPfpWj+4wFtKnQPg9ijJGCpazVrrmpDZVU7YS5TFOwnA3K4kz9dlsK6kWjokWP9PCzz/chkzOLd1WOUFoK3OeL6j33j2vKc9cwnXOPTcTE3cI3ORBxu3eA
qc4ed+iq3JQAAoHmFcEWwXQ5l4dSl8M/mLbRkf50Op8nvFtRfbAu0sdAg5FpkLvprCk5iFJfYX5DCzGflsbu210BeXrIzc5ILlreG8cxLkbBDKRbPLJSh+s+ykKQH0gv35Ci90NVXjoHx0nsBlXB7G7z5BAY8YNGNer9gkjsrWSSgbW4gYPGtdC1upIW/cFvuv35intZbZocLzxx
HbPmaDE/3n/caiXI5cxwmRz5FqvNz8i/ly4ZjWSpk+gnC2zlrpEn382L65WTSQ",
  "expires_in": 300,
  "scope": "openid audience-admin-ui profile email"
}

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

> export USER_NAME="<your_user_name>"
> export USER_PASSWORD="<your_user_password>"
> export ADMINUI_ENDPOINT="<url_to_your_admin_ui>"

> export access_token=`curl --silent k -X POST -d "grant_type=password&username=${USER_NAME}&password=${USER_PASSWORD}&client_id=admin-ui" -H "Content-Type:application/x-www-form-urlencoded" ${ADMINUI_ENDPOINT}/oauth/login | jq -r '.access_token'`

> curl --silent -k -H "Authorization: Bearer ${access_token}" ${ADMINUI_ENDPOINT}/api/endpoints | jq
[
  {
    "id": 19,
    "instance": "<ip_address>:9100",
    "fqdn": "<fqdn_host>",
    "tags": [
      {
        "id": 16,
        "name": "group",
        "value": "ald-pro",
        "color": "#5aafed",
        "endpoint_count": null
      },
      {
        "id": 20,
        "name": "subsystem",
        "value": "controller",
        "color": "#f7afb0",
        "endpoint_count": null
      }
    ],
    "type": {
      "id": 4,
      "name": "Astra Linux",
      "agent_config": "",
      "template_url": "http://{{ .grafana_base_url }}/d/rYdddlPWkwwkkD453/node-exporter-full?orgId=1&var-hostname={{ .hostname }}&var-group={{ .group }}",
      "default_port": 9100
    },
    "deleted_at": null,
    "url": "http://grafana-mon-dev.10-177-181-13.sslip.io/d/rYdddlPWkwwkkD453/node-exporter-full?orgId=1&var-hostname=<fqdn_host>&var-group=ald-pro"
  },
  ...
]

Описание существующего API можно найти по адресу ${ADMINUI_ENDPOINT}/api/v1/swagger/index.html, для предлагаемых endpoint’ов необходимо добавить /api/v1/ в начале.

../../_images/set_11.png