Spec-Zone.ru › Elasticsearch 8
›Руководство по Elasticsearch [8.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>"
      }
    }
  }
}

Использование аутентификации на основе токенов

Вы также можете вызывать API, используя Bearer token вместо базовой аутентификации. Объект request.headers содержит HTTP-заголовки:

"input" : {
  "http" : {
    "request" : {
      "url": "https://api.example.com/v1/something",
      "headers": {
        "authorization" : "Bearer ABCD1234...",
        "content-type": "application/json"
        # other headers params..
        },
      "connection_timeout": "30s"
    }
  }
}

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

Вход 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/8.17/input-http.html

Spec-Zone.ru

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