安裝配置好三個軟件使之能夠正常啟動,下面開始測試。
第一步
elasticsearch提供了restful api,這些api會非常便利,為了方便查看,可以使用postman調用接口。
1、查看Elasticsearch服務是否正常
GET http://120.27.110.143:9200
如果服務正常將會返回以下格式數據
{
"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

(3)elasticsearch.yml配置文件中還有其他配置項,具體情況具體配置
2、查看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 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
由於之前已經運行過一次服務所以產生了以上數據
3、刪除Elasticsearch里的索引數據
DELETE http://120.27.110.143:9200/logstash-2018.09.18?pretty
如果索引名稱無誤將會返回
{
"acknowledged": true }
如果索引名稱有誤則會返回404
第二步
已經刪除之前產生的數據,現在開始測試
1、使用Elasticsearch官網提供的測試數據logstash-tutorial.log文件
我們看一下logstash-tutorial.log文件內容
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"

2、配置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
3、運行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檢測為新文件,迫使它重新發送所有內容。
4、測試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條數據

第三步
1、將filebeat輸出改為logstash
filebeat.prospectors:
- type: log paths: - /home/hsl/logstash-tutorial.log output.logstash: # 將數據發送到logstash hosts: ["120.27.110.143:5044"] tail_files: true
2、增加logstash管道文件first-pipeline.conf文件
內容如下:
input { # 輸入 beats { # 來源beats port => "5044" # 端口 } } filter { # 分析、過濾插件,可以多個 grok { match => { "message" => "%{COMBINEDAPACHELOG}"} } geoip { source => "clientip" } } output { # 輸出 elasticsearch { # 選擇elasticsearch hosts => ["localhost:9200"] } }
3、啟動logstash
hsl@iZ282hpfj1mZ:~/logstash-6.4.0$ bin/logstash -f first-pipeline.conf --config.reload.automatic
--config.reload.automatic自動重載配置文件
如果正常啟動,將會輸入以下內容

4、啟動filebeat
hsl@iZ282hpfj1mZ:~/filebeat-6.4.0-linux-x86_64$ ./filebeat -e -c filebeat.yml -d "publish"
5、查看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分析過濾原消息得出的格式化信息。
6、給日志文件寫入新日志
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
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。