Logstash


Elasticsearch的基友Logstash

Logstash 是一款強大的數據處理工具,它可以實現數據傳輸,格式處理,格式化輸出,還有強大的插件功能,常用於日志處理。

一、原理

  • Input
    可以從文件中、存儲中、數據庫中抽取數據,Input有兩種選擇一個是交給Filter進行過濾、修剪。另一個是直接交給Output
  • Filter
    能夠動態地轉換和解析數據。可以通過自定義的方式對數據信息過濾、修剪
  • Output
    提供眾多輸出選擇,您可以將數據發送到您要指定的地方,並且能夠靈活地解鎖眾多下游用例。

二、安裝使用

1.安裝

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.1.rpm yum install -y ./logstash-6.0.1.rpm

2.Logstash配置文件

vim /etc/logstash/logstash.yml path.data: /var/lib/logstash # 數據存放路徑 path.config: /etc/logstash/conf.d/*.conf # 其他插件的配置文件,輸入輸出過濾等等 path.logs: /var/log/logstash # 日志存放路徑

3.Logstash中的JVM配置文件

Logstash是一個基於Java開發的程序,需要運行在JVM中,可以通過配置jvm.options來針對JVM進行設定。比如內存的最大最小、垃圾清理機制等等。這里僅僅列舉最常用的兩個。
JVM的內存分配不能太大不能太小,太大會拖慢操作系統。太小導致無法啟動。

vim /etc/logstash/jvm.options # logstash有關JVM的配置 -Xms256m # logstash最大最小使用內存 -Xmx1g

4.最簡單的日志收集配置

安裝一個httpd用於測試,配置Logstash收集Apache的accless.log日志文件

yum install httpd
echo "Hello world" > /var/www/html/index.html # 安裝httpd,創建首頁用於測試
vim /etc/logstash/conf.d/test.conf
input {
    file {                                                  # 使用file作為數據輸入 path => ['/var/log/httpd/access_log'] # 設定讀入數據的路徑 start_position => beginning # 從文件的開始處讀取,end從文件末尾開始讀取 } } output { # 設定輸出的位置 stdout { codec => rubydebug # 輸出至屏幕 } }

5.測試配置文件

logstash是自帶的命令但是沒有再環境變量中,所以只能使用絕對路徑來使用此命令。

/usr/share/logstash/bin/logstash -t -f /etc/logstash/conf.d/test.conf # 測試執行配置文件,-t要在-f前面 Configuration OK # 表示測試OK

6.啟動logstash

在當前會話運行logstash后不要關閉這個會話暫時稱其為會話1,再打開一個新的窗口為會話2

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf

啟動以后在會話2中使用curl命令進行測試

curl 172.18.68.14

然后在回到之前的會話1可以看到輸出的信息

{
      "@version" => "1", "host" => "logstash.shuaiguoxia.com", "path" => "/var/log/httpd/access_log", "@timestamp" => 2017-12-10T14:07:07.682Z, "message" => "172.18.68.14 - - [10/Dec/2017:22:04:44 +0800] \"GET / HTTP/1.1\" 200 12 \"-\" \"curl/7.29.0\"" } 

至此最簡單的Logstash配置就已經完成了,這里僅僅是將收集到的直接輸出沒有進行過濾或者修剪。

三、Elasticsearch與Logstash

上面的配置時Logsatsh從日志文件中抽取數據,然后輸出至屏幕。那么在生產中往往是將抽取的數據過濾后輸出到Elasticsearch中。下面講解Elasticsearch結合Logstash

Logstash抽取httpd的access.log文件,然后經過過濾(結構化)之后輸出給Elasticsearch Cluster,在使用Head插件就可以看到抽取到的數據。(Elasticsearch Cluster與Head插件搭建請查看前兩篇文章)

  • 配置Logstash

    vim /etc/logstash/conf.d/test.conf
    input {
    file {
        path => ['/var/log/httpd/access_log'] start_position => "beginning" } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } remove_field => "message" } } output { elasticsearch { hosts => ["http://172.18.68.11:9200","http://172.18.68.12:9200","http://172.18.68.13:9200"] index => "logstash-%{+YYYY.MM.dd}" action => "index" document_type => "apache_logs" } }
  • 啟動Logstash

     /usr/share/logstash/bin/logstash -t -f /etc/logstash/conf.d/test.conf # 測試配置文件 Configuration OK /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf # 啟動Logstash
  • 測試
    每個執行10次172.18.68.14,位Logstash的地址

    curl 127.0.0.1 curl 172.18.68.14
  • 驗證數據
    使用瀏覽器訪問172.18.68.11:9100(Elastisearch 安裝Head地址,前面文章有講)
    選擇今天的日期,就能看到一天內訪問的所有數據。

四、監控其他

  • 監控Nginx日志
    僅僅列了filter配置塊,input與output參考上一個配置

    filter {
        grok {
                match => {
                        "message" => "%{HTTPD_COMBINEDLOG} \"%{DATA:realclient}\"" } remove_field => "message" } date { match => ["timestamp","dd/MMM/YYYY:H:m:s Z"] remove_field => "timestamp" } }
  • 監控Tomcat
    僅僅列了filter配置塊,input與output參考上一個配置

    filter {
        grok {
                match => {
                        "message" => "%{HTTPD_COMMONLOG}" } remove_field => "message" } date { match => ["timestamp","dd/MMM/YYYY:H:m:s Z"] remove_field => "timestamp" } } 

五、Filebeat

現在已經搭建成在節點安裝Logstash並發送到Elasticsearch中去,但是Logstash是基於Java開發需要運行在JVM中,所以是一個重量級采集工具,僅僅對於一個日志采集節點來說使用Logstash太過重量級,那么就可以使用一個輕量級日志收集工具Filebeat來收集日志信息,Filebeat同一交給Logstash進行過濾后再Elasticsearch。這些在接下來的文章在進行講解,先放一張架構圖吧。

 

 

 

分類:  Linux, 服務器應用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM