Logstash使用grok解析IIS日志

Logstash使用grok解析IIS日志

1. 安裝配置

安裝Logstash前請確認Elasticsearch已經(jīng)安裝正確,參見RedHat6.4安裝Elasticsearch5.2.0源哩。
下載鏈接為:logstash-5.2.0.rpm氛濒。
下載完成后,rpm -i logstash-5.2.0.rpm即可安裝侣颂。
Logstash默認的配置文件位置為./config/etc/logstash/,后者已經(jīng)存在,但直接運行依然會報錯:

WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs to console

簡單起見陌粹,直接在Logstash根目錄創(chuàng)建軟鏈接即可:

cd /usr/share/logstash
ln -s /etc/logstash ./config

設(shè)置配置文件實時生效,從而不用頻繁地啟停Logstash福压。修改/etc/logstash/logstash.yml
config.reload.automatic: true

2. 運行

與Elasticsearch掏秩、Kibana不同,Logstash默認并不作為系統(tǒng)服務(wù)安裝荆姆,我們也不建議作為服務(wù)啟動蒙幻。主要原因為:大多數(shù)情況下,Elasticsearch胆筒、Kibana在每臺服務(wù)器上只有一個實例邮破,可以作為服務(wù)啟動;而一個Logstash實例一般只服務(wù)于一個數(shù)據(jù)流腐泻,因此一臺服務(wù)器上經(jīng)常運行多個實例决乎。
編寫一個配置文件helloworld.conf進行測試。注意派桩,不要把該文件放在/etc/logstash/conf.d下构诚,以避免不同實例間產(chǎn)生混淆,因為該文件夾是Logstash默認讀取的文件夾铆惑。簡單起見范嘱,可直接放在Logstash根目錄下送膳。

input { 
    stdin {} 
}
output { 
    stdout {}
}

這是一個命令行輸入、命令行輸出的Logstash實例丑蛤,運行成功則說明已配置正確:
bin/logstash -f helloworld.conf
雖然如此叠聋,很多時候我們還是希望各個Logstash實例能隨系統(tǒng)而啟動并在后臺運行。將其加入計劃任務(wù)即可:
@reboot nohup /usr/share/logstash/bin/logstash -f /usr/share/logstash/helloworld.conf > /dev/null &

3. grok filter解析IIS日志

Logstash處理日志的核心部分是各種各樣的filter插件受裹,其中最強大的是grok碌补。在這里不得不吐槽一下,我工作中最常用的語言是Python棉饶,做個網(wǎng)頁常用Javascript厦章,最近為了Hadoop家族又把Java撿起來了。而grok filter只支持Ruby照藻,難不成就為這個grok filter還得再學(xué)個Ruby……
幸好袜啃,grok可以通過自定義正則表達式進行拓展,結(jié)合其他基本filter幸缕,基本可以解決常見的日志群发。grok內(nèi)置的正則表達式位于:/usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.0.2/patterns/,可以逐個文件查看发乔,看看有沒有可用的正則表達式熟妓。
IIS日志的格式舉例如下,實際中的字段隨IIS服務(wù)器的配置而不同:

#Fields: date time c-ip cs-username s-ip s-port cs-method cs-uri-stem cs-uri-query sc-status sc-win32-status sc-bytes cs-bytes time-taken cs-version cs-host cs(User-Agent) cs(Referer)
2010-07-30 01:06:43 192.168.0.102 - 192.168.0.102 80 GET /css/rss.xslt - 304 0 140 358 0 HTTP/1.1 www.mvpboss1004.com Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+Trident/4.0;+InfoPath.2;+360SE) -

grok-patterns文件中列疗,有我們需要的基本正則表達式滑蚯。編輯iis文件,放在patterns文件夾下:

IIS_LOG %{TIMESTAMP_ISO8601:@timestamp} %{IP:c_ip} %{NOTSPACE:cs_username} %{IP:s_ip} %{NUMBER:s_port} %{WORD:cs_method} %{URIPATH:cs_uri_stem} %{NOTSPACE:cs_uri_query} %{NUMBER:sc_status} %{NUMBER:sc_winstatus} %{NUMBER:sc_bytes} %{NUMBER:cs_bytes} %{NUMBER:time_taken} %{NOTSPACE:cs_version} %{NOTSPACE:cs_host} %{NOTSPACE:cs_useragent} %{NOTSPACE:cs_referer}

通過引用已有的正則表達式抵栈,我們可以構(gòu)建復(fù)雜的正則表達式,語法為%{REGEXP:fieldname}坤次,從而將一條IIS日志解析成17個字段古劲。而且,IIS_LOG這個正則表達式也可以被別的正則表達式引用缰猴,只需將其放在patterns文件夾下产艾。
在運行前,可以在grok debugger上調(diào)試正則表達式滑绒,以確保其正確性闷堡。
修改helloworld.conf

input {
    stdin {
    }
}
filter {
    grok {
        match => { "message" => "%{IIS_LOG}" }
    }
}
output { 
    stdout {
        codec => rubydebug
    }
}

