实战ELK(5) Logstash 入门
?
?
Logstash 是一個開源的數據收集引擎,它具有備實時數據傳輸能力。它可以統一過濾來自不同源的數據,并按照開發者的制定的規范輸出到目的地。
一、原理
?Logstash 通過管道進行運作,管道有兩個必需的元素,輸入和輸出,還有一個可選的元素,過濾器。
輸入插件從數據源獲取數據,過濾器插件根據用戶指定的數據格式修改數據,輸出插件則將數據寫入到目的地。如下圖:
?
輸入:采集各種樣式、大小和來源的數據
數據往往以各種各樣的形式,或分散或集中地存在于很多系統中。Logstash 支持各種輸入選擇 ,可以在同一時間從眾多常用來源捕捉事件。能夠以連續的流式傳輸方式,輕松地從您的日志、指標、Web 應用、數據存儲以及各種 AWS 服務采集數據。
?
過濾器:實時解析和轉換數據
數據從源傳輸到存儲庫的過程中,Logstash 過濾器能夠解析各個事件,識別已命名的字段以構建結構,并將它們轉換成通用格式,以便更輕松、更快速地分析和實現商業價值。
Logstash 能夠動態地轉換和解析數據,不受格式或復雜度的影響:
- 利用 Grok 從非結構化數據中派生出結構
- 從 IP 地址破譯出地理坐標
- 將 PII 數據匿名化,完全排除敏感字段
- 整體處理不受數據源、格式或架構的影響
?
輸出:選擇你的存儲,導出你的數據
盡管 Elasticsearch 是我們的首選輸出方向,能夠為我們的搜索和分析帶來無限可能,但它并非唯一選擇。
Logstash 提供眾多輸出選擇,您可以將數據發送到您要指定的地方,并且能夠靈活地解鎖眾多下游用例。
?
二、安裝?
2.1、下載
Logstash 依賴 JDK1.8 ,因此在安裝之前請確保機器已經安裝和配置好 JDK1.8。
Logstash 下載:https://artifacts.elastic.co/downloads/logstash/logstash-6.5.1.rpm
2.2、安裝
yum install logstash-6.5.1.rpm查看啟動文件來了解下文件目錄
vim /etc/systemd/system/logstash.service常用的目錄:
/etc/default/logstash /etc/sysconfig/logstash /usr/share/logstash/bin/logstash/etc/logstash
2.3、設置執行權限
- 方法1,修改
- 方法2
2.4?、開機啟動?
systemctl start logstash.service systemctl enable logstash.service systemctl status logstash.service2.5、我們先來一個簡單的案例:
cd /usr/share/logstash bin/logstash -e 'input { stdin { } } output { stdout {} }'可能會有點慢
這時候輸入個Hello World
在生產環境中,Logstash 的管道要復雜很多,可能需要配置多個輸入、過濾器和輸出插件。
因此,需要一個配置文件管理輸入、過濾器和輸出相關的配置。配置文件內容格式如下:
?
# 輸入 input {... }# 過濾器 filter {... }# 輸出 output {... }根據自己的需求在對應的位置配置?輸入插件、過濾器插件、輸出插件?和?編碼解碼插件?即可。
?
三、插件用法
?Logstash 每讀取一次數據的行為叫做事件。
在 Logstach 目錄中創建一個配置文件,名為 logstash.conf(名字任意)。
cd /usr/share/logstash3.1 輸入插件
輸入插件允許一個特定的事件源可以讀取到 Logstash 管道中,配置在 input {} 中,且可以設置多個。
修改配置文件:
input {# 從文件讀取日志信息file {path => "/var/log/elasticsearch/"type => "elasticsearch"start_position => "beginning"} }# filter { # # }output {# 標準輸出stdout { codec => rubydebug } }其中,messages 為系統日志。
?保存文件。鍵入:
bin/logstash -f logstash.conf?
3.2 輸出插件
輸出插件將事件數據發送到特定的目的地,配置在 output {} 中,且可以設置多個。
修改配置文件:
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 編碼解碼插件
編碼解碼插件本質是一種流過濾器,配合輸入插件或輸出插件使用。
從上圖中,我們發現一個問題:Java 異常日志被拆分成單行事件記錄到 Elasticsearch 中,這不符合開發者或運維人員的查看習慣。因此,我們需要對日志信息進行編碼將多行事件轉成單行事件記錄起來。
我們需要配置 Multiline codec 插件,這個插件可以將多行日志信息合并成一行,作為一個事件處理。
Logstash 默認沒有安裝該插件,需要開發者自行安裝。鍵入:
bin/logstash-plugin install logstash-codec-multiline修改配置文件:
input {# 從文件讀取日志信息file {path => "/var/log/error.log"type => "error"start_position => "beginning"# 使用 multiline 插件codec => multiline {# 通過正則表達式匹配,具體配置根據自身實際情況而定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 管道的中間位置,對事件執行過濾處理,配置在 filter {},且可以配置多個。
本次測試使用 grok 插件演示,grok 插件用于過濾雜亂的內容,將其結構化,增加可讀性。
安裝:
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啟動成功后,我們輸入:
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" }輸入的內容被匹配到相應的名字中。
?
posted on 2018-12-03 10:49 tianyamoon 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/tianyamoon/p/10045282.html
總結
以上是生活随笔為你收集整理的实战ELK(5) Logstash 入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 题解 P4779 【【模板】单源最短路径
- 下一篇: void * 指针和const 指针