Плагин collectd tail ExcludeRegex не работает

Шаг 1.

LoadPlugin tail

<Plugin "tail">
  <File "/etc/nginx/access.log">
    <Match>
      Regex "HTTP/1..\" 4"
      ExcludeRegex "HTTP/1..\" 404"
      ExcludeRegex "HTTP/1..\" 499"
      DSType "CounterInc"
      Type "counter"
      Instance "4xx-excluded-404-and-499"
    </Match>
  </File>
</Plugin>

Я использую collectd версии 5.5.0. Затем мы попытались собрать метрики для кода состояния журнала доступа Nginx с помощью плагина collectd tail. Однако, если вы попытаетесь использовать ExcludeRegex "HTTP/1..\" 404 и ExcludeRegex "HTTP/1..\" 499 "как указано выше, ExcludeRegex "HTTP/1..\" 499" будет работать и ExcludeRegex 404 не будет работать.

Я обнаружил, что он хорошо работает, создавая отдельные совпадения отдельно и используя соответствующий ExcludeRegex. Следующее работает хорошо.

LoadPlugin tail

<Plugin "tail">
  <File "/etc/nginx/access.log">
    <Match>
      Regex "HTTP/1..\" 4"
      ExcludeRegex "HTTP/1..\" 404"
      DSType "CounterInc"
      Type "counter"
      Instance "4xx-excluded-404"
    </Match>
    <Match>
      Regex "HTTP/1..\" 4"
      ExcludeRegex "HTTP/1..\" 499"
      DSType "CounterInc"
      Type "counter"
      Instance "4xx-excluded-499"
    </Match>
  </File>
</Plugin>

Однако эти двое не работали, если они были в одном матче.

Кроме того, содержимое файла access.log соответствует шаблонам.

127.0.0.1 - - [01/Dec/2016:18:44:15 +0900]  "GET /v3/intro HTTP/1.1" 200
127.0.0.1 - - [01/Dec/2016:18:44:15 +0900]  "GET /v3/intro HTTP/1.1" 404
127.0.0.1 - - [01/Dec/2016:18:44:15 +0900]  "GET /v3/intro HTTP/1.1" 499

Шаг 2.

<Plugin "tail">
  <File "/etc/nginx/access.log">
    <Match>
      Regex "HTTP/1..\" 4"
      ExcludeRegex "healthcheck"
      ExcludeRegex "HTTP/1..\" 499"
      DSType "CounterInc"
      Type "counter"
      Instance "4xx-excluded-404-and-499"
    </Match>
  </File>
</Plugin>

Во-вторых, я попытался протестировать collectd с приведенной выше конфигурацией. На этот раз я подтвердил, что многострочный ExcludeRegex применяется хорошо. Так вот, я думаю, что если в нем тот же Regex, подозреваю, что может возникнуть проблема.

Почему это не работает? Помоги мне.

Спасибо.


person dark    schedule 02.12.2016    source источник


Ответы (1)


Ниже приведен ответ с github.

спасибо, что сообщили об этом. Однако это ожидаемое поведение, и оно работает так, как задумано: может быть только одна настройка ExcludeRegex, и если их больше, то более поздние перезаписывают предыдущие настройки.

Вы можете использовать оператор регулярного выражения ИЛИ, |, поэтому достигните своей цели:

ExcludeRegex "HTTP/1..\" 404|HTTP/1..\" 404"

Или, короче:

ExcludeRegex "HTTP/1..\" (404|499)"

С наилучшими пожеланиями,

person dark    schedule 08.12.2016