Я использую плагин 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