Включение дополнительных измерений с помощью плагина Telegraf input.logparser с использованием паттернов "grok" (или regex) - PullRequest
0 голосов
/ 09 января 2020

Я использую плагин telegraf [[input.logparser]] для получения данных access_log из Apache, основанных на локальной веб-странице, с которой я работаю.

Используя ["%{COMBINED_LOG_FORMAT}"] шаблоны, я могу чтобы получить измерения по умолчанию, предоставленные access_logs, включая http_version, request, resp_bytes et c.

Я добавил «Формат журнала» в файле httpd.conf, чтобы включить дополнительное «Время отклика» для каждого запроса access_log записей с %D в конце, это было успешно, когда я смотрю на access_log после реализации.

Однако я пока не могу успешно сказать Telegraf подтвердить это новое измерение с помощью input.logparser - я использую панель мониторинга grafana с InfluxDB для мониторинга этих данных, и она еще не появилась как дополнительное измерение.

До сих пор я пытался сделать следующее:

Первый раздел [[input.logparser]] остается неизменным на протяжении всех моих попыток и всегда присутствует / активен, это кажется правильным по порядку быть в состоянии получить измерения по умолчанию?

######## default logparser using COMBINED to obtain default access_log measurements ######
# Stream and parse log file(s).
[[inputs.logparser]]
  files = ["/var/log/httpd/access_log"]
  from_beginning = true

  ## Parse logstash-style "grok" patterns:
  [inputs.logparser.grok]

    patterns = ["%{COMBINED_LOG_FORMAT}"
    measurement = "apache_access_log"
    custom_patterns = '''
    '''

Попытка 1 при совпадении времени отклика, добавленного к access_log:

############# Grok/RegEx for matching response time ######################
# Stream and parse log file(s).
[[inputs.logparser]]
  ## Log files to parse.
  files = ["/var/log/httpd/access_log"]
  from_beginning = true

  ## Parse logstash-style "grok" patterns:
  [inputs.logparser.grok]
    patterns = ["%{METRICS_INCLUDE_RESPONSE}"]

    measurement = "apache_access_log"
    custom_patterns = '''
    METRICS_INCLUDE_RESPONSE [%{NUMBER:resp}]
    '''

И моя вторая попытка я подумал попробовать нормальные регулярные выражения

############# Grok/RegEx for matching response time ######################
# Stream and parse log file(s).
[[inputs.logparser]]
  ## Log files to parse.
  files = ["/var/log/httpd/access_log"]
  from_beginning = true

  ## Parse logstash-style "grok" patterns:
  [inputs.logparser.grok]
    patterns = ["%{METRICS_INCLUDE_RESPONSE}"]   
    measurement = "apache_access_log"
    custom_patterns = '''
    METRICS_INCLUDE_RESPONSE [%([0-9]{1,3})]
    '''

После Обе эти попытки, измерения по умолчанию все еще записываются и считываются Telegraf, но время отклика не отображается как дополнительное измерение.

Я полагаю, что проблема заключается в синтаксисе в моем пользовательском шаблоне grok, и что он не соответствует, как я предполагал, потому что я не говорю, чтобы он извлекал правильную информацию? Но я не уверен.

Я привел пример вывода access_log ниже, ВСЕ детали извлекаются из Telegraf без проблем в COMBINED_LOG_FORMAT, за исключением числа в конце, которое представляет время ответа.

10.30.20.32 - - [09/Jan/2020:11:08:14 +0000] "POST /404.php HTTP/1.1" 200 252 "http://10.30.10.77/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36" 600
10.30.20.32 - - [09/Jan/2020:11:08:15 +0000] "POST /boop.html HTTP/1.1" 200 76 "http://10.30.10.77/404.php" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36" 472

1 Ответ

0 голосов
/ 14 апреля 2020

Вы существенно расширяете заранее определенный шаблон. Таким образом, шаблон должен быть написан примерно так (при условии, что ваше значение времени ответа находится в квадратных скобках в журнале):

######## default logparser using COMBINED to obtain default access_log measurements ######
# Stream and parse log file(s).
[[inputs.logparser]]
  files = ["/var/log/httpd/access_log"]
  from_beginning = true

  ## Parse logstash-style "grok" patterns:
  [inputs.logparser.grok]
    patterns = ["%{COMBINED_LOG_FORMAT} \\[%{NUMBER:responseTime:float}\\]"]
    measurement = "apache_access_log"
    custom_patterns = '''
    '''

Вы получите значение времени ответа в метри c с именем 'responseTime' в типе данных с плавающей точкой.

...