Agent Telegraf Plugin inputs.logparser.grok 擴(kuò)展patterns

初衷

系統(tǒng)中使用lua擴(kuò)展Nginx,實(shí)現(xiàn)Client請(qǐng)求Server的統(tǒng)一接入服務(wù)(鑒權(quán),路由)。
監(jiān)控中心會(huì)需要對(duì)所有請(qǐng)求數(shù)據(jù)進(jìn)行采集和監(jiān)控,因此需要對(duì)nginx的access.log數(shù)據(jù)進(jìn)行采集。

Telegraf Input logParser

github 地址

telegraf.plugin.inputs.logparser已經(jīng)實(shí)現(xiàn)了數(shù)據(jù)的采集,使用起來非常方便。

但是存在一個(gè)問題,即telegraf.plugin.inputs.logparser中支持的LOG_FORMAT只有一種,即COMBINED_LOG_FORMAT,而我們實(shí)際使用時(shí)都會(huì)對(duì)nginx access.logLOG_FORMAT進(jìn)行自定義;

為了符合自身的數(shù)據(jù)格式進(jìn)行采集,有兩種方式:

第一種,直接配置自定義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}
    '''

第二種,需要對(duì)telegraf.plugin.inputs.logparser.grok進(jìn)行擴(kuò)展,在源碼中增加patterns,我們這邊因?yàn)榇嬖谧约旱亩_版本,因此選擇了這種方式將自己用到的幾種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

修改源碼擴(kuò)展

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格式一一對(duì)應(yīng)。

LOG_FORMAT匹配格式,通過正在進(jìn)行匹配:%{IPORHOST:client_ip:tag}

  • %{} 為每一個(gè)變量
  • IPORHOST 正則表達(dá)式變量:logstash-patterns正則
  • client_ip 為采集數(shù)據(jù)字段命名,即: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]的配置,在注釋中加入自定義的格式化變量名,方便配置時(shí)使用,例如:
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
#這里因?yàn)椴恍枰虺鏊胁僮飨到y(tǒng)的安裝包,因此使用添加參數(shù)
./scripts/build.py --clean --package --version="1.3.5-custom-1.2" --platform=linux --arch=amd64

或者

默認(rèn)全量打包( ["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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • =========================================================...
    lavor閱讀 3,647評(píng)論 0 5
  • 八月里的一天,小二把常四打了,聽說打了三巴掌,呼的常四眼冒金星,上午十點(diǎn)多鐘,血站的院子里圍滿了看熱鬧的...
    潮濕的心_ecbc閱讀 357評(píng)論 0 0
  • 今天想買一個(gè)魚
    人龍騰閱讀 258評(píng)論 0 0

友情鏈接更多精彩內(nèi)容