Документацияbreadcrumb arrow Grafanabreadcrumb arrow Документация GlaberGraphbreadcrumb arrow Администрированиеbreadcrumb arrow Корреляцииbreadcrumb arrow Использование переменных и преобразований в корреляции

Использование переменных и преобразований в корреляции

Прежде чем начать

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

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

  • Логи, содержащие строки в формате: «2020-01-01 10:00 level=error message=error service=app1.loginService», хранящиеся в поле с именем «msg»
  • Метрики приложения, включённого в имя сервиса строки лога (например, app1)

Приведённые ниже инструкции показывают, как настроить ссылку, которая может выполнять запрос метрик для хоста, указанного в каждой строке лога, с помощью провижининга и преобразования regex. Кроме того, настраивается ссылка с запросом, содержащим полное имя сервиса, чтобы продемонстрировать преобразование logfmt.

Использование переменных и преобразований при провижининге

  1. Добавьте следующую конфигурацию провижининга в вашу Grafana:

    YAML
    datasources:
      - name: Target
        uid: test-target
        type: testdata
    
      - name: Source
        uid: test-source
        type: testdata
      - name: Source
        uid: test-source
        type: testdata
        correlations:
          - targetUID: test-target
            label: App metrics
            description: Application HTTP request metrics
            config:
              type: query
              target:
                scenario_id: random_walk
                alias: $${application}
              field: msg
              transformations:
                - type: regex
                  field: msg
                  expression: service=(\w+)\.\w+
                  mapValue: application
          - targetUID: test-target
            label: Service metrics
            description: Service metrics
            config:
              type: query
              target:
                scenario_id: random_walk
                alias: $${service}
              field: msg
              transformations:
                - type: logfmt
                  field: msg

    Создаются два источника данных: Source (эмулирующий источник данных логов) и Target (эмулирующий источник данных метрик):

    • Создаётся корреляция под названием «App metrics», нацеленная на источник данных Target по его UID.
      • Метка и описание задаются как текст
      • Каждая корреляция содержит следующую конфигурацию:
        • Обязательный тип корреляции (query)
        • Целевой запрос, соответствующий модели тестового источника данных
      • Корреляция «App metrics» содержит следующую конфигурацию:
        • Alias задан как переменная ${application} (обратите внимание, что в файлах провижининга символ $ используется для доступа к переменным окружения, поэтому его нужно экранировать).
        • Создаётся преобразование с помощью регулярного выражения для извлечения значений из поля «msg»
          • Преобразование с помощью регулярного выражения используется для захвата имени приложения из полного имени сервиса, хранящегося в строке лога.
          • Результат преобразования сопоставляется с переменной под названием «application».
      • Корреляция «Service metrics» создаётся похожим образом, но с преобразованием logfmt, чтобы разобрать сообщение лога и получить доступ к полному имени сервиса (например, «app1.loginService»).
        • Например, когда в качестве входных данных передаётся строка лога «2020-01-01 10:00 level=error message=error service=app1.loginService», преобразование создаёт новые переменные: level, message и service.
        • Переменная «service» используется как alias в целевом запросе.
  2. Перейдите в Explore и откройте источник данных «Source».

  3. Выберите сценарий «Raw Frames» и укажите следующие фреймы данных, чтобы эмулировать возврат строк логов:

    JSON
    [
      {
        "meta": {
          "preferredVisualisationType": "logs"
        },
        "fields": [
          {
            "name": "time",
            "values": [1, 2]
          },
          {
            "name": "msg",
            "values": [
              "level=error msg=error service=app1.loginService",
              "level=debug msg=info service=app2.userProfileService"
            ]
          }
        ]
      }
    ]
  4. Выполните запрос и откройте подробности лога, нажав на строку лога.

    Ссылки корреляций в панели логов
    Ссылки корреляций в панели логов

    Рядом с переменными, извлечёнными из строки лога с помощью преобразований, отображаются ссылки «App metrics» и «Service metrics»

  5. Нажмите на ссылку «App metrics».

  6. Откроется разделённое представление и выполнится целевой запрос.

  7. Обратите внимание, как имя приложения из строки лога подставляется в свойство alias целевого запроса.

    Интерполированный целевой запрос
    Интерполированный целевой запрос

    Это позволяет выполнять конкретный запрос на основе исходных результатов:

    Результаты интерполированного целевого запроса
    Результаты интерполированного целевого запроса
  8. Вернитесь к исходному запросу и измените предпочтительный тип визуализации raw frames на «table», чтобы увидеть, как ссылки отображаются в визуализации «Таблица».

    JSON
    [
      {
        "meta": {
          "preferredVisualisationType": "table"
        },
        "fields": [...]
      }
    ]
  9. Выполните запрос и обратите внимание, как ссылки создаются в ячейке таблицы:

    Ссылки корреляций в таблице
    Ссылки корреляций в таблице