Spec-Zone.ru › Elasticsearch 7
›Руководство по Elasticsearch [7.17] ›Watcher ›Входы Watcher

Вход Watcher HTTP

Используйте вход http, чтобы отправить запрос к HTTP-точке входа и загрузить ответ в контекст выполнения наблюдения при срабатывании наблюдения. См. атрибуты ввода HTTP для всех поддерживаемых атрибутов.

С помощью входа http вы можете:

  • Запрашивать данные из внешних кластеров Elasticsearch. Вход http предоставляет способ отправки запросов поиска в кластеры, отличные от того, на котором выполняется Watcher. Это полезно, когда вы используете отдельный кластер Watcher или вам нужно искать в кластерах, работающих на разных версиях Elasticsearch.
  • Запрашивать API Elasticsearch, помимо API поиска. Например, вы можете загрузить данные из API статистики узлов, состояния кластера или состояния кластера.
  • Запрашивать внешние веб-службы. Вход http позволяет загружать данные с любой службы, которая предоставляет HTTP-точку входа. Это обеспечивает мост между кластерами Elasticsearch и другими системами.

Запрос к внешним кластерам Elasticsearch

Чтобы запросить внешний кластер Elasticsearch, укажите атрибуты host и port кластера и точку входа поиска для индекса как path. Если вы опустите тело запроса, запрос вернёт все документы в указанном индексе:

"input" : {
  "http" : {
    "request" : {
      "host" : "example.com",
      "port" : 9200,
      "path" : "/idx/_search"
    }
  }
}

Вы можете использовать полный Elasticsearch Query DSL для выполнения более сложных поисков. Например, следующий вход http извлекает все документы, содержащие event в поле category:

"input" : {
  "http" : {
    "request" : {
      "host" : "host.domain",
      "port" : 9200,
      "path" : "/idx/_search",
      "body" :  "{\"query\" :  {  \"match\" : { \"category\" : \"event\"}}}"
    }
  }
}

Вызов API Elasticsearch

Чтобы загрузить данные из других API Elasticsearch, укажите конечную точку API как атрибут path. Используйте атрибут params для указания параметров запроса. Например, следующий вход http вызывает API статистики кластера и включает атрибут human:

"input" : {
  "http" : {
    "request" : {
      "host" : "host.domain",
      "port" : 9200,
      "path" : "/_cluster/stats",
      "params" : {
        "human" : "true" 
      }
    }
  }
}

Включение этого атрибута возвращает значения bytes в ответе в удобочитаемом формате.

Вызов внешних веб-служб

Вы можете использовать вход http для получения данных с любой внешней веб-службы. Вход http поддерживает базовые аутентификации. Например, следующий вход предоставляет имя пользователя и пароль для доступа к myservice:

"input" : {
  "http" : {
    "request" : {
      "host" : "host.domain",
      "port" : 9200,
      "path" : "/myservice",
      "auth" : {
        "basic" : {
          "username" : "user",
          "password" : "pass"
        }
      }
    }
  }
}

Вы также можете передавать API-ключи и другую информацию, специфичную для службы, через атрибут params. Например, следующий вход http загружает текущий прогноз погоды для Амстердама со службы OpenWeatherMap:

"input" : {
  "http" : {
    "request" : {
      "url" : "http://api.openweathermap.org/data/2.5/weather",
      "params" : {
        "lat" : "52.374031",
        "lon" : "4.88969",
        "appid" : "<your openweathermap appid>"
      }
    }
  }
}

Использование шаблонов

Вход http поддерживает шаблоны. Вы можете использовать шаблоны при указании path, body, значений заголовков и значений параметров.

Например, следующий фрагмент использует шаблоны для указания индекса для запроса и ограничения результатов документами, добавленными в течение последних пяти минут:

"input" : {
  "http" : {
    "request" : {
      "host" : "host.domain",
      "port" : 9200,
      "path" : "/{{ctx.watch_id}}/_search",
      "body" : "{\"query\" : {\"range\": {\"@timestamp\" : {\"from\": \"{{ctx.trigger.triggered_time}}||-5m\",\"to\": \"{{ctx.trigger.triggered_time}}\"}}}}"
      }
    }
  }

Доступ к ответу HTTP

Если тело ответа отформатировано в формате JSON или YAML, оно анализируется и загружается в контекст выполнения. Если тело ответа не отформатировано в формате JSON или YAML, оно загружается в поле _value полезной нагрузки.

Условия, преобразования и действия получают доступ к данным ответа через контекст выполнения. Например, если ответ содержит объект message, вы можете использовать ctx.payload.message для доступа к данным сообщения.

Кроме того, ко всем заголовкам из ответа можно получить доступ, используя поле ctx.payload._headers, а также код HTTP-статуса ответа с помощью ctx.payload._status_code.

Атрибуты ввода HTTP

Имя Обязательно По умолчанию Описание

request.scheme

нет

http

Схема URL. Допустимые значения: http или https.

request.host

да

-

Хост для подключения.

request.port

да

-

Порт, на котором прослушивается служба http.

request.path

нет

-

Путь URL. Путь может быть статическим текстом или содержать mustache шаблоны. Параметры строки запроса URL необходимо указать через атрибут request.params.

request.method

нет

get

Метод HTTP. Поддерживаемые значения: head, get, post, put и delete.

request.headers

нет

-

Заголовки HTTP-запроса. Значения заголовков могут быть статическим текстом или включать в себя mustache шаблоны.

request.params

нет

-

Параметры строки запроса URL. Значения параметров могут быть статическим текстом или содержать mustache шаблоны.

request.url

нет

-

Позволяет задать request.scheme, request.host, request.port и request.params, задав реальный URL, например, https://www.example.org:1234/mypath?foo=bar. Не может быть комбинирован с одним из этих четырех параметров. После установки этих параметров, их индивидуальное указание может перезаписать их значения.

request.auth.basic.username

нет

-

Имя пользователя для аутентификации HTTP Basic.

request.auth.basic.password

нет

-

Пароль для аутентификации HTTP Basic.

request.proxy.host

нет

-

Хост прокси для подключения к хосту.

request.proxy.port

нет

-

Порт прокси для подключения к хосту.

request.connection_timeout

нет

10с

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

request.read_timeout

нет

10с

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

request.body

нет

-

Тело HTTP-запроса. Тело может быть статическим текстом или включать в себя mustache шаблоны.

extract

нет

-

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

response_content_type

нет

json

Ожидаемый тип содержимого, который будет содержать тело ответа. Поддерживаемые значения: json, yaml и text. Если формат text, атрибут extract не может существовать. Обратите внимание, что это переопределяет заголовок, возвращаемый в ответе HTTP. Если это установлено как text, тело ответа будет назначено и доступно через переменную _value полезной нагрузки.

При указании значений path, params, headers и body можно использовать следующие переменные в контексте выполнения:

Имя Описание

ctx.watch_id

Идентификатор наблюдения, который выполняется в данный момент.

ctx.execution_time

Время начала выполнения этого наблюдения.

ctx.trigger.triggered_time

Время срабатывания этого наблюдения.

ctx.trigger.scheduled_time

Время, когда это наблюдение должно было сработать.

ctx.metadata.*

Любые метаданные, связанные с наблюдением.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/input-http.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API