Elasticsearch的基友Logstash

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

1、原理

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

2、安裝使用

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日誌文件apache

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是自帶的命令可是沒有再環境變量中,因此只能使用絕對路徑來使用此命令。vim

/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命令進行測試ruby

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配置就已經完成了,這裏僅僅是將收集到的直接輸出沒有進行過濾或者修剪。併發

3、Elasticsearch與Logstash

上面的配置時Logsatsh從日誌文件中抽取數據,而後輸出至屏幕。那麼在生產中每每是將抽取的數據過濾後輸出到Elasticsearch中。下面講解Elasticsearch結合Logstashless

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

  • 配置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地址,前面文章有講)
    選擇今天的日期,就能看到一天內訪問的全部數據。

4、監控其餘

  • 監控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"
        }
}

5、Filebeat

如今已經搭建成在節點安裝Logstash併發送到Elasticsearch中去,可是Logstash是基於Java開發須要運行在JVM中,因此是一個重量級採集工具,僅僅對於一個日誌採集節點來講使用Logstash太太重量級,那麼就可使用一個輕量級日誌收集工具Filebeat來收集日誌信息,Filebeat同一交給Logstash進行過濾後再Elasticsearch。這些在接下來的文章在進行講解,先放一張架構圖吧。

相關文章
相關標籤/搜索