本文主要概述 Logstash 的一些最受歡迎的輸入插件,以大致了解 Logstash 的用途;相關的環境及軟體資訊如下:CentOS 7.9、Logstash 8.2.2,
1、什么是 Logstash input 插件
Logstash 用作日志管道,用于偵聽已配置日志源(例如,應用程式,資料庫,訊息代理)的事件,使用過濾器和編解碼器對其進行轉換和格式化,并運送到輸出位置(例如,Elasticsearch 或 Kafka),

Logstash 如此強大,因為它可以聚合來自多個源(例如 Redis,Apache HTTP 或 Apache Kafka)的日志,這些源位于多個節點上,并將它們放入由多個作業程式和執行緒管理的高效日志處理佇列中, Logstash 優化了輸入和輸出目標之間的日志流,從而確保了容錯性能和資料完整性, Logstash 的最大優點之一是可以使用眾多過濾器和編解碼器,這些過濾器和編解碼器可以從日志中提取模式并將日志轉換為適合在 Elasticsearch 和 Kibana 中進行分析的豐富資料物件, 這些功能使原始日志能夠快速轉換為可操作的物件,從而使你的業務受益,
輸入插件是 Logstash 管道的重要組件,它們充當輸入日志源和 Logstash 過濾功能之間的中間件, 通常,每個輸入插件都允許連接到指定的日志源提供程式并使用其 API 提取日志,
2、查看 Logstash 的所有 input 插件
在 Logststash 的安裝目錄下,可通過如下的命令來查詢所有內置的 Logstash 的輸入插件:
./bin/logstash-plugin list --group input
3、常用 input 插件
3.1、Beats 家族
Elastic Beats 系列包括許多針對各種資料(日志,指標,事件等)的攝入, Filebeat 用于日志傳送,Packetbeat 用于網路資料傳送以及 Metricbeat 用于系統和應用程式指標監視, Elasticsearch 還提供 Windows 事件日志的 Winlogbeat,審計資料的 Auditbeat 和正常運行時間監視的 Heartbeat,其中的一些 Beat(例如 Filebeat)允許將日志直接傳送到你的 Elasticsearch 索引,
隨之而來的自然問題是:為什么要使用 Logstash 呢?
主要有兩個原因:- 日志聚合,如果你有多個節點,并且有許多應用程式實體在生成日志,則需要一個集中的日志記錄目標來進行日志管理,日志聚合背后的基本動機是, 你希望將日志放在一個地方以進行更好的處理,你還想控制與 Elasticsearch 的索引連接的數量,如果連接過多,你的 Elasticsearch 集群可能會遇到超時,高佇列數量和不良回應能力,所有這些都會對性能產生不利影響,為避免這種情況,你可以使用 Logstash 匯總 Beats 收集的日志,并使用有效的 Logstash 作業執行緒創建有效的日志佇列和批處理,這可以大大減少索引操作的次數,從而減少 Elasticsearch 的負擔,
- Logstash 非常適合日志過濾和日志增強,日志過濾在生產環境中非常有用,在生產環境中,你希望排除某些日志資料以節省存盤空間并使分析更加集中,另外,許多日志資料都以難以處理的非結構化純文本格式提供,要準備此原始資料以在 Elasticsearch 中進行分析和聚合,你需要將日志訊息轉換為結構化的資料物件,并使用人類可讀的欄位來映射到特定型別,例如字串,日期,整數等,轉換日志資料后,你可以應用各種指標和匯總以在 Kibana 中產生有價值的可視化效果,或者通過你的大資料分析工具或 ML 演算法發現資料模式,
在 Logstash 中使用 Beats 組件非常簡單:
input { beats { port => 5044 } } output { stdout { codec => rubydebug } }
然后在 Beats 中配置 Logstash 的地址即可,如:localhost:5044,
3.2、Exec 及 File Input Plugins
Exec 插件使你可以定期在系統中運行 bash 命令,并將其輸出發送到 Logstash, 此功能對于監視系統狀態并在 Kibana 中可視化它可能很有用,如:
input { exec { interval => 10 command => "top -n 1 -b|head -5" } } output { stdout { codec => rubydebug } }
該配置每隔 10 秒運行 top 命令并把結果輸出到 Logstash 的控制臺上,
File input plugin 允許通過類似于 Unix 系統上的 tail -0F 命令的方式尾隨事件來流式處理檔案中的事件, 本質上,此插件用作檔案監視程式,將檔案末尾的新行視為新事件, 此功能使該插件可用于在添加新行時跟蹤更改的日志檔案, 另外一個好處是,該插件會存盤它跟蹤的每個檔案的位置,這樣就可以在停止和重新啟動 Logstash 時從中斷處上次的位置開始處理檔案,
input { file { path => ["/home/hadoop/app/nginx-1.8.0/logs/access.log"] #type => "system" start_position => "beginning" } } output { stdout { codec => rubydebug } }
該配置監控 Nginx 的訪問日志并把日志內容輸出到 Logstash 的控制臺上,
3.3、Tracking Network Events, Chat, and Email Servers
Logstash 為各種網路,行程間通信(IPC),聊天和電子郵件協議生成的事件和日志提供了出色的支持;Logstash 支持 UDP,Unix 域套接字,Websocket,HTTP 等,
3.3.1、UDP Plugin
該插件允許通過 UDP 網路讀取訊息, 插件唯一需要的配置欄位是 port,它指定 Logstash 偵聽的 UDP 埠,
input { udp { port => 25000 workers => 4 codec => json } } output { stdout { codec => rubydebug } }
你可以選擇使用 JSON 編解碼器將 UDP 訊息轉換為 JSON 物件,還可以使用 queue_size 引數控制訊息佇列的大小,并使用 worker 引數指定用于處理 UDP 資料包的作業執行緒數,
另起一個終端,運行如下命令進行測驗:
nc -u 127.0.0.1 25000
3.3.2、Unix Domain Sockets
UNIX 套接字是一種行程間通信(IPC)機制,它允許在同一計算機上運行的行程之間進行雙向資料交換, 你可以使用此插件捕獲應用程式發出的 Unix 域套接字事件(訊息), 與檔案輸入插件類似,每個事件等于套接字發出的一行文本, 該插件支持兩種模式:服務器和客戶端, 在服務器模式下,它將監聽客戶端連接,在客戶端模式下,觀察客戶端何時連接到服務器,
input { unix { mode => "server" path => "/var/logstash/ls" data_timeout => 2 } } output { stdout { codec => rubydebug } }
該配置使用服務器模式,并將其配置為偵聽在 /var/logstash/ls 路徑中生成的 Unix 域套接字事件,
3.3.3、Websocket Input Plugin
WebSocket 協議使 Web 客戶端(例如,瀏覽器)和 Web 服務器之間的互動具有較低的開銷,從而實作了實時資料傳輸并允許在保持連接打開的同時來回傳遞訊息, Websocket 插件允許從打開的 Websocket 連接讀取事件, 唯一必需的引數是打開 Websocket 連接的 URL,
websocket Input plugin 默認的情況下沒有安裝的,可按照如下的方法進行安裝:
bin/logstash-plugin install logstash-input-websocket
插件當前支持的唯一模式是客戶端模式,在該模式下,插件連接到 Websocket 服務器并從服務器接收 Websocket 訊息,
input { websocket { mode => "client" url => "ws://127.0.0.1:8080/websocket" codec => "plain" } } output { stdout { codec => rubydebug } }
3.3.4、HTTP Input Plugin
HTTP Input Plugin 將 HTTP Post 請求(帶有由應用程式發送的正文)轉換為插件指定的端點,Logstash 會將訊息轉換為事件, 應用程式可以將 JSON,純文本或任何格式的資料傳遞到端點,并使用相應的編解碼器來轉換訊息,通過利用 Logstash 中可用的龐大插件生態系統,你可以直接在應用程式中觸發 Logstash 中的可操作事件,并將其發送到 Elasticsearch, 該插件支持 HTTP 基本身份驗證標頭和 SSL,可通過 https 安全地發送資料,并提供驗證客戶端證書的選項,
input { http { host => "0.0.0.0" port => 8088 } } output { stdout { codec => rubydebug } }
啟動 Logstash 后,可以使用客戶端工具(如 Postman) 呼叫 http://10.49.196.11:8088 服務,給 Logstash 發送資料,
3.3.5、HTTP Poller
HTTP Poller 插件是 Logstash 中另一個基于 HTTP 的輸入插件,它允許呼叫 HTTP API,將回應訊息轉換為事件并將訊息沿管道發送(例如,發送到 Elasticsearch),
input { http_poller { urls => { test1 => { url => "http://localhost:8080/test" method => get } } request_timeout => 60 # Supports "cron", "every", "at" and "in" schedules by rufus scheduler # schedule => { every => "10s"} schedule => { cron => "* * * * * UTC"} codec => "json" # A hash of request metadata info (timing, response headers, etc.) will be sent here metadata_target => "http_poller_metadata" } } output { stdout { codec => rubydebug } }
該配置每隔一分鐘呼叫 http://localhost:8080/test 介面,并把請求的元資訊存盤在 http_poller_metadata 子段中,
3.4、發布/訂閱管道
在物聯網,微服務和實時應用程式時代,應用程式之間的資料流和實時訊息傳遞非常流行, Logstash 對各種訊息代理和資料流平臺都有很好的支持,
3.4.1、Apache Kafka Plugin
Logstash Kafka 插件可輕松與 Kafka Producer 和 Consumer API 集成,你可以使用默認偏移量管理策略指定多個要訂閱的主題,該插件的一個強大功能是,你可以運行多個讀取同一主題的 Logstash 實體,以便在多個物理機之間分配負載,要使用此功能,你需要指定一個 group_id,該組創建一個由多個處理器組成的單個邏輯訂戶,主題中的訊息將分發到具有相同 group_id 的所有 Logstash 實體,
input { kafka { bootstrap_servers => "localhost:9092" topics => "test" group_id => "mygroup" } } output { stdout { codec => rubydebug } }
3.4.2、RabbitMQ Plugin
該插件使用 March Hare 包與 RabbitMQ 進行通信;大多數配置選項直接映射到標準的 RabbitMQ and AMQP 概念,
input { rabbitmq { host => "localhost" port => 5672 user => "admin" password => "admin" queue => "test" durable => true codec => "plain" } } output { stdout { codec => rubydebug } }
4、總結
Logstash 支持各種流行的日志和事件源, 特別是,你可以將輸入插件用于許多主要的網路協議,訊息代理,IRC 服務器,資料庫 和 Web 應用程式,更重要的是,Logstash 可以通過網路接收 bash 命令,系統日志和其他系統資訊,本地檔案和檔案,將它們轉換為有價值的事件,并過濾和豐富日志,以供 ELK 堆疊中的后續分析或你喜歡的任何其他日志分析解決方案 , 所有這些功能使 Logstash 成為用于傳輸和規范化資料的 ELK 堆疊的強大組件,
本文中介紹的插件只是 Logstash 輸入插件的很小的一部分,可查看 Logstash 官方檔案 了解更多資訊,
參考:https://blog.csdn.net/UbuntuTouch/article/details/104260743
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/518918.html
標籤:Java
上一篇:Redis常見問題