再次運行并將上述IIS日志樣例輸入到命令行,可以得到解析結(jié)果:

mvpboss1004@mvpboss1004-MIIX-700:/usr/share/logstash$ sudo bin/logstash -f helloworld.conf 
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
The stdin plugin is now waiting for input:
2010-07-30 01:06:43 192.168.0.102 - 192.168.0.102 80 GET /css/rss.xslt - 304 0 140 358 0 HTTP/1.1 www.mvpboss1004.com Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+Trident/4.0;+InfoPath.2;+360SE) -
{
      "cs_version" => "HTTP/1.1",
          "s_port" => "80",
       "cs_method" => "GET",
            "s_ip" => "192.168.0.102",
         "cs_host" => "www.mvpboss1004.com",
        "cs_bytes" => "358",
    "cs_useragent" => "Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+Trident/4.0;+InfoPath.2;+360SE)",
     "cs_uri_stem" => "/css/rss.xslt",
         "message" => "2010-07-30 01:06:43 192.168.0.102 - 192.168.0.102 80 GET /css/rss.xslt - 304 0 140 358 0 HTTP/1.1 www.mvpboss1004.com Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+Trident/4.0;+InfoPath.2;+360SE) -",
            "c_ip" => "192.168.0.102",
      "time_taken" => "0",
    "cs_uri_query" => "-",
       "sc_status" => "304",
      "@timestamp" => 2017-02-09T15:37:19.384Z,
        "sc_bytes" => "140",
        "@version" => "1",
            "host" => "mvpboss1004-MIIX-700",
     "cs_username" => "-",
    "sc_winstatus" => "0",
      "cs_referer" => "-"
}

4. 輸出到Elasticsearch

現(xiàn)在已經(jīng)驗證了解析的正確性疑故,我們將輸出從stdout改為elasticsearch杠览。生產(chǎn)環(huán)境中,還需要考慮以下問題:

  • 輸出中帶有一些Logstash附加的字段纵势,這是我們不一定需要的踱阿,需要將其過濾掉管钳;
  • message字段是原始的輸入日志,我們建議以以下方法進行處理:
  • 如果解析正確软舌,把結(jié)果放入mvpboss1004這一index才漆,并過濾掉message;
  • 如果解析錯誤佛点,把結(jié)果放入failure這一index醇滥,保留所有的字段以查找錯誤原因。

過濾的問題超营,可以使用mutate filter鸳玩。條件判斷的問題,grok會為解析失敗的日志打上_grokparsefailurede的標簽糟描,可以利用這一標簽判斷是否進行過濾及輸出的index怀喉。修改helloworld.conf

input {
    stdin {
    }
}
filter {
    grok {
        match => { "message" => "%{IIS_LOG}" }
    }
    if !([tags] and "_grokparsefailure" in [tags]) {
        mutate {
            remove_field => ["message", "@version", "host"]
        }
    }
}
output {
    if [tags] and "_grokparsefailure" in [tags] {
        elasticsearch {
            hosts => ["99.1.36.164"]
            index => "failure"
            document_type => "iislog"
        }
    } else {
        elasticsearch {
            hosts => ["99.1.36.164"]
            index => "mvpboss1004"
            document_type => "iislog"
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市船响,隨后出現(xiàn)的幾起案子躬拢,更是在濱河造成了極大的恐慌,老刑警劉巖见间,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聊闯,死亡現(xiàn)場離奇詭異,居然都是意外死亡米诉,警方通過查閱死者的電腦和手機菱蔬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來史侣,“玉大人拴泌,你說我怎么就攤上這事【鳎” “怎么了蚪腐?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長税朴。 經(jīng)常有香客問我回季,道長,這世上最難降的妖魔是什么正林? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任泡一,我火速辦了婚禮,結(jié)果婚禮上觅廓,老公的妹妹穿的比我還像新娘鼻忠。我一直安慰自己,他們只是感情好哪亿,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布粥烁。 她就那樣靜靜地躺著贤笆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪讨阻。 梳的紋絲不亂的頭發(fā)上芥永,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音钝吮,去河邊找鬼埋涧。 笑死,一個胖子當著我的面吹牛奇瘦,可吹牛的內(nèi)容都是我干的棘催。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼耳标,長吁一口氣:“原來是場噩夢啊……” “哼醇坝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起次坡,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤呼猪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后砸琅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宋距,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年症脂,在試婚紗的時候發(fā)現(xiàn)自己被綠了谚赎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡诱篷,死狀恐怖壶唤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棕所,我是刑警寧澤规脸,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布洞渤,位于F島的核電站,受9級特大地震影響彭羹,放射性物質(zhì)發(fā)生泄漏笑撞。R本人自食惡果不足惜岛啸,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望茴肥。 院中可真熱鬧坚踩,春花似錦、人聲如沸瓤狐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嗓节,卻和暖如春荧缘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拦宣。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工截粗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鸵隧。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓绸罗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親豆瘫。 傳聞我的和親對象是個殘疾皇子珊蟀,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容