您好,登錄后才能下訂單哦!
Logstash是一個開源的、服務端的數據處理pipeline(管道),它可以接收多個源的數據、然后對它們進行轉換、最終將它們發送到指定類型的目的地。Logstash是通過插件機制實現各種功能的,讀者可以去官方下載各種功能的插件,也可以自行編寫插件。
Logstash實現的功能主要分為接收數據、解析過濾并轉換數據、輸出數據三個部分,對應的插件依次是input插件、filter插件、output插件,其中,filter插件是可選的,其它兩個是必須插件。也就是說在一個完整的Logstash配置文件中,必須有input插件和output插件。
常用的input插件
-file:讀取一個文件,這個讀取功能有點類似于linux下面的tail命令,一行一行的實時讀取。 -syslog: 監聽系統514端口的syslog messages,并使用RFC3164格式進行解析。 -redis: Logstash可以從redis服務器讀取數據,此時redis類似于一個消息緩存組件。 -kafka:Logstash也可以從kafka集群中讀取數據,kafka加Logstash的架構一般用在數據量較大的業務場景,kafka可用作數據的緩沖和存儲。 -filebeat:filebeat是一個文本日志收集器,性能穩定,并且占用系統資源很少,Logstash可以接收filebeat發送過來的數據。
常見的filter插件
filter插件主要用于數據的過濾、解析和格式化、也就是將非結構化的數據解析成結構化的、可查詢的標準化數據。常見的filter插件有如下幾個: -grok:grok是logstash最重要的插件,可解析并結構化任意數據,支持正則表達式,并提供了很多內置的規則和模板可供使用, -mutate:此插件提供了豐富的基礎類型數據處理能力,包括類型轉換,字符串處理和字段處理。 -date:此插件可以用來轉換你的日志記錄中的時間字符串。 -GeoIP:此插件可以根據IP地址提供對用的地域信息,包括國別,省市,經緯度等,對于可視化地圖和區域統計非常有用。
常用的output:
-elasticsearch:發送數據到elasticsearch-file:發送數據到文件中-redis:發送數據到redis中,從這里可以看出redis插件既可以用在input插件中,也可以用在output插件中。-kafka:發送數據到kafka中,與redis插件類似,此插件也可以用在logstash的輸入和輸出插件中。
如果使用rpm包安裝軟件,那么logstash的配置文件是/etc/logstah目錄下。其中,jvm.options是設置JVM內存資源的配置文件,logstash.yml是logstash全局屬性配置文件,一般無需修改,此外還有一個pipelines.yml文件,這個文件在logstash啟動的時候進程也會去讀取,這個文件的內容實際上指向的是當前目錄下的conf.d這個子目錄里面的配置文件,conf.d目錄下的文件要以.conf結尾,里面配置了input插件、filter插件、output插件信息。
我們先來認識一下logstash是如何實現輸入輸出的,這里我們不添加filter插件。
(使用rpm包安裝的話,logstash可執行文件在/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" }
有一點大家要記住:
/usr/share/logstash/bin/logstash -e
/usr/share/logstash/bin/logstash -e ""
我們這里就是進入了一個簡單的交互式命令界面,當我輸入信息時,logstash服務會反饋給我信息。我們來解釋一下命令含義:
-e代表執行的意思。 input即輸入的意思,input里面即是輸入的方式,這里選擇了stdin,就是標準輸入(從終端輸入)。 output即輸出的意思,output里面是輸出的方式,這里選擇了stdout,就是標準輸出(輸出到終端)。 這里的codec是個插件,表明格式。這里放在stdout中,表示輸出的格式, rubydebug是專門用來做測試的格式,一般用來在終端輸出JSON格式。
logstash的output輸出的是JSON格式的內容:
Logstash在輸出內容中會給事件添加一些額外信息。比如@version、host、@timestamp都是新增的字段,而最重要的是@timestamp,用來標記事件的發生時間。由于這個字段涉及到Logstash內部流轉,如果給一個字符串字段重命名為@timestamp的話,Logstash就會直接報錯。另外,也不能刪除這個字段。還有一個字段type,表示事件的唯一類型。tags,表示事件的某方面屬性。
我們上面的例子中是最簡單的logstash例子。不過生產環境中大多使用-f參數去讀配置文件。我們在上面提到過,配置文件一般在/etc/logstash/conf.d目錄下,必須以.conf結尾才是logstash服務讀取的配置文件。
那這次我們以配置文件為例進行介紹:
1)首先是我們進入到conf.d目錄,然后創建配置文件l1.conf并輸入如下內容:
input { file { path => "/var/log/haha.txt" } } output { stdout { codec => rubydebug } }
保存退出。這里的意思就是說我們創建個配置文件去讀取/var/log/haha.txt這個日志文件,此文件里面一旦有數據,就立馬讀取出來。
接下來進行啟動logstash服務:
[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}
會出現一堆啟動信息,不妨礙實驗。
接下來在另一終端向/var/log/haha.txt輸入一行內容:
[root@::172.31.22.29 /etc/logstash]#echo "`date`+ timestamp is OK" >> /var/log/haha.txt
然后回到原來的那個終端去查看內容:
{ "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服務會去讀取/var/log/haha.txt文件并采集數據進行展示。
接下來我們對配置文件l1.conf進行解讀:
首先看input插件,這里定義了input的輸入源為file,然后指定了文件的路徑為/var/log/haha.txt,也就是將此文件的內容作為輸入源,這里的path屬性是必填配置,后面的路徑必須是絕對路徑,不能是相對路徑。如果需要監控多個文件,可以通過逗號分隔即可。如下所示:
path => ["PATH1","PATH2","PATH3"]
這里的output插件,仍然采用rubydebug的JSON輸出格式。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。