Spec-Zone.ru › Elasticsearch 7
›Elasticsearch Guide [7.17] ›Watcher

Действия Watcher

Когда выполняется условие проверки (watch), её действия выполняются, если проверка не заблокирована. Проверка может выполнять несколько действий. Действия выполняются по одному, и каждое действие выполняется независимо. Любые ошибки при выполнении действия записываются в результат действия и в историю проверки.

Если для проверки не определены действия, то действия не выполняются. Однако, запись о watch_record всё равно записывается в историю проверки.

Действия имеют доступ к данным в контексте выполнения. Они могут использовать их для поддержки своего выполнения любым необходимым способом. Например, данные могут служить моделью для шаблонизированного тела письма.

Watcher поддерживает следующие действия:

  • email
  • webhook
  • index
  • logging
  • slack
  • pagerduty

Подтверждение и ограничение скорости

Во время выполнения проверки, после того как условие выполнено, принимается решение о необходимости ограничения скорости выполнения для каждого действия в соответствии с настройками. Основная цель ограничения скорости действий — предотвратить слишком много выполнений одного и того же действия для одной и той же проверки.

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

Для решения этой проблемы Watcher поддерживает ограничение скорости на основе времени. Вы можете определить период ограничения скорости как часть конфигурации действия, чтобы ограничить частоту выполнения действия. Когда вы устанавливаете период ограничения скорости, Watcher предотвращает повторное выполнение действия, если оно уже было выполнено в течение заданного периода времени (now - throttling period).

Следующий фрагмент кода показывает проверку для описанного выше сценария — привязку периода ограничения скорости к действию email_administrator:

PUT _watcher/watch/error_logs_alert
{
  "metadata" : {
    "color" : "red"
  },
  "trigger" : {
    "schedule" : {
      "interval" : "5m"
    }
  },
  "input" : {
    "search" : {
      "request" : {
        "indices" : "log-events",
        "body" : {
          "size" : 0,
          "query" : { "match" : { "status" : "error" } }
        }
      }
    }
  },
  "condition" : {
    "compare" : { "ctx.payload.hits.total" : { "gt" : 5 }}
  },
  "actions" : {
    "email_administrator" : {
      "throttle_period": "15m", 
      "email" : { 
        "to" : "sys.admino@host.domain",
        "subject" : "Encountered {{ctx.payload.hits.total}} errors",
        "body" : "Too many error in the system, see attached data",
        "attachments" : {
          "attached_data" : {
            "data" : {
              "format" : "json"
            }
          }
        },
        "priority" : "high"
      }
    }
  }
}

Между последующими запусками действия email_administrator будет по крайней мере 15 минут.

См. действие по электронной почте для получения дополнительной информации.

Вы также можете определить период ограничения скорости на уровне проверки. Период ограничения скорости на уровне проверки служит значением по умолчанию для всех действий, определенных в проверке:

PUT _watcher/watch/log_event_watch
{
  "trigger" : {
    "schedule" : { "interval" : "5m" }
  },
  "input" : {
    "search" : {
      "request" : {
        "indices" : "log-events",
        "body" : {
          "size" : 0,
          "query" : { "match" : { "status" : "error" } }
        }
      }
    }
  },
  "condition" : {
    "compare" : { "ctx.payload.hits.total" : { "gt" : 5 }}
  },
  "throttle_period" : "15m", 
  "actions" : {
    "email_administrator" : {
      "email" : {
        "to" : "sys.admino@host.domain",
        "subject" : "Encountered {{ctx.payload.hits.total}} errors",
        "body" : "Too many error in the system, see attached data",
        "attachments" : {
          "attached_data" : {
            "data" : {
              "format" : "json"
            }
          }
        },
        "priority" : "high"
      }
    },
    "notify_pager" : {
      "webhook" : {
        "method" : "POST",
        "host" : "pager.service.domain",
        "port" : 1234,
        "path" : "/{{watch_id}}",
        "body" : "Encountered {{ctx.payload.hits.total}} errors"
      }
    }
  }
}

Между последующими запусками действий будет по крайней мере 15 минут (применимо как к действию email_administrator, так и к действию notify_pager)

Если вы не определите период ограничения скорости на уровне действия или проверки, будет применено глобальное значение по умолчанию. Изначально оно установлено в 5 секунд. Чтобы изменить глобальное значение по умолчанию, настройте параметр xpack.watcher.execution.default_throttle_period в elasticsearch.yml:

xpack.watcher.execution.default_throttle_period: 15m

Watcher также поддерживает ограничение скорости на основе подтверждения. Вы можете подтвердить проверку с помощью API подтверждения проверки API подтверждения проверки, чтобы предотвратить повторное выполнение действий проверки, пока условие проверки остается true. Это в сущности означает "Я получил уведомление и обрабатываю его, пожалуйста, не уведомляйте меня об этой ошибке снова". Действие подтверждённой проверки сохраняется в состоянии acked, пока условие проверки не примет значение false. В этом случае состояние действия меняется на awaits_successful_execution.

Для подтверждения действия используйте API подтверждения проверки:

POST _watcher/watch/<id>/_ack/<action_ids>

Где <id> — идентификатор проверки, а <action_ids> — список идентификаторов действий, которые вы хотите подтвердить, разделённых запятыми. Чтобы подтвердить все действия, опустите параметр actions.

На следующей диаграмме показаны решения по ограничению скорости для каждого действия проверки во время её выполнения:

action throttling

Использование SSL/TLS с OpenJDK

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

Это может привести к проблемам с любым действием или вводом, использующим TLS, например, с jira, pagerduty, slack или webhook из-за отсутствия сертификатов доверенных центров. Если вы столкнулись с ошибками TLS при написании проверок, подключающихся к TLS-точкам, попробуйте обновить до последнего доступного дистрибутива OpenJDK для вашей платформы, а если это не поможет, попробуйте обновить до Oracle JDK.

© 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/actions.html

Spec-Zone.ru

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