Agent Telegraf Plugin inputs.logparser.grok 扩展patterns

初衷

系统中使用lua扩展Nginx,实现Client请求Server的统一接入服务(鉴权,路由)。
监控中心会需要对所有请求数据进行采集和监控,因此需要对nginx的access.log数据进行采集。

Telegraf Input logParser

github 地址

telegraf.plugin.inputs.logparser已经实现了数据的采集,使用起来非常方便。

但是存在一个问题,即telegraf.plugin.inputs.logparser中支持的LOG_FORMAT只有一种,即COMBINED_LOG_FORMAT,而我们实际使用时都会对nginx access.logLOG_FORMAT进行自定义;

为了符合自身的数据格式进行采集,有两种方式:

第一种,直接配置自定义patterns,见配置:

...
    ## Custom patterns can also be defined here. Put one pattern per line.
    custom_patterns = '''
    '''
...

范例:

[[inputs.logparser]]
  [inputs.logparser.grok]
    patterns = ["%{TS_UNIX:timestamp:ts-unix} value=%{NUMBER:value:int}"]
    custom_patterns = '''
      TS_UNIX %{DAY} %{MONTH} %{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND} %{TZ} %{YEAR}
    '''

第二种,需要对telegraf.plugin.inputs.logparser.grok进行扩展,在源码中增加patterns,我们这边因为存在自己的二开版本,因此选择了这种方式将自己用到的几种patterns增加到了源码中,接下来文章后面主要是该方法的过程。(如果非二开尽量选择第一种)

获取源码

  1. Install Go
  2. Setup your GOPATH
  3. Install FPM
  4. Run go get -d github.com/influxdata/telegraf
  5. Run cd $GOPATH/src/github.com/influxdata/telegraf

修改源码扩展

1. 修改代码 telegraf/plugins/inputs/logparser/grok/influx_patterns.go

const DEFAULT_PATTERNS = `

COMMON_LOG_FORMAT %{CLIENT:client_ip} %{NOTSPACE:ident} %{NOTSPACE:auth} \[%{HTTPDATE:ts:ts-httpd}\] "(?:%{WORD:verb:tag} %{NOTSPACE:request}(?: HTTP/%{NUMBER:http_version:float})?|%{DATA})" %{NUMBER:resp_code:tag} (?:%{NUMBER:resp_bytes:int}|-)

COMBINED_LOG_FORMAT %{COMMON_LOG_FORMAT} %{QS:referrer} %{QS:agent}

自定义

`

源码中定义了常量DEFAULT_PATTERNS,需要在这里自定义自己的LOG_FORMAT,通过空格隔开来和自己的access.log中LOG_FORMAT格式一一对应。

LOG_FORMAT匹配格式,通过正在进行匹配:%{IPORHOST:client_ip:tag}

  • %{} 为每一个变量
  • IPORHOST 正则表达式变量:logstash-patterns正则
  • client_ip 为采集数据字段命名,即:Metric.tag:{client_ip:127.0.0.1}
  • tag 范围取值范围如下,需要注意的是,tag是可以将字段存放在Metric.tag:{client_ip:127.0.0.1}中,其余都在Metric.fields:{client_ip:127.0.0.1}
- tag 
# Available modifiers:
#   string   (default if nothing is specified)
#   int
#   float
#   duration (ie, 5.23ms gets converted to int nanoseconds)
#   tag      (converts the field into a tag)
#   drop     (drops the field completely)
# Timestamp modifiers:
#   ts-ansic         ("Mon Jan _2 15:04:05 2006")
#   ts-unix          ("Mon Jan _2 15:04:05 MST 2006")
#   ts-ruby          ("Mon Jan 02 15:04:05 -0700 2006")
#   ts-rfc822        ("02 Jan 06 15:04 MST")
#   ts-rfc822z       ("02 Jan 06 15:04 -0700")
#   ts-rfc850        ("Monday, 02-Jan-06 15:04:05 MST")
#   ts-rfc1123       ("Mon, 02 Jan 2006 15:04:05 MST")
#   ts-rfc1123z      ("Mon, 02 Jan 2006 15:04:05 -0700")
#   ts-rfc3339       ("2006-01-02T15:04:05Z07:00")
#   ts-rfc3339nano   ("2006-01-02T15:04:05.999999999Z07:00")
#   ts-httpd         ("02/Jan/2006:15:04:05 -0700")
#   ts-epoch         (seconds since unix epoch)
#   ts-epochnano     (nanoseconds since unix epoch)
#   ts-"CUSTOM"

2. 修改配置

  • 修改配置文件:telegraf/etc/telegraf.conf
  • 找到[inputs.logparser.grok]的配置,在注释中加入自定义的格式化变量名,方便配置时使用,例如:
telegraf.conf
... ...
#     ##   %{COMMON_LOG_FORMAT}   (plain apache & nginx access logs)
#     ##   %{COMBINED_LOG_FORMAT} (access logs + referrer & agent)
#     ##   ${CUSTOM_LOG_FORMAT}   (自定义LOG_FORMAT)
... ...

重新打包 telegraf

  1. Install FPM
  2. Run
#这里因为不需要打出所有操作系统的安装包,因此使用添加参数
./scripts/build.py --clean --package --version="1.3.5-custom-1.2" --platform=linux --arch=amd64

或者

默认全量打包( ["amd64", "i386", "armhf", "armel", "arm64", "static_amd64"],[ "deb", "rpm", "tar" ])

make package

获得新的安装包

  1. 路径:build/telegraf-1.3.5-xx-1.2~7192e68_linux_amd64.tar.gz

你可能感兴趣的:(Agent Telegraf Plugin inputs.logparser.grok 扩展patterns)