Logstash知識點

Logstash的基本知識

Logstash是什麼

logstash是開源數據收集引擎,可以用數據的統一和擴充。

相關版本支持(看這裏

工作原理(看這裏

  • 輸入
    file:從文件系統上的文件讀取,非常類似於UNIX命令 tail -0F
    syslog:在知名端口514上偵聽syslog消息並根據RFC3164格式進行解析
    redis:使用redis通道和redis列表從redis服務器讀取。Redis經常在集中式Logstash安裝中用作“代理”,該安裝會將來自遠程Logstash“託運人”的Logstash事件排隊。
    beats:處理 Filebeat其他beat發送的數據
  • 過濾器(使用方式
    date:用於完成日期轉換,可以將日期類型的字符串生成爲一個新的字段,用以替代默認的
    json:將字段內容轉爲JSON格式
    grok:將符合某個正則規則的內容重新定義爲另一個字段中。Logstash預定義了很多的正則規則,通過這些文件還可以學習到很多正則高級寫法,這些規則存放在以下目錄:/usr/local/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns
    mutate:該插件也是使用很頻繁的插件,可以對字段內容做處理,比如重命名,刪除,替換和修改事件中的字段。
    dissect:基於分割符來切割字段,避免grok消耗CPU的問題,性能是grok的三倍左右。但是需要每行日誌格式相似,並有明顯的分割符
    geoip:添加有關IP地址地理位置的信息(還在Kibana中顯示驚人的圖表!)
    fingerprint :創建一個或多個字段的一致哈希(指紋),並將結果存儲在新字段中。
  • 輸出
    流行的Logstash輸出插件
    file:輸出到文件
    email:收到輸出時,它會根據某些條件發送電子郵件
    elasticsearch:輸出到elasticsearch集羣,這是Logstash最常見和最推薦的輸出
    stdout:標準輸出流
    redis:事件寫入redis隊列,並用作許多ELK實現的代理
    mongodb:輸出到mongodb
    kafka:輸出到kafka topic
  • 編解碼器:
    編解碼器基本上是流過濾器,可以作爲輸入或輸出的一部分進行操作。編解碼器使您可以輕鬆地將消息的傳輸與序列化過程分開。流行的編解碼器有:
    json:以JSON格式編碼或解碼數據。
    plain插件:主要用於事件之間沒有分隔的純文本。
    multiline:將多行文本事件(例如java異常和stacktrace消息)合併爲一個事件。

常用的過濾器和編解碼器插件

執行模型

Logstash事件處理管道協調輸入,過濾器和輸出的執行。
Logstash在管道階段(輸入→過濾器和過濾器→輸出)之間使用內存中有界隊列來緩衝事件。爲了幫助防止數據丟失,可以持久隊列,將正在進行的事件持久保存到磁盤。死信隊列爲Logstash無法處理的事件提供磁盤存儲。默認情況下,死信隊列是禁用的。

Logstash配置文件

logstash.yml

包含Logstash配置標誌。您可以在此文件中設置標誌,而不是在命令行中傳遞標誌。您在命令行上設置的所有標誌都將覆蓋logstash.yml文件中的相應設置。有關更多信息,請參見logstash.yml

pipelines.yml

包含用於在單個Logstash實例中運行多個管道的框架和說明。有關更多信息,請參見多管道

jvm.options

包含JVM配置標誌。使用此文件來設置總堆空間的初始值和最大值。您也可以使用此文件設置Logstash的語言環境。在單獨的行上指定每個標誌。此文件中的所有其他設置都被視爲專家設置。

log4j2.properties

包含log4j 2庫的默認設置。有關更多信息,請參見Log4j2配置

startup.options (Linux)

在安裝Logstash軟件包時,system-install腳本將在安裝過程結束時執行,並使用中指定的設置startup.options來設置選項,例如用戶,組,服務名稱和服務描述。

Logstash.config(看這裏

基本結構:

input {
  插件{
    具體插件配置,插件的配置包括插件名稱,後跟該插件的一組設置
    name => value
  }
}

filter {
  插件{
    具體插件配置
  }
}

output {
  插件{
    具體插件配置
  }
}

插件配置值的支持數據類型:

  • Array:users => [ {id => 1, name => bob}, {id => 2, name => jane} ]
  • Lists:path => [ "/var/log/messages", "/var/log/*.log" ]
  • Boolean:ssl_enable => true
  • Bytes:my_bytes => "1024" 表示1024個字節
  • codec:codec => "json"
  • Hash:match => { "field1" => "value1" "field2" => "value2" }
  • Number:port => 33
  • Password:my_password => "123456"
  • URI:my_uri => "http://foo:[email protected]"
  • Path:my_path => "/tmp/logstash"
  • String:"直接就是一個字符串"

logstash.config的配置示例

條件語句和臨時字段(看這裏

  1. 使用if條件語句可以在特定條件下過濾或輸出事件,語法是:
    if EXPRESSION {
      ...
    } else if EXPRESSION {
      ...
    } else {
      ...
    }
  2. 使用@metadata代表臨時字段,可用於條件語句中,該字段的值不會出現這結果集中

Logstash中的通信

同一個Logstash實例中連接多個管道的信息,請參閱多管道管道到管道通信

不同的Logstash實例之間建立通信,請使用Logstash到Logstash的通信,或使用中間隊列,例如Kafka或Redis。

利用X-Pack配置集中式管道管理

x-pack介紹,在logstash中的可行的配置在Kibana中配置集中式管道管理

使用Logstash和相關的性能調優

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章