实战ELK(5) Logstash 入门
?
?
Logstash 是一個(gè)開源的數(shù)據(jù)收集引擎,它具有備實(shí)時(shí)數(shù)據(jù)傳輸能力。它可以統(tǒng)一過濾來自不同源的數(shù)據(jù),并按照開發(fā)者的制定的規(guī)范輸出到目的地。
一、原理
?Logstash 通過管道進(jìn)行運(yùn)作,管道有兩個(gè)必需的元素,輸入和輸出,還有一個(gè)可選的元素,過濾器。
輸入插件從數(shù)據(jù)源獲取數(shù)據(jù),過濾器插件根據(jù)用戶指定的數(shù)據(jù)格式修改數(shù)據(jù),輸出插件則將數(shù)據(jù)寫入到目的地。如下圖:
?
輸入:采集各種樣式、大小和來源的數(shù)據(jù)
數(shù)據(jù)往往以各種各樣的形式,或分散或集中地存在于很多系統(tǒng)中。Logstash 支持各種輸入選擇 ,可以在同一時(shí)間從眾多常用來源捕捉事件。能夠以連續(xù)的流式傳輸方式,輕松地從您的日志、指標(biāo)、Web 應(yīng)用、數(shù)據(jù)存儲以及各種 AWS 服務(wù)采集數(shù)據(jù)。
?
過濾器:實(shí)時(shí)解析和轉(zhuǎn)換數(shù)據(jù)
數(shù)據(jù)從源傳輸?shù)酱鎯斓倪^程中,Logstash 過濾器能夠解析各個(gè)事件,識別已命名的字段以構(gòu)建結(jié)構(gòu),并將它們轉(zhuǎn)換成通用格式,以便更輕松、更快速地分析和實(shí)現(xiàn)商業(yè)價(jià)值。
Logstash 能夠動(dòng)態(tài)地轉(zhuǎn)換和解析數(shù)據(jù),不受格式或復(fù)雜度的影響:
- 利用 Grok 從非結(jié)構(gòu)化數(shù)據(jù)中派生出結(jié)構(gòu)
- 從 IP 地址破譯出地理坐標(biāo)
- 將 PII 數(shù)據(jù)匿名化,完全排除敏感字段
- 整體處理不受數(shù)據(jù)源、格式或架構(gòu)的影響
?
輸出:選擇你的存儲,導(dǎo)出你的數(shù)據(jù)
盡管 Elasticsearch 是我們的首選輸出方向,能夠?yàn)槲覀兊乃阉骱头治鰩頍o限可能,但它并非唯一選擇。
Logstash 提供眾多輸出選擇,您可以將數(shù)據(jù)發(fā)送到您要指定的地方,并且能夠靈活地解鎖眾多下游用例。
?
二、安裝?
2.1、下載
Logstash 依賴 JDK1.8 ,因此在安裝之前請確保機(jī)器已經(jīng)安裝和配置好 JDK1.8。
Logstash 下載:https://artifacts.elastic.co/downloads/logstash/logstash-6.5.1.rpm
2.2、安裝
yum install logstash-6.5.1.rpm查看啟動(dòng)文件來了解下文件目錄
vim /etc/systemd/system/logstash.service常用的目錄:
/etc/default/logstash /etc/sysconfig/logstash /usr/share/logstash/bin/logstash/etc/logstash
2.3、設(shè)置執(zhí)行權(quán)限
- 方法1,修改
- 方法2
2.4?、開機(jī)啟動(dòng)?
systemctl start logstash.service systemctl enable logstash.service systemctl status logstash.service2.5、我們先來一個(gè)簡單的案例:
cd /usr/share/logstash bin/logstash -e 'input { stdin { } } output { stdout {} }'可能會有點(diǎn)慢
這時(shí)候輸入個(gè)Hello World
在生產(chǎn)環(huán)境中,Logstash 的管道要復(fù)雜很多,可能需要配置多個(gè)輸入、過濾器和輸出插件。
因此,需要一個(gè)配置文件管理輸入、過濾器和輸出相關(guān)的配置。配置文件內(nèi)容格式如下:
?
# 輸入 input {... }# 過濾器 filter {... }# 輸出 output {... }根據(jù)自己的需求在對應(yīng)的位置配置?輸入插件、過濾器插件、輸出插件?和?編碼解碼插件?即可。
?
三、插件用法
?Logstash 每讀取一次數(shù)據(jù)的行為叫做事件。
在 Logstach 目錄中創(chuàng)建一個(gè)配置文件,名為 logstash.conf(名字任意)。
cd /usr/share/logstash3.1 輸入插件
輸入插件允許一個(gè)特定的事件源可以讀取到 Logstash 管道中,配置在 input {} 中,且可以設(shè)置多個(gè)。
修改配置文件:
input {# 從文件讀取日志信息file {path => "/var/log/elasticsearch/"type => "elasticsearch"start_position => "beginning"} }# filter { # # }output {# 標(biāo)準(zhǔn)輸出stdout { codec => rubydebug } }其中,messages 為系統(tǒng)日志。
?保存文件。鍵入:
bin/logstash -f logstash.conf?
3.2 輸出插件
輸出插件將事件數(shù)據(jù)發(fā)送到特定的目的地,配置在 output {} 中,且可以設(shè)置多個(gè)。
修改配置文件:
input {# 從文件讀取日志信息file {path => "/var/log/error.log"type => "error"start_position => "beginning"}}# filter { # # }output {# 輸出到 elasticsearchelasticsearch {hosts => ["192.168.50.70:9200"]index => "error-%{+YYYY.MM.dd}"} }保存文件。鍵入:
bin/logstash -f logstash.conf?
3.3 編碼解碼插件
編碼解碼插件本質(zhì)是一種流過濾器,配合輸入插件或輸出插件使用。
從上圖中,我們發(fā)現(xiàn)一個(gè)問題:Java 異常日志被拆分成單行事件記錄到 Elasticsearch 中,這不符合開發(fā)者或運(yùn)維人員的查看習(xí)慣。因此,我們需要對日志信息進(jìn)行編碼將多行事件轉(zhuǎn)成單行事件記錄起來。
我們需要配置 Multiline codec 插件,這個(gè)插件可以將多行日志信息合并成一行,作為一個(gè)事件處理。
Logstash 默認(rèn)沒有安裝該插件,需要開發(fā)者自行安裝。鍵入:
bin/logstash-plugin install logstash-codec-multiline修改配置文件:
input {# 從文件讀取日志信息file {path => "/var/log/error.log"type => "error"start_position => "beginning"# 使用 multiline 插件codec => multiline {# 通過正則表達(dá)式匹配,具體配置根據(jù)自身實(shí)際情況而定pattern => "^\d"negate => truewhat => "previous"}}}# filter { # # }output {# 輸出到 elasticsearchelasticsearch {hosts => ["192.168.2.41:9200"]index => "error-%{+YYYY.MM.dd}"} }保存文件。鍵入:
bin/logstash -f logstash.conf4.4 過濾器插件
?
過濾器插件位于 Logstash 管道的中間位置,對事件執(zhí)行過濾處理,配置在 filter {},且可以配置多個(gè)。
本次測試使用 grok 插件演示,grok 插件用于過濾雜亂的內(nèi)容,將其結(jié)構(gòu)化,增加可讀性。
安裝:
bin/logstash-plugin install logstash-filter-grok修改配置文件:
input {stdin {} }filter {grok {match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER :duration}" } } }output {stdout {codec => "rubydebug"} }保存文件。鍵入:
bin/logstash -f logstash.conf啟動(dòng)成功后,我們輸入:
55.3.244.1 GET /index.html 15824 0.043控制臺返回:
[root@localhost logstash-5.6.3]# bin/logstash -f logstash.conf Sending Logstash's logs to /root/logstash-5.6.3/logs which is now configured via log4j2.properties [2017-10-30T08:23:20,456][INFO ][logstash.modules.scaffold] Initializing module {:module_name=>"fb_apache", :directory=>"/root/logstash-5.6.3/modules/fb_apache/configuration"} [2017-10-30T08:23:20,459][INFO ][logstash.modules.scaffold] Initializing module {:module_name=>"netflow", :directory=>"/root/logstash-5.6.3/modules/netflow/configuration"} [2017-10-30T08:23:21,447][INFO ][logstash.pipeline ] Starting pipeline {"id"=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>125} The stdin plugin is now waiting for input: [2017-10-30T08:23:21,516][INFO ][logstash.pipeline ] Pipeline main started [2017-10-30T08:23:21,573][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600} 55.3.244.1 GET /index.html 15824 0.043 {"duration" => "0.043","request" => "/index.html","@timestamp" => 2017-10-30T15:23:23.912Z,"method" => "GET","bytes" => "15824","@version" => "1","host" => "localhost.localdomain","client" => "55.3.244.1","message" => "55.3.244.1 GET /index.html 15824 0.043" }輸入的內(nèi)容被匹配到相應(yīng)的名字中。
?
posted on 2018-12-03 10:49 tianyamoon 閱讀(...) 評論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/tianyamoon/p/10045282.html
總結(jié)
以上是生活随笔為你收集整理的实战ELK(5) Logstash 入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 题解 P4779 【【模板】单源最短路径
- 下一篇: void * 指针和const 指针