您好,登錄后才能下訂單哦!
Logstash是一個開源的、服務(wù)端的數(shù)據(jù)處理pipeline(管道),它可以接收多個源的數(shù)據(jù)、然后對它們進行轉(zhuǎn)換、最終將它們發(fā)送到指定類型的目的地。Logstash是通過插件機制實現(xiàn)各種功能的,讀者可以去官方下載各種功能的插件,也可以自行編寫插件。
Logstash實現(xiàn)的功能主要分為接收數(shù)據(jù)、解析過濾并轉(zhuǎn)換數(shù)據(jù)、輸出數(shù)據(jù)三個部分,對應(yīng)的插件依次是input插件、filter插件、output插件,其中,filter插件是可選的,其它兩個是必須插件。也就是說在一個完整的Logstash配置文件中,必須有input插件和output插件。
常用的input插件
-file:讀取一個文件,這個讀取功能有點類似于linux下面的tail命令,一行一行的實時讀取。 -syslog: 監(jiān)聽系統(tǒng)514端口的syslog messages,并使用RFC3164格式進行解析。 -redis: Logstash可以從redis服務(wù)器讀取數(shù)據(jù),此時redis類似于一個消息緩存組件。 -kafka:Logstash也可以從kafka集群中讀取數(shù)據(jù),kafka加Logstash的架構(gòu)一般用在數(shù)據(jù)量較大的業(yè)務(wù)場景,kafka可用作數(shù)據(jù)的緩沖和存儲。 -filebeat:filebeat是一個文本日志收集器,性能穩(wěn)定,并且占用系統(tǒng)資源很少,Logstash可以接收filebeat發(fā)送過來的數(shù)據(jù)。
常見的filter插件
filter插件主要用于數(shù)據(jù)的過濾、解析和格式化、也就是將非結(jié)構(gòu)化的數(shù)據(jù)解析成結(jié)構(gòu)化的、可查詢的標(biāo)準(zhǔn)化數(shù)據(jù)。常見的filter插件有如下幾個: -grok:grok是logstash最重要的插件,可解析并結(jié)構(gòu)化任意數(shù)據(jù),支持正則表達式,并提供了很多內(nèi)置的規(guī)則和模板可供使用, -mutate:此插件提供了豐富的基礎(chǔ)類型數(shù)據(jù)處理能力,包括類型轉(zhuǎn)換,字符串處理和字段處理。 -date:此插件可以用來轉(zhuǎn)換你的日志記錄中的時間字符串。 -GeoIP:此插件可以根據(jù)IP地址提供對用的地域信息,包括國別,省市,經(jīng)緯度等,對于可視化地圖和區(qū)域統(tǒng)計非常有用。
常用的output:
-elasticsearch:發(fā)送數(shù)據(jù)到elasticsearch-file:發(fā)送數(shù)據(jù)到文件中-redis:發(fā)送數(shù)據(jù)到redis中,從這里可以看出redis插件既可以用在input插件中,也可以用在output插件中。-kafka:發(fā)送數(shù)據(jù)到kafka中,與redis插件類似,此插件也可以用在logstash的輸入和輸出插件中。
如果使用rpm包安裝軟件,那么logstash的配置文件是/etc/logstah目錄下。其中,jvm.options是設(shè)置JVM內(nèi)存資源的配置文件,logstash.yml是logstash全局屬性配置文件,一般無需修改,此外還有一個pipelines.yml文件,這個文件在logstash啟動的時候進程也會去讀取,這個文件的內(nèi)容實際上指向的是當(dāng)前目錄下的conf.d這個子目錄里面的配置文件,conf.d目錄下的文件要以.conf結(jié)尾,里面配置了input插件、filter插件、output插件信息。
我們先來認(rèn)識一下logstash是如何實現(xiàn)輸入輸出的,這里我們不添加filter插件。
(使用rpm包安裝的話,logstash可執(zhí)行文件在/usr/share/logstash/bin/目錄下。)
[root@:172.31.22.29 /etc/logstash/conf.d]#/usr/share/logstash/bin/logstash -e ""Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties`date` this timestamp is OK #輸入此信息。然后按enter鍵{ "message" => "·`date` this timestamp is OK", "host" => "ip-172-31-22-29.ec2.internal", "@timestamp" => 2019-01-22T02:59:01.422Z, "type" => "stdin", "@version" => "1" }
有一點大家要記?。?/p>
/usr/share/logstash/bin/logstash -e
/usr/share/logstash/bin/logstash -e ""
我們這里就是進入了一個簡單的交互式命令界面,當(dāng)我輸入信息時,logstash服務(wù)會反饋給我信息。我們來解釋一下命令含義:
-e代表執(zhí)行的意思。 input即輸入的意思,input里面即是輸入的方式,這里選擇了stdin,就是標(biāo)準(zhǔn)輸入(從終端輸入)。 output即輸出的意思,output里面是輸出的方式,這里選擇了stdout,就是標(biāo)準(zhǔn)輸出(輸出到終端)。 這里的codec是個插件,表明格式。這里放在stdout中,表示輸出的格式, rubydebug是專門用來做測試的格式,一般用來在終端輸出JSON格式。
logstash的output輸出的是JSON格式的內(nèi)容:
Logstash在輸出內(nèi)容中會給事件添加一些額外信息。比如@version、host、@timestamp都是新增的字段,而最重要的是@timestamp,用來標(biāo)記事件的發(fā)生時間。由于這個字段涉及到Logstash內(nèi)部流轉(zhuǎn),如果給一個字符串字段重命名為@timestamp的話,Logstash就會直接報錯。另外,也不能刪除這個字段。還有一個字段type,表示事件的唯一類型。tags,表示事件的某方面屬性。
我們上面的例子中是最簡單的logstash例子。不過生產(chǎn)環(huán)境中大多使用-f參數(shù)去讀配置文件。我們在上面提到過,配置文件一般在/etc/logstash/conf.d目錄下,必須以.conf結(jié)尾才是logstash服務(wù)讀取的配置文件。
那這次我們以配置文件為例進行介紹:
1)首先是我們進入到conf.d目錄,然后創(chuàng)建配置文件l1.conf并輸入如下內(nèi)容:
input { file { path => "/var/log/haha.txt" } } output { stdout { codec => rubydebug } }
保存退出。這里的意思就是說我們創(chuàng)建個配置文件去讀取/var/log/haha.txt這個日志文件,此文件里面一旦有數(shù)據(jù),就立馬讀取出來。
接下來進行啟動logstash服務(wù):
[root@: /etc/logstash/conf.d]#/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/l1.confSending Logstash logs to /var/log/logstash which is now configured via log4j2.properties [2019-01-22T03:19:03,462][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified [2019-01-22T03:19:03,486][INFO ][logstash.runner ] Starting Logstash {"logstash.version"=>"6.5.4"}[2019-01-22T03:19:08,344][INFO ][logstash.pipeline ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>4, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}[2019-01-22T03:19:08,655][INFO ][logstash.inputs.file ] No sincedb_path set, generating one based on the "path" setting {:sincedb_path=>"/var/lib/logstash/plugins/inputs/file/.sincedb_0d6c5b209e03529a50b2eca9300b7d96", :path=>["/var/log/haha.txt"]}[2019-01-22T03:19:08,706][INFO ][logstash.pipeline ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x27274b73 run>"}[2019-01-22T03:19:08,773][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]} [2019-01-22T03:19:08,783][INFO ][filewatch.observingtail ] START, creating Discoverer, Watch with file and sincedb collections [2019-01-22T03:19:09,220][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
會出現(xiàn)一堆啟動信息,不妨礙實驗。
接下來在另一終端向/var/log/haha.txt輸入一行內(nèi)容:
[root@::172.31.22.29 /etc/logstash]#echo "`date`+ timestamp is OK" >> /var/log/haha.txt
然后回到原來的那個終端去查看內(nèi)容:
{ "message" => "Tue Jan 22 03:21:32 UTC 2019+ timestamp is OK", "@version" => "1", "@timestamp" => 2019-01-22T03:21:33.843Z, "path" => "/var/log/haha.txt", "host" => "ip-172-31-22-29.ec2.internal"}
logstash服務(wù)會去讀取/var/log/haha.txt文件并采集數(shù)據(jù)進行展示。
接下來我們對配置文件l1.conf進行解讀:
首先看input插件,這里定義了input的輸入源為file,然后指定了文件的路徑為/var/log/haha.txt,也就是將此文件的內(nèi)容作為輸入源,這里的path屬性是必填配置,后面的路徑必須是絕對路徑,不能是相對路徑。如果需要監(jiān)控多個文件,可以通過逗號分隔即可。如下所示:
path => ["PATH1","PATH2","PATH3"]
這里的output插件,仍然采用rubydebug的JSON輸出格式。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。