相關名詞:
Pipeline:
input-filter-output的三階段處理流程
隊列管理
插件生命周期管理
Logstash Event:
內部流轉的數據表現形式
原始數據在input被轉換為Event,在output event被轉換為目標格式數據
在配置文件中可以對Event中的屬性進行增刪改查
Logstash架構圖:

Batcher負責批量的從queue中取數據
Queue分類:
- In Memory : 無法處理進程Crash、機器宕機等情況,會導致數據丟失
- Persistent Queue In Disk:可處理進程Crash等情況,保證數據不丟失,保證數據至少消費一次,充當緩沖區,可以替代kafka等消息隊列的作用
性能分析:

持久隊列的基本配置:
queue.type:persisted #默認是memory queue.max_bytes:4gb #隊列存儲最大數據量
線程:

相關配置:
pipeline.worksers | -w # pipeline線程數,即filter_output的處理線程數,默認是cpu核數 pipeline.batch.size | -b #Batcher一次批量獲取的待處理文檔數,默認是125,可以根據輸出進行調整,越大會占用越多的heap空間,可以通過jvm.options調整 pipeline.batch.delay | -u #Batcher等待的時長,單位為ms
Logstash配置文件:
logstash設置相關的配置文件(在conf文件夾中,setting files)
- logstash.yml:logstash相關配置,比如node.name、path.data、pipeline.workers、queue.type等,這其中的配置可以被命令行參數中的相關參數覆蓋
- jvm.options:修改jvm的相關參數,比如修改heap size等
pipeline配置文件:定義數據處理流程的文件,以.conf結尾
logstash.yml配置項:
node.name: 節點名稱,便於識別 path.data: 持久化存儲數據的文件夾,默認是logstash home目錄下的data path.config: 設定pipeline配置文件的目錄(如果指定文件夾,會默認把文件夾下的所有.conf文件按照字母順序拼接為一個文件) path.log: 設定pipeline日志文件的目錄 pipeline.workers: 設定pipeline的線程數(filter+output),優化的常用項 pipeline.batch.size/delay: 設定批量處理數據的數據和延遲 queue.type: 設定隊列類型,默認是memory queue.max_bytes: 隊列總容量,默認是1g
logstash命令行配置項:
--node.name -f --path.config #pipeline路徑,可以是文件或者文件夾 --path.settings #logstash配置文件夾路徑,其中要包含logstash.yml -e --config.string #指明pipeline內容,多用於測試使用 -w --pipeline.workers -b --pipeline.batch.size --path.data --debug -t --config.test_and_exit
建議:線上環境推薦采用配置文件的方式來設定logstash的相關配置,這樣可以減少犯錯的機會,而且文件便於進行版本化管理;命令行形式多用來進行快速的配置測試、驗證、檢查等
logstash多實例運行方式:
bin/logstash --path.settings instance1 bin/logstash --path.settings instance2 不同instance中修改logstash.yml,自定義path.data,確保其不相同即可
pipeline配置簡介:
Pipeline用於配置input、filter和output插件,框架如下所示:
input {
...
}
filter {
...
}
output {
...
}
Pipeline配置語法:
主要有如下的數值類型:
布爾類型Boolean:
IDFailed => true
數值類型Number:
port => 33
字符創類型String:
name => "Hello world"
數組Array/List:
users => [{id => 1,name => bod},{id => 2,name => jane}]
path => ["/var/log/messages","/var/log/*.log"]
哈希類型Hash:
match => {
"field1" => "value1"
"field2" => "value2"
}
在配置中可以引用Logstash Event的屬性(字段),主要有如下兩種方式:
- 直接引用字段值
使用[]即可,嵌套字段寫多層[]即可 if [path] =~ "access" if [ua][os] =~ "windows"
- 在字符串中以sprintf方式引用
使用%{}來實現
req => "request is %{request}"
us => "ua is %{[ua][os]}"
支持條件判斷語法,從而擴展了配置的多樣性,主要格式如下:
if EXPRESSION{
...
}else if EXPRESSION{
...
}else{
...
}
表達式主要包含如下操作符:
| - | 操作符 |
|---|---|
| 比較 | ==、!=、<、>、<=、>= |
| 正則是否匹配 | =~、!~ |
| 包含(字符串或者數組) | in、not in |
| 布爾操作符 | and、or、nand、xor、! |
| 分組操作符 | () |

logstash監控運維:
API
x-pack
API:Logstash提供了豐富的api來查看Logstash的當前狀態
http://192.168.20.101:9600 http://192.168.20.101:9600/_node http://192.168.20.101:9600/_node/stats http://192.168.20.101:9600/_node/hot_threads # curl http://192.168.20.101:9600/_node/stats?pretty
原文:https://blog.csdn.net/wfs1994/article/details/80862225
