1.1 基本介紹
1.1.1 作業原理
??Logstash 是由 JRuby 撰寫的,使用基于訊息的簡單架構,在 JVM 上運行(本篇博客主要介紹 Logstash 基本使用,介紹請見 ?【全文檢索_09】Logstash 基本介紹),Logstash 的事件處理流水線有三個主要角色完成:inputs → filters → outputs,必須定義這些程序的配置才能使用 Logstash,盡管不是每一個都必須的,在過濾器的部分,它可以對資料源的資料進行分析,豐富,處理等等,但是我們可以不使用過濾器,在輸出的部分,我們可以有多于一個以上的輸出,

1.1.2 各組件可用插件

1.1.3 啟動引數
| 引數 | 說明 | 舉例 |
|---|---|---|
| -e | 立即執行,使用命令列里的配置引數啟動實體 | ./bin/logstash -e 'input { stdin {} } output { stdout {} }' |
| -f | 指啟動實體的組態檔 | ./bin/logstash -f first-pipeline.conf |
| -t | 測驗組態檔的正確性 | ./bin/logstash -f first-pipeline.conf -t |
| -l | Logstash 內部日志輸出目錄 | ./bin/logstash -f first-pipeline.conf -l logs/test.log |
| -w | 指定 filer 執行緒數量,默認執行緒數是 5 | ./bin/logstash -f first-pipeline.conf -w 10 |
1.2 inputs
1.2.1 File 監聽插件
? 概述
??檔案監聽插件主要用來抓取檔案的變化資訊,將變化資訊封裝成 event 行程處理或者傳遞,這里介紹幾個 File 插件的引數以及簡單示例,詳細內容見
? 官方檔案
? 常用引數
| 引數 | 型別 | 默認值 | 說明 |
|---|---|---|---|
| path | Array | 匹配監聽檔案【必設項】 | |
| exclude | Array | 排除項,排除匹配某個檔案 | |
| close_older | Number | 1 hour | 設定檔案多久秒內沒有更新就關掉對檔案的監聽 |
| delimiter | String | \n | 檔案內容的行分隔符 |
| start_position | beginning / end | end | 選擇 Logstash 最初開始讀取檔案的位置,默認從結尾開始 |
除上述特有引數以外,還有諸多類似于下表的公共引數,所有插件中均可使用公共引數,詳見 ? 官方檔案
| 引數 | 型別 | 默認值 | 說明 |
|---|---|---|---|
| add_field | Hash | {} | 添加自定義欄位 |
| codec | Codec | plain | 輸入輸出時對資料編解碼 |
| enable_metric | Boolean | true | 為此插件實體禁用或啟用度量標準日志記錄 |
| id | String | 添加唯一 id | |
| tags | Array | 添加標簽 |
? 示例
input
file {
path => ["/var/log/*.log", "/var/log/message"]
start_position => "beginning"
}
}
1.2.2 Beats 監聽插件
? 概述
??Beats插件用于建立監聽服務,該輸入插件使 Logstash 接收 Filebeat 或者其他 beat 發送的事件,這里介紹幾個 Beats 插件的引數以及簡單示例,詳細內容見
? 官方檔案
? 常用引數
| 引數 | 型別 | 默認值 | 說明 |
|---|---|---|---|
| host | String | 0.0.0.0 | 監聽的 IP 地址 |
| port | Number | 監聽的埠【必設項】 | |
| ssl | Boolean | false | 是否啟用 ssl |
? 示例
input {
beats {
port => 5044
}
}
1.2.3 TCP 監聽插件
? 概述
??TCP 插件通過 TCP Socket 讀取事件,像標準輸入和檔案輸入一樣,每個事件都假定為一行文本,根據模式,可以接受來自 Client 的連接,也可以連接到 Server,這里介紹幾個 TCP 插件的引數以及簡單示例,詳細內容見
? 官方檔案
? 常用引數
| 引數 | 型別 | 默認值 | 說明 |
|---|---|---|---|
| host | String | 0.0.0.0 | 監聽的 IP 地址 |
| port | Number | 監聽的埠【必設項】 | |
| mode | String | server | 若是 server 則監聽 client 連接;若是 client 則連接 server |
| proxy_protocol | Boolean | false | 是否啟用代理協議,支持 V1 |
| ssl_enable | Boolean | false | 是否啟用 ssl |
? 示例
input {
tcp {
port => 12345
codec => json
}
}
1.2.4 Redis 監聽插件
? 概述
??Redis 插件將從 Redis 實體讀取事件;Redis v1.3.1+ 支持 Logstash 使用的 list 命令,而Redis v1.3.8+ 支持 Logstash 使用的 channel 命令,雖然可以使這些低版本 Redis 正常作業,但在較新的穩定版本中將獲得最佳性能和穩定性,建議使用 2.6.0+ 版本, 詳見 ? 官方檔案
? 常用引數
| 引數 | 型別 | 默認值 | 說明 |
|---|---|---|---|
| host | String | 127.0.0.1 | 監聽的 IP 地址 |
| port | Number | 6379 | 監聽的埠 |
| data_type | String | Redis 作業方式,有三種引數:list/channel/pattern_channel | |
| db | Number | 0 | Redis 資料庫號 |
| key | String | 監聽的健【必設項】 | |
| password | String | 登錄密碼 | |
| ssl | Boolean | false | 是否啟用 ssl |
| timeout | Number | 5 | 超時時間,單位為秒 |
? 示例
input {
redis {
data_type => "list"
key => "logstash-test-list"
host => "127.0.0.1"
port => 6379
}
}
1.2.5 Syslog 監聽插件
? 概述
??Syslog 插件將 syslog 訊息作為事件通過網路讀取,當然,syslog 是一個非常混亂的名詞,默認情況下,此輸入僅支持 RFC3164 syslog,如果提供了功能性的 grok_pattern,則可以讀取和決議一些非標準的 syslog 格式,詳見 ? 官方檔案
? 常用引數
| 引數 | 型別 | 默認值 | 說明 |
|---|---|---|---|
| host | String | 0.0.0.0 | 監聽的 IP 地址 |
| port | Number | 514 | 監聽的埠 |
| proxy_protocol | Boolean | false | 是否啟用代理協議,支持 V1 |
| grok_pattern | String | <%{POSINT:priority}>%{SYSLOGLINE} | 默認值應讀取并正確決議與 RFC3164 完全兼容的 syslog行, 覆寫此值,以使用有效的 grok_pattern 決議非標準行, |
| syslog_field | String | message | 編解碼器在決議其余資料之前先處理資料, |
? 示例
input {
syslog {
port => 12345
codec => cef
syslog_field => "syslog"
grok_pattern => "<%{POSINT:priority}>%{SYSLOGTIMESTAMP:timestamp} CUSTOM GROK HERE"
}
}
1.3 outputs
1.3.1 ElasticSearch 輸出插件
? 概述
??如果打算使用 Kibana Web 界面來分析 Logstash 轉換的資料,請使用 Elasticsearch 輸出插件將資料匯入 Elasticsearch,此輸出僅說明 HTTP 協議,因為它是與 Elasticsearch 進行互動的首選協議,在以前的版本中,可以 transport 協議與 Elasticsearch 通信,該協議現在保留用于節點之間的內部集群通信, Elasticsearch V7.0.0 中已棄用使用傳輸協議與集群進行通信,而在 V8.0.0中已將其洗掉,詳見 ? 官方檔案
? 常用引數
| 引數 | 型別 | 默認值 | 說明 |
|---|---|---|---|
| hosts | URI | [//127.0.0.1] | Elasticsearch 服務地址,配置多個開啟負載均衡 |
| index | String | logstash-%{+yyyy.MM.dd} | 存入 Elasticsearch 索引 |
| ilm_enabled | true/false/auto | auto | 是否啟用 ILM 功能 |
| user | String | 登錄用戶 | |
| password | String | 登錄密碼 | |
| proxy | URI | 轉發 HTTP 代理 | |
| template | Path | 設定模板路徑,不設則使用默認模板 |
? 示例
output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "filebeat-%{type}-%{+yyyy.MM.dd}"
template_overwrite => true
}
}
1.3.2 Redis 輸出插件
? 概述
??用于將事件寫入 Redis 中進行快取,通常情況下 Logstash 的 Filter 處理比較吃系統資源,復雜的 Filter 處理會非常耗時,如果事件產生速度比較快,可以使用 Redis 作為 buffer 使用,詳見 ? 官方檔案
? 常用引數
| 引數 | 型別 | 默認值 | 說明 |
|---|---|---|---|
| host | String | 127.0.0.1 | 監聽的 IP 地址 |
| port | Number | 6379 | 監聽的埠 |
| data_type | list/channel | Redis 作業方式 | |
| db | Number | 0 | Redis 資料庫號 |
| key | String | key 名 | |
| password | String | 登錄密碼 | |
| timeout | Number | 5 | 超時時間,單位為秒 |
? 示例
output {
redis {
host => "127.0.0.1"
port => 6379
data_type => "list"
key => "logstash-list"
}
}
1.3.3 File 輸出插件
? 概述
??File 插件將事件寫入磁盤上的檔案,默認情況下,以 json 格式每行寫入一個事件,可以使用行編解碼器自定義行格式,詳見 ? 官方檔案
? 常用引數
| 引數 | 型別 | 默認值 | 說明 |
|---|---|---|---|
| path | String | 要寫入檔案的路徑【必設項】 | |
| gzip | Boolean | false | 在寫入磁盤之前,先對輸出流進行 gzip 處理, |
| write_behavior | String | append | append: 追加寫;overwrite: 覆寫寫 |
| flush_interval | Number | 2 | 日志檔案重繪間隔,單位為秒 |
? 示例
output {
file {
path => "./test-%{+YYYY-MM-dd}.txt"
}
}
1.4 filters
1.4.1 grok 正則捕獲
? 概述
??Grok 是將非結構化日志資料決議為結構化和可查詢內容的好方法,該工具非常適合 syslog 日志, apache 和其他 Web 服務器日志,mysql 日志,以及通常用于人類而非計算機使用的任何日志格式,詳見 官網檔案
? 示例
filter {
grok {
match => {
"message" => "Duration: %{NUMBER:duration}"
}
}
}
1.4.2 date 時間處理插件
? 概述
??date 時間處理插件用于決議欄位中的日期,然后使用該日期或時間戳作為事件的 logstash 時間戳,詳見 官網檔案
? 示例
filter {
date {
match => [ "logdate", "MMM dd yyyy HH:mm:ss" ]
}
}
1.4.3 mutate 資料修改插件
? 概述
??mutate 資料修改插件提供了豐富的基礎型別資料處理能力,可對欄位執行常規變異,即重命名,洗掉,替換和修改事件中的欄位,詳見 官網檔案
? 示例
filter {
mutate {
split => ["hostname", "."]
add_field => { "shortHostname" => "%{hostname[0]}" }
}
mutate {
rename => ["shortHostname", "hostname" ]
}
}
1.4.4 JSON 格式解碼插件
? 概述
??這是一個 JSON 決議過濾器,它采用一個包含 JSON 的現有欄位,并將其擴展為 Logstash 事件內的實際資料結構,默認情況下,它將決議的 JSON 放在 Logstash 事件的根中,但是可以使用目標配置將此過濾器配置為將 JSON 放入任何任意事件欄位中,詳見 官網檔案
? 示例
filter {
json {
source => "message"
target => "doc"
}
}
1.5 codecs
1.5.1 plain 插件
? 概述
??plain 插件用于純文本,事件之間沒有定界,這主要用于已在其傳輸協議中定義了幀的輸入??和輸出,詳見 官網檔案
? 示例
output {
# 輸出到控制臺
stdout {
codec => plain
}
}
1.5.2 rubydebug 插件
? 概述
??rubydebug 編解碼器將使用 Ruby Amazing Print 庫輸出 Logstash 事件資料,詳見 官網檔案
? 示例
output {
# 輸出到控制臺
stdout {
codec => rubydebug
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/260382.html
標籤:其他
