logstash 配置文件语法介绍
大家好,我是藍胖子,之前在構建服務監控實踐那個系列里,有提到用logstash來做日志的收集,但是對于logstash的配置文件語法沒有做很詳細的介紹,今天就來詳細聊聊logstash配置文件的語法。
很多時候一門新框架的配置都會有自己獨有的配置文件格式,是先簡單了解配置文件語法結構,能夠讓自己更加系統的掌控新框架的各項配置。
文件結構
先來看看logstash的配置文件結構,配置文件分為3部分,input輸入,filter過濾,output輸出。配置文件是以{} 來定義區段的。如下,
input { }
filter { }
output { }
顧名思義,它們分別表示logstash的輸入來源,輸入來源可以是文件,filebeat等等。filter則是定義對輸入源內容進行二次處理,過濾提取等等。outpout則是將處理后的內容重新輸出到其他組件,比如elasticsearch或者通過http接口輸出到自定義服務中。
插件
在每一個區段內,可以引入logstash的插件,插件的配置同樣也是用{}包裹起來的。如下,我在input區域內部定義了stdin和syslog插件。
input { stdin {} syslog {} }
不過通常在filebeat和logstash搭配使用時,通常是將logstash的輸入來源定義為filebeat的插件,如下
input {
beats {
port => 5044
}
}
而filebeat的配置文件中,則是將輸出源設置為logstash,如下是filebeat的部分配置文件示例,
output.logstash:
hosts: 192.168.0.2:5054
不同的插件具體有哪些配置,有哪些插件可以使用,參考官方文檔 https://www.elastic.co/guide/en/logstash/current/plugins-inputs-beats.html
語法規則
介紹了配置文件的結構后,我們來看看配置文件的語法規則。
聲明賦值變量
在配置文件中,賦值一個變量使用的是=>符號,像前面提到把輸入源定義為filebeat時,就將port變量賦值為5044了。
port => 5044
除了數值類型,logstash還會有字符串,布爾,數組,hash類型,它們寫法如下,
字符串類型
host =>"hostname"
布爾類型
debug => true
數組類型
match => ["datetime", "UNIX", "ISO8601"]
hash類型
options => { key1 =>"value1", key2 =>"value2" }
引用變量
聲明賦值完變量后,如何引用呢,在logstash中是通過[]對變量進行引用,如下,我聲明了一個變量debug, 然后引用它。
filter {
debug => true
}
output {
if [debug]==true {
...
}
}
如果是那種結構體類型,比如json,或者hash結構,那么可以使用多重[]得到其值,如下,
output {
options => { key1 =>"value1", key2 =>"value2" }
if [options][key1]=="2" {
...
}
}
內插變量
logstash還支持內插變量,如下,我在使用elasticsearch插件時,需要定義輸出的索引名稱,這個名稱是根據日志來源中不同的內容建立不同的索引名稱。[fields][log_type]引用的則是出入來源中的變量名。
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "easymonitor-%{[fields][log_type]}-%{+yyyy.MM.dd}"
}
}
條件判斷
其實在介紹變量引用的時候,你應該已經看到if語句,除此以外if else語句也是支持的。如下所示,
if "_grokparsefailure" not in [tags] {
...
} else if [status] !~ /^2\d\d/ and [url] == "/noc.gif" {
...
} else {
...
}
logstash支持的判斷表達式包括
比較大小: ==, !=, <, >, <=, >= ·
正則: =~, !~
包含關系: in, not in
布爾表達式: and, or, nand, xor
對表達式取反操作: !(表達式)
注意logstash是不支持&& 和 || 表示并且和或關系的,應該用and 和or代替。
條件表達式定義多個輸出源
使用條件表達式,在條件表達式中定義不同的輸出插件,達到根據不同內容輸出到不同組件的目的,以下是配置案例,通過判斷日志的等級,等級為error或者日志類型是es的日志時,則輸出到報警服務中。
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "easymonitor-%{[fields][log_type]}-%{+yyyy.MM.dd}"
}
if [loglevel] == "Error" or [fields][log_sub_type]=="es" {
http {
http_method => "post"
url => "http://192.168.0.2:36060/alert_log"
}
}
}
總結
logstash的配置文件語法還算是很簡單的,靈活的使用條件表達式可以定義多個輸出源,想要掌握logstash更多的配置還是要去官網掌握一些插件的用法,不過在看懂語法的基礎上,學習插件的用法就是水到渠成的事情了。
總結
以上是生活随笔為你收集整理的logstash 配置文件语法介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聊聊分布式 SQL 数据库Doris(六
- 下一篇: 链表K个节点的组内逆序调整问题