中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

logstash是怎么工作的?

發布時間:2020-05-23 15:58:17 來源:億速云 閱讀:313 作者:鴿子 欄目:系統運維

  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輸出格式。

 


向AI問一下細節
推薦閱讀:
  1. logstash
  2. ELK——Logstash

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥江县| 娄烦县| 米脂县| 武冈市| 阿拉善左旗| 瓦房店市| 镇坪县| 定南县| 雷州市| 南宫市| 监利县| 哈巴河县| 正蓝旗| 鄱阳县| 深圳市| 遵义市| 罗山县| 政和县| 光泽县| 化德县| 汉中市| 禹州市| 西丰县| 石柱| 德庆县| 东明县| 英超| 自治县| 岳阳市| 靖州| 博爱县| 辽阳县| 宜州市| 梨树县| 望谟县| 新乐市| 济南市| 金阳县| 津南区| 安平县| 通榆县|