日誌系統ELK使用詳解(二)--Logstash安裝和使用

概述

日誌系統ELK使用詳解(一)–如何使用
日誌系統ELK使用詳解(二)–Logstash安裝和使用
日誌系統ELK使用詳解(三)–elasticsearch安裝
日誌系統ELK使用詳解(四)–kibana安裝和使用
日誌系統ELK使用詳解(五)–補充

在開始之前先說一下Logstash的使用和熟悉路線圖。接觸ELK的時候不能圖快,可以嘗試着一部分一部分的安裝起來熟悉,之後再逐個組裝到一起,看效果。

Logstash的獨立性很高,熟悉路線可以按照這樣來:

1.最基本的就是接收控制檯輸入,然後解析輸出到控制檯。
2.從文件讀入,解析輸出到控制檯。
3.從文件讀入,解析輸出到elasticsearch。
4.實際應用中需要打通的關節。

接下來一起看一下Logstash,這個系列使用的版本(Logstash5.3.0)下載地址是:https://www.elastic.co/cn/downloads

安裝

1.安裝JDK 1.8.0_65
2.下載logstash5.3.0
3.解壓logstash

控制檯—》控制檯

1.在…/logstash-5.3.0/bin/目錄中新建一個文件std_std.conf文件
2.錄入如下內容:

input {
    stdin{
    }
} 

output {
    stdout{
    }
}

3.在bin目錄執行命令:./logstash -f std_std.conf
4.稍等片刻,看到如下信息,說明啓動完成了:

這裏寫圖片描述

5.輸入hello logstash!!!!,logash會在控制檯回寫出來這條信息:

這裏寫圖片描述

文件—-》控制檯

這裏使用的文件是tomcat輸出的access日誌文件,很常見,內容如下:

111.206.36.140 - - [10/Aug/2016:23:16:29 +0800] "GET /nggirl-web/web/admin/work/special/listSelectedWork/v1.4.0?workIds=780 HTTP/1.1" 200 78 "http://www.baidu.com/s?wd=www" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"
111.206.36.140 - - [10/Aug/2016:23:16:29 +0800] "GET /nggirl-web/web/admin/work/special/listSelectedWork/v1.4.0?workIds=780 HTTP/1.1" 200 78 "http://www.baidu.com/s?wd=www" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"

1.在bin目錄新建file_std.conf文件;
2.內容如下:

input{
    file{
        path =>"/Develop/Tools/apache-tomcat-8.0.30/webapps/nggirllog/access.log"
        start_position=>"beginning"
    }
}

filter{
    grok{
        match=>{
            "message"=>"%{DATA:clientIp} - - \[%{HTTPDATE:accessTime}\] \"%{DATA:method} %{DATA:requestPath} %{DATA:httpversion}\" %{DATA:retcode} %{DATA:size} \"%{DATA:fromHtml}\" \"%{DATA:useragent}\""
        }

        remove_field=>"message"
    }
    date{
        match=>["accessTime","dd/MMM/yyyy:HH:mm:ss Z"]
    }
}

output{
    stdout{
        codec=>rubydebug
    }
}

3.然後運行./logstash -f file_std.conf,就會看到文件中原有的內容被逐條的顯示在命令行了。

這個配置文件相對比較複雜,而且我們一般在使用elk的時候logstash的配置文件基本也是和這個類似,大同小異了,這裏對關鍵部分詳細解說一下。更深入的內容和使用方式,大家可以到elastic官網或者到logstash的最佳實戰頁面去看,網址是:http://udn.yyuap.com/doc/logstash-best-practice-cn/index.html

input/file/path:這裏指定了要對哪個日誌文件進行掃描。如果希望掃描多個文件,可以使用*這個路徑通配符;或者使用多個日誌路徑以數組形式提供(path=>[“outer-access.log”,”access.log”]);或者直接給定一個目錄,logstash會掃描所有的文件,並監聽是否有新文件。

filter/grok/match/message:裏面的DATA和HTTPDATE都是grok語法內置的正則表達式,DATA匹配任意字符,HTTPDATE匹配joda類型的日期格式字符。上例中”\[“是匹配“[”。

filter/grok/match/date: 是對HTTPDATE日期格式的解釋,joda可以支持很多複雜的日期格式,需要在這裏指明才能正確匹配。

remove_field=>”message”:用處是去掉原有的整個日誌字符串,僅保留filter解析後的信息。你可以試着去掉這一句就明白他的用處了。

解析成功後會看到控制檯中類似如下的內容:

這裏寫圖片描述

文件到elasticsearch

1.在bin目錄新建file_es.conf文件
2.錄入如下內容,和上一個例子的區別僅在於out部分:

input{
    file{
        path =>"/Develop/Tools/apache-tomcat-8.0.30/webapps/nggirllog/access*.log"
        start_position=>"beginning"
    }
}

filter{
    grok{
        match=>{
            "message"=>"%{DATA:clientIp} - - \[%{HTTPDATE:accessTime}\] \"%{DATA:method} %{DATA:requestPath} %{DATA:httpversion}\" %{DATA:retcode} %{DATA:size} \"%{DATA:fromHtml}\" \"%{DATA:useragent}\""
        }

        remove_field=>["message"]
    }
    date{
        match=>["accessTime","dd/MMM/yyyy:HH:mm:ss Z"]
    }
}

output {
        elasticsearch {
                hosts => "127.0.0.1"
        }
        stdout { codec => rubydebug}
}

3.執行./logstash -f file_es.conf

由於我們還沒有開始部署elasticsearch,暫時不貼出效果,效果圖將在下一個博客裏面看到。

多行日誌的處理

通過上面3步的熟悉,我們大概清楚了logstash的工作過程:

1.input讀取指定文件裏面的文本行,這裏是一行一行讀取的;
2.然後filter對讀入的每一行進行解析,拆分成一組一組的key-value值;
3.out將解析後的結果輸出寫入到指定的系統。

但是,我們知道異常日誌是一個多行文本,我們需要把多行信息輸出到一行裏面去處理,那麼怎麼辦呢?

如果仍然按照單行文本的類似處理方式的話,我們需要在input部分添加配置項,如下:

input {
    stdin {
        codec => multiline {
            pattern => "^\["
            negate => true
            what => "previous"
        }
    }
}

這個配置是對每一個以”[“開頭的行認作一個數據行的開始,後續不是以”[“開頭的行都會認爲是同一個數據的內容,當再次遇到”[“時結束這一個數據內容的讀取,開始下一行。

這裏有一個問題是,最後一個異常日誌不能輸出,因爲logstash一直在等待下一個”[“的出現,但是一直沒有出現,那麼就不會輸出了。

我們採用的處理多行文本的方式是自己實現了一個LogAppender,直接由程序日誌類庫以json串的形式輸出到redis中,然後再由logstash讀取。架構方式上屬於第一篇中寫的第二種架構方式。

以下是一些關鍵部分的代碼片段:

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

補充:如果需要屏蔽不需要的日誌,可以參見這裏:http://www.tuicool.com/articles/Ubeiaea

發佈了141 篇原創文章 · 獲贊 140 · 訪問量 68萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章