Filebeat+Logstash+Elasticsearch測試

安裝配置好三個軟件使之可以正常啓動,下面開始測試。php

第一步

elasticsearch提供了restful api,這些api會很是便利,爲了方便查看,可使用postman調用接口。
一、查看Elasticsearch服務是否正常css

GET http://120.27.110.143:9200 

若是服務正常將會返回如下格式數據node

{
    "name": "node-1", # 節點名稱 "cluster_name": "es_cluster", # 集羣名稱 "cluster_uuid": "p_19Z1wFQA2tUWwJr6BjpA", # 集羣uuid "version": { # elasticsearch的版本信息 "number": "6.4.0", # 版本號 "build_flavor": "default", # 默認構建 "build_type": "tar", # 構建類型 "build_hash": "595516e", # 構建hash "build_date": "2018-08-17T23:18:47.308994Z", # 構建時間 "build_snapshot": false, # 構建快照 "lucene_version": "7.4.0", # lucene版本 "minimum_wire_compatibility_version": "5.6.0", # 最小兼容版本 "minimum_index_compatibility_version": "5.0.0" # 最小索引兼容版本 }, "tagline": "You Know, for Search" # 品牌口號 } 

Tip
(1)節點名稱和集羣名稱是可配置的,在elasticsearch.yml配置文件中可修改
(2)120.27.110.143是Elasticsearch服務所在的服務器地址,要使外部能夠經過ip地址訪問Elasticsearch,一樣須要在elasticsearch.yml中配置network.host: 0.0.0.0
linux

 
 

(3)elasticsearch.yml配置文件中還有其餘配置項,具體狀況具體配置

 

二、查看Elasticsearch裏的索引數據ios

GET http://120.27.110.143:9200/_cat/indices?v 

服務正常狀況下回返回如下格式數據git

health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open nagios-dashboard-2018.09.17 YPsJER0dRYSY7cHXJqm_WQ 5 1 1108 0 622.9kb 622.9kb yellow open logstash-2018.09.18 mm3r8OEeTrmw3vBrt4RdwQ 5 1 302 0 686.9kb 686.9kb yellow open filebeat-6.4.0-2018.09.18 qBq5H37iQEiw86x7mDSJpg 5 1 500 0 342.2kb 342.2kb 

因爲以前已經運行過一次服務因此產生了以上數據
三、刪除Elasticsearch裏的索引數據數據庫

DELETE http://120.27.110.143:9200/logstash-2018.09.18?pretty 

若是索引名稱無誤將會返回json

{
    "acknowledged": true } 

若是索引名稱有誤則會返回404api

第二步

已經刪除以前產生的數據,如今開始測試
一、使用Elasticsearch官網提供的測試數據logstash-tutorial.log文件
咱們看一下logstash-tutorial.log文件內容ruby

hsl@iZ282hpfj1mZ:~$ vi logstash-tutorial.log 

裏面含有100條如下格式的數據

83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-dashboard3.png HTTP/1.1" 200 171717 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36" 

 

 
 

二、配置filebeat
filebeat能夠單獨和elasticsearch使用,不經過logstash,差異在於沒有logstash分析過濾,存儲的是原始數據,而將數據轉發到logstash分析過濾後,存儲的是格式化數據,下面經過對比能夠看到

 

首先配置filebeat.yml文件以下

filebeat.prospectors:
- type: log # filebeat處理類型爲log文件 paths: - /home/hsl/logstash-tutorial.log # log文件的絕對路徑 output.elasticsearch: # 輸出到elasticsearch hosts: ["localhost:9200"] tail_files: true # 從文件末尾讀取 

Tip
(1)paths能夠是多個日誌文件的絕對路徑
(2)output有多個輸出方式,能夠輸出到logstash,也能夠輸出到數據庫存儲,考慮到全文檢索,官網建議使用elasticsearch數據庫。
(3)hosts能夠是多個數據庫地址,因爲filebeat和elasticsearch在同一臺服務器上因此能夠寫成localhost:9200,固然也能夠換成它的IP120.27.110.143:9200

三、運行filebeat

hsl@iZ282hpfj1mZ:~/filebeat-6.4.0-linux-x86_64$ ./filebeat -e -c filebeat.yml -d "publish" 

若是一切正常將會看到如下輸出


 
 

能夠看到上面的輸出,以及下面的紅框中的內容,
Connected to Elasticsearch version 6.4.0
已經鏈接到elasticsearch數據庫,
Template already exists and will not be overwritten.
模板已經存在而且不會被重寫。

下面經過postman查看elasticsearch數據庫

GET  http://120.27.110.143:9200/_cat/indices?v 

結果如圖所示


 
 

index:filebeat-6.4.0-2018.09.18是生成的索引名稱,具體的生成規則暫時還不知道如何配置,下次再討論。
docs.count:100文檔數量是100對應咱們的測試文件。

能夠看一下具體的數據格式

GET  http://120.27.110.143:9200/filebeat-6.4.0-2018.09.18/_search?pretty 

結果如圖所示


 
 

每一個文檔中的具體內容以下

{
         "_index": "filebeat-6.4.0-2018.09.18", # 索引名 "_type": "doc", # 類型 "_id": "3ZWv6mUBvd_PCv61-X6v", # id "_score": 1, # 得分 "_source": { "@timestamp": "2018-09-18T03:18:44.531Z", # 時間戳 "message": "83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] \"GET /presentations/logstash-monitorama-2013/images/kibana-dashboard3.png HTTP/1.1\" 200 171717 \"http://semicomplete.com/presentations/logstash-monitorama-2013/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\"", # 一行日誌內容 "source": "/home/hsl/logstash-tutorial.log", # 來源 "offset": 325, # 物理地址位移 "input": { "type": "log" # 輸入類型 }, "prospector": { "type": "log" }, "beat": { "hostname": "iZ282hpfj1mZ", # beat所在主機名 "version": "6.4.0", # 版本號 "name": "iZ282hpfj1mZ" # beat名 }, "host": { "name": "iZ282hpfj1mZ" # 主機名 } } } 

如今關閉filebeat而且從新啓動一次看數據是否會變
經過服務器日誌輸出以及postman查詢能夠看到並無將數據再次寫入到elasticsearch中


 
 

 
 

如今向logstash-tutorial.log文件中添加一行

hsl@iZ282hpfj1mZ:~$ echo '86.1.76.62 - - [04/Jan/2015:05:30:37 +0000] "GET /style2.css HTTP/1.1" 200 4877 "http://www.semicomplete.com/projects/xdotool/" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0"' >> /home/hsl/logstash-tutorial.log 

能夠看到當文件發生改變是filebeat會自動監控到並執行


 
 

下面看一下elasticsearch中的數據,若是無誤如今的文檔數量應該是101

 
 

 

Tip
(1)當使用vi打開文件,在文件末尾添加一行,保存並退出後,filebeat會將上一次發送時的offset讀取從新發送一次,推送兩次event,致使數據重複。具體的官網解釋翻譯以下:
你怎麼修改文件?你試過了$ echo 'new line' >> /usr/src/app/log.log嗎?filebeat試圖根據元數據來檢測文件是不是新的。一些工具/編輯器建立一個全新的文件保存並取消舊連接。這被filebeat檢測爲新文件,迫使它從新發送全部內容。
四、測試filebeat監控多個日誌文件
首先修改filebeat.yml文件以下:

filebeat.prospectors:
- type: log paths: - /home/hsl/logstash-tutorial.log - type: log paths: - /home/hsl/logstash-tutorial_copy.log # 複製一份測試用例日誌 output.elasticsearch: hosts: ["120.27.110.143:9200"] tail_files: true 

而後,清空elasticsearch數據,並執行如下命令,刪除註冊信息

hsl@iZ282hpfj1mZ:~/filebeat-6.4.0-linux-x86_64$ rm data/registry 

最後從新啓動filebeat

hsl@iZ282hpfj1mZ:~/filebeat-6.4.0-linux-x86_64$ ./filebeat -e -c filebeat.yml -d "publish" 

若是一切正常,數據庫中將會有202條數據

 
 

 

第三步

一、將filebeat輸出改成logstash

filebeat.prospectors:
- type: log paths: - /home/hsl/logstash-tutorial.log output.logstash: # 將數據發送到logstash hosts: ["120.27.110.143:5044"] tail_files: true 

二、增長logstash管道文件first-pipeline.conf文件
內容以下:

input {  # 輸入 beats { # 來源beats port => "5044" # 端口 } } filter { # 分析、過濾插件,能夠多個 grok { match => { "message" => "%{COMBINEDAPACHELOG}"} } geoip { source => "clientip" } } output { # 輸出 elasticsearch { # 選擇elasticsearch hosts => ["localhost:9200"] } } 

三、啓動logstash

hsl@iZ282hpfj1mZ:~/logstash-6.4.0$ bin/logstash -f first-pipeline.conf --config.reload.automatic 

--config.reload.automatic自動重載配置文件
若是正常啓動,將會輸入如下內容

 
 

四、啓動filebeat

 

hsl@iZ282hpfj1mZ:~/filebeat-6.4.0-linux-x86_64$ ./filebeat -e -c filebeat.yml -d "publish" 

五、查看elasticsearch

GET http://120.27.110.143:9200/_cat/indices?v 

結果以下

health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open filebeat-6.4.0-2018.09.18 CWijkL6cTE2kNMXP-cQeMA 5 1 202 0 97.1kb 97.1kb yellow open logstash-2018.09.18 7b9NzO15QFWr3FLPeszThA 5 1 101 0 256.3kb 256.3kb 

logstash-2018.09.18是新建的索引,而且文檔數正好爲101
查看數據的具體格式

GET http://120.27.110.143:9200/logstash-2018.09.18/_search?pretty 
 
 

具體某一條的數據以下:

{
    "_index": "logstash-2018.09.18", # 索引名 "_type": "doc", # 類型doc "_id": "NZVj62UBvd_PCv61z4OP", # 文檔id "_score": 1, # 得分 "_source": { "message": "83.149.9.216 - - [04/Jan/2015:05:13:43 +0000] \"GET /presentations/logstash-monitorama-2013/images/kibana-dashboard.png HTTP/1.1\" 200 321631 \"http://semicomplete.com/presentations/logstash-monitorama-2013/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\"", # 原消息 "request": "/presentations/logstash-monitorama-2013/images/kibana-dashboard.png", # 請求 "agent": "\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\"", # 用戶代理 "@timestamp": "2018-09-18T06:35:09.345Z", # 建立時間 "response": "200", # 返回碼 "geoip": { # IP地址信息 "location": { "lon": 37.6184, "lat": 55.7485 }, "longitude": 37.6184, "continent_code": "EU", "region_code": "MOW", "timezone": "Europe/Moscow", "postal_code": "101194", "country_code2": "RU", "latitude": 55.7485, "region_name": "Moscow", "country_name": "Russia", "country_code3": "RU", "city_name": "Moscow", "ip": "83.149.9.216" }, "offset": 2932, # 位移數 "clientip": "83.149.9.216", # 請求接口的IP地址 "beat": { # beat信息 "hostname": "iZ282hpfj1mZ", "name": "iZ282hpfj1mZ", "version": "6.4.0" }, "tags": [ # 標籤 "beats_input_codec_plain_applied" ], "verb": "GET", # 請求方法 "input": { # 輸入 "type": "log" }, "@version": "1", # 版本 "timestamp": "04/Jan/2015:05:13:43 +0000", # 接口請求時間 "referrer": "\"http://semicomplete.com/presentations/logstash-monitorama-2013/\"", # 引用URL "prospector": { "type": "log" }, "source": "/home/hsl/logstash-tutorial.log", # 來源 "host": { # 主機名 "name": "iZ282hpfj1mZ" }, "bytes": "321631", # 大小 "auth": "-", # 認證 "ident": "-", # 用戶id "httpversion": "1.1" # http版本 } } 

回顧filebeat存在elasticsearch數據庫裏的數據格式,不難發現,logstash存儲起來的數據多出了一些其餘字段,這些字段信息是logstash分析過濾原消息得出的格式化信息。
六、給日誌文件寫入新日誌

hsl@iZ282hpfj1mZ:~$ echo '86.1.76.62 - - [04/Jan/2015:05:30:37 +0000] "GET /style2.css HTTP/1.1" 200 4877 "http://www.semicomplete.com/projects/xdotool/" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0"' >> /home/hsl/logstash-tutorial.log 

查看elasticsearch數據庫驗證

GET http://120.27.110.143:9200/_cat/indices?v 

返回結果以下

health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open filebeat-6.4.0-2018.09.18 CWijkL6cTE2kNMXP-cQeMA 5 1 202 0 97.1kb 97.1kb yellow open logstash-2018.09.18 7b9NzO15QFWr3FLPeszThA 5 1 102 0 279.5kb 279.5kb 

能夠看到logstash-2018.09.18索引的dosc.count從原來的101變爲102

以上是filebeat+logstash+elasticsearch的一些測試。

做者:幾次寒暑 連接:https://www.jianshu.com/p/88d9ad372a85 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。
相關文章
相關標籤/搜索