Правило уведомления Influx не отправляет HTTP-запрос.

Вопрос или проблема

У меня есть следующее правило уведомления:

curl -X POST http://influx:8086/api/v2/notificationRules -H "Authorization: Token <мой токен>" -H "Content-Type: application/json" -d '{
  "description": "Уведомление о скачках, обнаруженных в данных о трафике",
  "endpointID": "1261ec31969a7d96",                                
  "every": "15s",
  "messageTemplate": "Обнаружен скачок в {{ .Name }}: Последнее значение: {{ index .Fields \"last\" }}, Среднее: {{ index .Fields \"mean\" }}, Стандартное отклонение: {{ index .Fields \"stddev\" }}",
  "name": "правило_обнаружения_скачков",
  "orgID": "a6ce0bd763dc7a0b",
  "query": {
    "text": "option task = {name: \"spike_detection_task\", every: 15s}\n\nfrom(bucket: \"one_hour\")\n  |> range(start: -15m)\n  |> filter(fn: (r) => r._measurement == \"convs_traffic_over_time_15m\")\n  |> filter(fn: (r) => r._field == \"all_data\")\n  |> mean()\n  |> yield(name: \"mean\")\n  |> stddev()\n  |> yield(name: \"stddev\")\n  |> last()",
    "type": "flux"
  },
  "status": "active",
  "statusRules": [
    {
      "currentLevel": "OK"
    },
    {
      "currentLevel": "CRITICAL"
    }
  ],
  "type": "http"
}

Когда задача правила выполняется, она завершает выполнение успешно. Однако http POST-запрос не отправляется из influx. Конечная точка определена в уведомлении, для которой я указываю endpointID в скрипте. Данные в бакете ‘one_hour’ выглядят так:

Результат: _result
Таблица: ключи: [_start, _stop, _field, _measurement]
                   _start:время                      _stop:время           _field:строка          _measurement:строка                      _time:время                  _value:int
------------------------------  ------------------------------  ----------------------  ---------------------------  ------------------------------  --------------------------
2024-09-26T14:06:07.862164087Z  2024-09-26T15:06:07.862164087Z                all_data  convs_traffic_over_time_15m  2024-09-26T14:06:17.272195842Z                           0
Таблица: ключи: [_start, _stop, _field, _measurement]
                   _start:время                      _stop:время           _field:строка          _measurement:строка                      _time:время                  _value:int
------------------------------  ------------------------------  ----------------------  ---------------------------  ------------------------------  --------------------------
2024-09-26T14:06:07.862164087Z  2024-09-26T15:06:07.862164087Z                   count  convs_traffic_over_time_15m  2024-09-26T14:06:17.272195842Z                           0

Не хватает ли информации в бакете, чтобы задача правила сработала? Есть ли что-то неверное в моем скрипте правила? Логи influx не показывают никаких деталей о http POST-запросе. Любая помощь будет оценена.

Ответ или решение

Проблема, с которой вы столкнулись, заключается в том, что HTTP-запросы, связанные с вашим правилом уведомления в InfluxDB, не отправляются, несмотря на успешное выполнение задачи. Давайте разберем основные моменты, которые могут привести к этой ситуации, и предложим решения.

  1. Проверка Конфигурации Endpoint:
    Убедитесь, что настройки вашего HTTP-эндпоинта, связанного с endpointID: "1261ec31969a7d96", корректны. Убедитесь, что URL-адрес, на который вы отправляете запрос, доступен и правильно настроен для приема данных.

  2. Статус Правила:
    Ваше правило имеет статус active. Однако убедитесь, что оно действительно активно. Попробуйте временно изменить статус на inactive, а затем снова обратно на active, чтобы убедиться, что событие триггерится правильно.

  3. Состояние Данных в Бакете:
    Судя по представленной вами информации об этих данных, оба результата имеют значение _value равное 0. Если ваше правило основано на определенных критических уровнях, убедитесь, что триггеры действительно срабатывают. Вам необходимо проверить, что данные в бакете соответствуют условиям критического и предупреждающего уровней (currentLevel: "CRITICAL").

  4. Логи InfluxDB:
    Так как вы упомянули, что в логах InfluxDB нет информации о попытках отправки HTTP-запроса, возможно, стоит увеличить уровень подробности логирования. Это можно сделать в конфигурационном файле InfluxDB. После изменения настроек перезапустите сервер и проверьте логи на наличие ошибок или предупреждений.

  5. Тестирование Запроса:
    Проверьте, что ваш HTTP-запрос работает, используя инструмент вроде curl или Postman. Убедитесь, что конечная точка, на которую будет направлен запрос, действительно отвечает на запросы и может обрабатывать приходящие данные.

  6. Проверка Правил Уведомлений:
    Убедитесь, что все ваши условия для срабатывания уведомлений правильно настроены. Например, если вы ожидаете триггер при "Spike detected", то убедитесь, что логика фильтрации в Flux-запросе правильно настроена для определения такого состояния.

  7. Элементы Отладки:
    Возможно, вам стоит вставить отладочные сообщения или временные метки в ваш messageTemplate, чтобы видеть, когда именно генерируется уведомление. Это поможет вам удостовериться, что уведомления генерируются, но не отправляются.

Если после всех этих проверок вы по-прежнему сталкиваетесь с проблемой, рекомендуется обратиться к официальной документации InfluxDB о настройке уведомлений и задать вопрос на форумах сообщества, предоставив как можно больше информации о вашей конфигурации и проблемах.

Надеюсь, данные рекомендации помогут вам найти и устранить проблему. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...