Logstash介紹html
Logstash是一個開源數據收集引擎,具備實時管道功能。Logstash能夠動態地未來自不一樣數據源的數據統一塊兒來,並將數據標準化到你所選擇的目的地。node
集中、轉換和存儲你的數據git
Logstash是一個開源的服務器端數據處理管道,能夠同時從多個數據源獲取數據,並對其進行轉換,而後將其發送到你最喜歡的「存儲」。(固然,咱們最喜歡的是Elasticsearch)api
輸入:採集各類樣式、大小和來源的數據ruby
數據每每以各類各樣的形式,或分散或集中地存在於不少系統中。Logstash 支持各類輸入選擇 ,能夠在同一時間從衆多經常使用來源捕捉事件。可以以連續的流式傳輸方式,輕鬆地從您的日誌、指標、Web 應用、數據存儲以及各類 AWS 服務採集數據。服務器
過濾器:實時解析和轉換數據架構
數據從源傳輸到存儲庫的過程當中,Logstash 過濾器可以解析各個事件,識別已命名的字段以構建結構,並將它們轉換成通用格式,以便更輕鬆、更快速地分析和實現商業價值。app
Logstash 可以動態地轉換和解析數據,不受格式或複雜度的影響:dom
輸出:選擇你的存儲,導出你的數據curl
儘管 Elasticsearch 是咱們的首選輸出方向,可以爲咱們的搜索和分析帶來無限可能,但它並不是惟一選擇。
Logstash 提供衆多輸出選擇,您能夠將數據發送到您要指定的地方,而且可以靈活地解鎖衆多下游用例。
安裝Logstash
首先,讓咱們經過最基本的Logstash管道來測試一下剛纔安裝的Logstash
Logstash管道有兩個必需的元素,輸入和輸出,以及一個可選元素過濾器。輸入插件從數據源那裏消費數據,過濾器插件根據你的指望修改數據,輸出插件將數據寫入目的地。
接下來,容許Logstash最基本的管道,例如:
bin/logstash -e 'input { stdin {} } output { stdout {} }'
(畫外音:選項 -e 的意思是容許你從命令行指定配置)
啓動之後,下面咱們在命令行下輸入"hello world"
用Logstash解析日誌
在上一小節中,你已經建立了一個基本的Logstash管道來測試你的Logstash設置。在現實世界中,一個Logstash管理會稍微複雜一些:它一般有一個或多個input, filter 和 output 插件。
在這一小節中,你將建立一個Logstash管道,而且使用Filebeat將Apache Web日誌做爲input,解析這些日誌,而後將解析的數據寫到一個Elasticsearch集羣中。你將在配置文件中定義管道,而不是在命令行中定義管道配置。
在開始以前,請先下載示例數據。
配置Filebeat來發送日誌行到Logstash
在你建立Logstash管道以前,你須要先配置Filebeat來發送日誌行到Logstash。Filebeat客戶端是一個輕量級的、資源友好的工具,它從服務器上的文件中收集日誌,並將這些日誌轉發到你的Logstash實例以進行處理。Filebeat設計就是爲了可靠性和低延遲。Filebeat在主機上佔用的資源不多,並且Beats input插件將對Logstash實例的資源需求降到最低。
(畫外音:注意,在一個典型的用例中,Filebeat和Logstash實例是分開的,它們分別運行在不一樣的機器上。在本教程中,Logstash和Filebeat在同一臺機器上運行。)
關於Filebeat請參考《開始使用Filebeat》
filebeat.inputs: - type: log paths: - /usr/local/programs/logstash/logstash-tutorial.log output.logstash: hosts: ["localhost:5044"]
(畫外音:剛纔說過了一般Logstash管理有三部分(輸入、過濾器、輸出),這裏input下面beats { port => "5044" }的意思是用Beats輸入插件,而stdout { codec => rubydebug }的意思是輸出到控制檯)
bin/logstash -f first-pipeline.conf --config.test_and_exit
(畫外音:--config.test_and_exit選項的意思是解析配置文件並報告任何錯誤)
bin/logstash -f first-pipeline.conf --config.reload.automatic
(畫外音:--config.reload.automatic選項的意思是啓用自動配置加載,以致於每次你修改完配置文件之後無需中止而後重啓Logstash)
./filebeat -e -c filebeat.yml -d "publish"
若是一切正常,你將會在Logstash控制檯下看到相似這樣的輸出:
用Grok過濾器插件解析日誌
如今你有了一個工做管道,能夠從Filebeat讀取日誌行。可是你可能已經注意到日誌消息的格式並不理想。你想要解析日誌消息,以便從日誌中建立特定的、命名的字段。爲此,您將使用grok filter插件。
grok 過濾器插件是Logstash中默承認用的幾個插件之一。
grok 過濾器插件容許你將非結構化日誌數據解析爲結構化和可查詢的數據。
由於 grok 過濾器插件在傳入的日誌數據中查找模式
爲了解析數據,你能夠用 %{COMBINEDAPACHELOG} grok pattern ,這種模式(或者說格式)的schema以下:
接下來,編輯first-pipeline.conf文件,加入grok filter,在你修改完之後這個文件看起來應該是這樣的:
在你保存完之後,由於你已經啓動了自動加載配置,因此你不須要重啓Logstash來應用你的修改。可是,你確實須要強制Filebeat從頭讀取日誌文件。爲了這樣作,你須要在終端先按下Ctrl+C停掉Filebeat,而後刪除Filebeat註冊文件。例如:
rm data/registr
而後重啓Filebeat
./filebeat -e -c filebeat.yml -d "publish"
此時,再看Logstash控制檯,輸出多是這樣的:
用 Geoip 過濾器插件加強你的數據
而後,一樣地,重啓Filebeat
Ctrl+C rm data/registry ./filebeat -e -c filebeat.yml -d "publish"
再次查看Logstash控制檯,咱們會發現多了地理位置信息:
索引你的數據到Elasticsearch
在以前的配置中,咱們配置了Logstash輸出到控制檯,如今咱們讓它輸出到Elasticsearch集羣。
編輯first-pipeline.conf文件,替換output區域爲:
output { elasticsearch { hosts => [ "localhost:9200" ] } }
在這段配置中,Logstash用http協議鏈接到Elasticsearch,並且假設Logstash和Elasticsearch容許在同一臺機器上。你也能夠指定一個遠程的Elasticsearch實例,好比host=>["es-machine:9092"]
如今,first-pipeline.conf文件是這樣的:
一樣,保存改變之後,重啓Filebeat
(畫外音:首先,Ctrl+C終止Filebeat;接着rm data/registry刪除註冊文件;最後,./filebeat -e -c filebeat.yml -d "publish" 啓動Filebeat)
好了,接下來啓動Elasticsearch
(畫外音:查看Elasticsearch索引,若是沒有看到logstash的索引,那麼重啓Filebeat和Logstash,重啓以後應該就能夠看到了)
若是一切正常的話,能夠在Elasticsearch的控制檯日誌中看到這樣的輸出:
[2018-08-11T17:35:27,871][INFO ][o.e.c.m.MetaDataIndexTemplateService] [Px524Ts] adding template [logstash] for index patterns [logstash-*] [2018-08-11T17:46:13,311][INFO ][o.e.c.m.MetaDataCreateIndexService] [Px524Ts] [logstash-2018.08.11] creating index, cause [auto(bulk api)], templates [logstash], shards [5]/[1], mappings [_default_] [2018-08-11T17:46:13,549][INFO ][o.e.c.m.MetaDataMappingService] [Px524Ts] [logstash-2018.08.11/pzcVdNxSSjGzaaM9Ib_G_w] create_mapping [doc] [2018-08-11T17:46:13,722][INFO ][o.e.c.m.MetaDataMappingService] [Px524Ts] [logstash-2018.08.11/pzcVdNxSSjGzaaM9Ib_G_w] update_mapping [doc]
這個時候,咱們再查看Elasticsearch的索引
請求:
curl 'localhost:9200/_cat/indices?v'
響應:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open bank 59jD3B4FR8iifWWjrdMzUg 5 1 1000 0 475.1kb 475.1kb green open .kibana DzGTSDo9SHSHcNH6rxYHHA 1 0 153 23 216.8kb 216.8kb yellow open filebeat-6.3.2-2018.08.08 otgYPvsgR3Ot-2GDcw_Upg 3 1 255 0 63.7kb 63.7kb yellow open customer DoM-O7QmRk-6f3Iuls7X6Q 5 1 1 0 4.5kb 4.5kb yellow open logstash-2018.08.11 pzcVdNxSSjGzaaM9Ib_G_w 5 1 100 0 251.8kb 251.8kb
能夠看到有一個名字叫"logstash-2018.08.11"的索引,其它的索引都是以前建的不用管
接下來,查看這個索引下的文檔
請求:
curl -X GET 'localhost:9200/logstash-2018.08.11/_search?pretty&q=response=200'
響應大概是這樣的:
(畫外音:因爲輸出太長了,這裏截取部分)
{ "_index" : "logstash-2018.08.11", "_type" : "doc", "_id" : "D_JhKGUBOuOlYJNtDfwl", "_score" : 0.070617564, "_source" : { "host" : { "name" : "localhost.localdomain" }, "httpversion" : "1.1", "ident" : "-", "message" : "83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] \"GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1\" 200 203023 \"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\"", "auth" : "-", "timestamp" : "04/Jan/2015:05:13:42 +0000", "input" : { "type" : "log" }, "geoip" : { "postal_code" : "101194", "region_name" : "Moscow", "timezone" : "Europe/Moscow", "continent_code" : "EU", "city_name" : "Moscow", "country_code3" : "RU", "country_name" : "Russia", "ip" : "83.149.9.216", "country_code2" : "RU", "region_code" : "MOW", "latitude" : 55.7485, "longitude" : 37.6184, "location" : { "lon" : 37.6184, "lat" : 55.7485 } }, "@timestamp" : "2018-08-11T09:46:10.209Z", "offset" : 0, "tags" : [ "beats_input_codec_plain_applied" ], "beat" : { "version" : "6.3.2", "hostname" : "localhost.localdomain", "name" : "localhost.localdomain" }, "clientip" : "83.149.9.216", "@version" : "1", "verb" : "GET", "request" : "/presentations/logstash-monitorama-2013/images/kibana-search.png", "prospector" : { "type" : "log" }, "referrer" : "\"http://semicomplete.com/presentations/logstash-monitorama-2013/\"", "response" : "200", "bytes" : "203023", "source" : "/usr/local/programs/logstash/logstash-tutorial.log", "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\"" } }
再來一個
請求:
curl -XGET 'localhost:9200/logstash-2018.08.11/_search?pretty&q=geoip.city_name=Buffalo'
響應:
{ "took" : 37, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 2, "max_score" : 2.6855774, "hits" : [ { "_index" : "logstash-2018.08.11", "_type" : "doc", "_id" : "DvJhKGUBOuOlYJNtDPw7", "_score" : 2.6855774, "_source" : { "host" : { "name" : "localhost.localdomain" }, "httpversion" : "1.1", "ident" : "-", "message" : "198.46.149.143 - - [04/Jan/2015:05:29:13 +0000] \"GET /blog/geekery/solving-good-or-bad-problems.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+semicomplete%2Fmain+%28semicomplete.com+-+Jordan+Sissel%29 HTTP/1.1\" 200 10756 \"-\" \"Tiny Tiny RSS/1.11 (http://tt-rss.org/)\"", "auth" : "-", "timestamp" : "04/Jan/2015:05:29:13 +0000", "input" : { "type" : "log" }, "geoip" : { "postal_code" : "14202", "region_name" : "New York", "timezone" : "America/New_York", "continent_code" : "NA", "city_name" : "Buffalo", "country_code3" : "US", "country_name" : "United States", "ip" : "198.46.149.143", "dma_code" : 514, "country_code2" : "US", "region_code" : "NY", "latitude" : 42.8864, "longitude" : -78.8781, "location" : { "lon" : -78.8781, "lat" : 42.8864 } }, "@timestamp" : "2018-08-11T09:46:10.254Z", "offset" : 22795, "tags" : [ "beats_input_codec_plain_applied" ], "beat" : { "version" : "6.3.2", "hostname" : "localhost.localdomain", "name" : "localhost.localdomain" }, "clientip" : "198.46.149.143", "@version" : "1", "verb" : "GET", "request" : "/blog/geekery/solving-good-or-bad-problems.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+semicomplete%2Fmain+%28semicomplete.com+-+Jordan+Sissel%29", "prospector" : { "type" : "log" }, "referrer" : "\"-\"", "response" : "200", "bytes" : "10756", "source" : "/usr/local/programs/logstash/logstash-tutorial.log", "agent" : "\"Tiny Tiny RSS/1.11 (http://tt-rss.org/)\"" } }, 。。。
(畫外音:關於Elasticsearch能夠查看另一篇《Elasticsearch 快速開始》)
命令行啓動Logstash
爲了從命令行啓動Logstash,用下面的命令:
bin/logstash [options]
下面的例子展現了啓動Logstash,並制定配置定義在mypipeline.conf文件中:
bin/logstash -f mypipeline.conf
在命令行中設置的任何標誌都會覆蓋logstash.yml中的相應設置。可是文件自己的內容沒有改變。
Command-Line Flags
--node.name NAME
指定Logstash實例的名字。若是沒有指定的話,默認是當前主機名。
-f, --path.config CONFIG_PATH
從指定的文件或者目錄加載Logstash配置。若是給定的是一個目錄,則該目錄中的全部文件將以字典順序鏈接,而後做爲一個配置文件進行解析。
-e, --config.string CONFIG_STRING
用給定的字符串做爲配置數據,語法和配置文件中是同樣的。
--modules
運行的模塊名字
-l, --path.logs PATH
Logstash內部日誌輸出目錄
--log.level LEVEL
日誌級別
-t, --config.test_and_exit
檢查配置語法是否正確並退出
-r, --config.reload.automatic
監視配置文件的改變,而且當配置文件被修改之後自動從新加載配置文件。
-config.reload.interval RELOAD_INTERVAL
爲了檢查配置文件是否改變,而拉去配置文件的頻率。默認3秒。
--http.host HTTP_HOST
Web API綁定的主機。REST端點綁定的地址。默認是"127.0.0.1"
--http.port HTTP_PORT
Web API http端口。REST端點綁定的端口。默認是9600-9700之間。
--log.format FORMAT
指定Logstash寫它自身的使用JSON格式仍是文本格式。默認是"plain"。
--path.settings SETTINGS_DIR
設置包含logstash.yml配置文件的目錄,好比log4j日誌配置。也能夠設置LS_SETTINGS_DIR環境變量。默認的配置目錄是在Logstash home目錄下。
-h, --help
打印幫助
好了,關於Logstash介紹暫時先寫這麼多吧! 感謝用心的本身!!!
其它相關