包括使用“ grok”模式(或正则表达式)的Telegraf插件inputs.logparser进行的其他测量

问题描述 投票:0回答:1

[我正在使用telegraf插件[[inputs.logparser]]根据我正在运行的本地网页从Apache获取access_log数据。

使用["%{COMBINED_LOG_FORMAT}"]模式,我能够检索access_logs提供的默认度量,包括http_version,request,resp_bytes等。>>

[我在httpd.conf文件中附加了“日志格式”,以在每个请求的结尾处添加额外的“响应时间”,并以%D开头,这在我在实现后查看access_log时是成功的。 >

但是,到目前为止,我无法成功地告诉Telegraf使用inputs.logparser确认这项新的测量-我正在使用带有InfluxDB的grafana仪表板来监视此数据,并且它还没有作为额外的测量出现。

到目前为止,我尝试了以下操作:

第一个[[inputs.logparserser]]部分在我的所有尝试中都保持不变,并且始终存在/处于活动状态,为了获得默认测量值,这似乎是正确的吗?

######## 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 = '''
    '''

在与附加到access_log的响应时间匹配时尝试1:

############# 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

我正在使用telegraf插件[[inputs.logparser]]根据我运行的本地网页从Apache获取access_log数据。使用[“%{COMBINED_LOG_FORMAT}”]模式,我可以检索...

regex apache grok telegraf
1个回答
0
投票

您实质上是在扩展预定义的模式。因此,模式应该这样写(假设您的响应时间值在日志的方括号内):

######## 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 = '''
    '''
© www.soinside.com 2019 - 2024. All rights reserved.