官术网_书友最值得收藏!

3.2 Nginx錯誤日志

Nginx錯誤日志是運維人員最常見但又極其容易忽略的日志類型之一。本節介紹對Nginx錯誤日志的處理方式,并推薦讀者在性能優化中對此多加關注。Nginx錯誤日志既沒有統一明確的分隔符,也沒有特別方便的正則模式,但通過Logstash不同插件的組合,還是可以輕松進行數據處理的。

值得注意的是,Nginx錯誤日志中有一類數據是接收過大請求體時的報錯,默認信息會把請求體的具體字節數記錄下來。每次請求的字節數基本都是在變化的,這意味著常用的topN等聚合函數對該字段沒有明顯效果。所以,對此需要做一下特殊處理。

最后形成的Logstash配置如下所示:

filter {
    grok {
        match => { “message” =>“(?<datetime>\d\d\d\d/\d\d/\d\d \d\d:\d\d:\d\d)
            \[(?<errtype>\w+)\] \S+: \*\d+ (?<errmsg>[^,]+), (?<errinfo>.*)$” }
    }
    mutate {
        rename => [ “host”, “fromhost” ]
        gsub => [ “errmsg”, “too large body: \d+ bytes”, “too large body” ]
    }
    if [errinfo]
    {
        ruby {
            code =>“event.append(Hash[event['errinfo'].split(‘, ’)。map{|l| l.split
            (‘: ’)}])”
        }
    }
    grok {
        match => { “request” => ‘“%{WORD:verb} %{URIPATH:urlpath}(?:\?%{NGX_
            URIPARAM:urlparam})?(?: HTTP/%{NUMBER:httpversion})”' }
        patterns_dir =>“/etc/logstash/patterns”
        remove_field => [ “message”, “errinfo”, “request” ]
    }
}

經過以上Logstash配置的Nginx錯誤日志生成的事件如下所示:

{“@version”: “1”,“@timestamp”: “2015-07-02T01:26:40.000Z”,“type”: “nginx-error”,“errtype”: “error”,“errmsg”: “client intended to send too large body”,“fromhost”: “web033.mweibo.yf.sinanode.com”,“client”: “36.16.7.17”,“server”: “api.v5.weibo.cn”,“host”: “\”api.weibo.cn\“”,“verb”: “POST”,“urlpath”: “/2/client/addlog_batch”,“urlparam”: “gsid=_2A254UNaSDeTxGeRI7FMX9CrEyj2IHXVZRG1arDV6PUJbrdANLROskWp9b
    XakjUZM5792FW9A5S9EU4jxqQ&wm=3333_2001&i=0c6f156&b=1&from=1053093010&c=
    iphone&v_p=21&skin=default&v_f=1&s=8f14e573&lang=zh_CN&ua=iPhone7,1__weibo__
    5.3.0__iphone__os8.3”,“httpversion”: “1.1”
}
主站蜘蛛池模板: 樟树市| 舒兰市| 靖西县| 府谷县| 武穴市| 崇阳县| 定兴县| 金川县| 富裕县| 沙雅县| 双鸭山市| 凌云县| 桃园县| 峡江县| 临朐县| 磐安县| 绥江县| 灌阳县| 大庆市| 景宁| 崇左市| 凤山县| 金华市| 彭阳县| 黄大仙区| 子长县| 灵石县| 北碚区| 五莲县| 云安县| 益阳市| 双鸭山市| 公安县| 海兴县| 文登市| 蕉岭县| 仪征市| 卓资县| 嘉义县| 平昌县| 青田县|