前言
如果你正在準備 ELK(Elasticsearch、Logstash、Kibana) 相關(guān)的面試,或是想更好地掌握 Logstash 的配置與實踐,那么這篇整理能夠幫助你快速梳理核心概念與常見問答。
本文結(jié)合實際工作中常用的配置、案例及常見“坑”,力求讓讀者在閱讀后對 Logstash 的工作原理、插件配置、調(diào)試方法和性能調(diào)優(yōu)都有一個更系統(tǒng)、更清晰的認識。
目錄
Logstash 在 ELK Stack 中的角色與架構(gòu)
常見 Input 插件及配置示例
常見 Filter 插件及用法
DATA 與 GREEDYDATA 的區(qū)別(Grok)
Mutate 中的 gsub 用法及其他常見操作
如何解析 JSON、XML 等結(jié)構(gòu)化數(shù)據(jù)
CSV、KV 等格式的解析思路
Grok 的作用及如何解析非結(jié)構(gòu)化日志
Date Filter 的用處
如何避免重復(fù)文檔
1. Logstash 在 ELK Stack 中的角色與架構(gòu)
問題簡述
簡要回答
Logstash 主要負責 數(shù)據(jù)的收集、過濾和轉(zhuǎn)換,是 ELK Stack 中至關(guān)重要的“數(shù)據(jù)管道”組件。它可以從各種來源(例如文件、數(shù)據(jù)庫、云存儲等)采集數(shù)據(jù),然后結(jié)合各種 Filter 插件做解析或富化,最后把處理好的結(jié)果發(fā)送到 Elasticsearch(最常見)或其他系統(tǒng)。
一個 Logstash Pipeline 通常包括以下三大階段:
Input:決定從哪里采集數(shù)據(jù);
Filter:對數(shù)據(jù)進行過濾、解析、轉(zhuǎn)換,提取有價值的字段;
Output:將處理完畢的數(shù)據(jù)發(fā)送到目標,如 Elasticsearch、文件、HTTP 等。
官方地址:
https://www./guide/en/logstash/current/index.html
2. 常見 Input 插件及配置示例
問題簡述
常見的 Input 插件有哪些?
如何進行簡單配置?
簡要回答
常見的 Input 插件包括:
File:從本地或掛載文件系統(tǒng)讀取日志文件;
Beats:接收來自 Filebeat、Metricbeat 等 Beats 的數(shù)據(jù);
S3:周期性掃描并讀取 Amazon S3 存儲桶中的日志文件;
JDBC:連接關(guān)系型數(shù)據(jù)庫(MySQL、PostgreSQL 等),定時執(zhí)行 SQL 查詢拉取數(shù)據(jù);
http_poller:定時輪詢 HTTP API,獲取數(shù)據(jù);
Elastic Agent:統(tǒng)一的 Agent,用于收集多種日志、指標并發(fā)送到 Elastic Stack。
示例(以 File Input 為例):
input {
file {
path => "/var/log/application/*.log"
start_position => "beginning"
sincedb_path => "/dev/null"
type => "application_logs"
}}
如需從數(shù)據(jù)庫獲取數(shù)據(jù),可使用 jdbc
插件;如需拉取 HTTP 接口數(shù)據(jù),可使用 http_poller
插件。
官方文檔:
https://www./guide/en/logstash/current/input-plugins.html
3. 常見 Filter 插件及用法
問題簡述
簡要回答
Filter 插件用于“加工”數(shù)據(jù),提取或轉(zhuǎn)換字段,包括:
Grok:基于預(yù)定義的正則模式解析日志;
Mutate:對字段進行增、刪、改、類型轉(zhuǎn)換等操作;
Date:解析時間字符串并轉(zhuǎn)換為日志的時間戳;
CSV:解析 CSV 數(shù)據(jù);
JSON:解析 JSON 數(shù)據(jù);
XML:解析 XML 數(shù)據(jù);
Split:把含有數(shù)組/多行的字段拆分為多個事件;
Kv(Key-Value):把 key=value
形式的字符串分解為字段;
Translate:通過外部字典(yml/json)實現(xiàn)字段翻譯或映射。
官方地址:
https://www./guide/en/logstash/current/filter-plugins.html
4. DATA 與 GREEDYDATA 的區(qū)別(Grok)
問題簡述
簡要回答
實際使用時,需要根據(jù)日志結(jié)構(gòu)來決定是只捕獲到一個分隔符處,還是要把剩余所有內(nèi)容全部捕獲下來。
官方地址:
https://www./guide/en/logstash/current/plugins-filters-date.html
https://discuss./t/what-is-greedydata/122078/2
5. Mutate 中的 gsub 用法及其他常見操作
問題簡述
gsub
在 Logstash 中如何使用?
Mutate Filter 還能做哪些操作?
簡要回答
gsub:可對字符串內(nèi)的特定模式或字符進行全局替換。例如去除換行符、替換某些特殊字符等:
filter {
mutate {
gsub => [
"message", "\n", "",
"message", "\r", ""
]
}
}
rename
:重命名字段
remove_field
:刪除字段
convert
:轉(zhuǎn)換字段類型
update
:更新字段內(nèi)容
官方文檔:
https://www./guide/en/logstash/current/plugins-filters-mutate.html#plugins-filters-mutate-gsub
6. 如何解析 JSON、XML 等結(jié)構(gòu)化數(shù)據(jù)
問題簡述
簡要回答
JSON Filter:指定源字段即可解析 JSON 文本,并將其轉(zhuǎn)為相應(yīng)的字段。
XML Filter:可將 XML 轉(zhuǎn)為類似 JSON 的結(jié)構(gòu),后續(xù)再進行處理。
對于嵌套 JSON,可多次使用 JSON Filter,或者結(jié)合 Ruby Filter/Mutate Filter 進行進一步“拆包”,把多層嵌套變成可直接索引的平鋪字段。
官方文檔:
https://www./guide/en/logstash/current/plugins-filters-json.html
7. CSV、KV 等格式的解析思路
問題簡述
簡要回答
官方地址:
https://www./guide/en/logstash/current/plugins-filters-csv.html
8. Grok 的作用及如何解析非結(jié)構(gòu)化日志
問題簡述
簡要回答
Grok 是核心解決方案。它提供了大量的預(yù)定義正則模式(常見應(yīng)用日志、Web 服務(wù)器日志等),讓我們只需要寫少量的匹配規(guī)則即可提取具體字段。例如:
filter {
grok {
match => {
"message" => "User: %{USERNAME:user}, Action: %{WORD:action}, Status: %{WORD:status}"
}
}
}
這樣就能輕松將 message
字段拆分為 user
, action
, status
等字段。
官方地址:
https://www./guide/en/logstash/current/plugins-filters-grok.html
9. Date Filter 的用處
問題簡述
簡要回答
Date Filter 可以將字符串類型的日期時間解析為 Logstash 的時間戳,以便后續(xù)在 Elasticsearch 中基于時間做檢索和聚合。例如:
filter {
date {
match => ["timestamp", "yyyy-MM-dd HH:mm:ss"]
target => "@timestamp"
}
}
這樣就能保證索引后的數(shù)據(jù)與真實發(fā)生時間保持一致。
官方地址:
https://www./guide/en/logstash/current/plugins-filters-date.html
10. 如何避免重復(fù)文檔
問題簡述
簡要回答
在 Output 配置中使用 document_id
綁定唯一鍵,如:
output {
elasticsearch {
index => "my_index"
document_id => "%{unique_field}"
}
}
對于文件、JDBC 等,借助 sincedb
或 tracking_column
等機制,只讀新增數(shù)據(jù)。
如果有增量更新或 upsert 需求,可以配置 action => "update"
并指定 doc_as_upsert => true
。
官方文檔:
https:///questions/42003462/how-to-set-document-id-in-elastic-using-logstash-config-file
結(jié)束語
以上內(nèi)容只是 Logstash 在日常使用以及面試中 最常見 的問題之一部分,后續(xù)還會就其余條目(如如何監(jiān)控 Logstash 性能、如何調(diào)試 Pipeline、如何使用 Persistent Queue 等)進行更加深入的探討。
未完待續(xù)……
如何對 Elasticsearch、Filebeat、Logstash、Kibana 深度巡檢?
日志解析神器——Logstash中的Grok過濾器使用詳解
怎么把Logstash 通過 Kibana 可視化監(jiān)控起來?
干貨 | Logstash自定義正則表達式ETL實戰(zhàn)
干貨 | Logstash Grok數(shù)據(jù)結(jié)構(gòu)化ETL實戰(zhàn)
logstash_output_kafka:Mysql同步Kafka深入詳解
更短時間更快習得更多干貨!
和全球超2000+ Elastic 愛好者一起精進!
elastic6.cn——ElasticStack進階助手
搶先一步學習進階干貨!