Logstash可以用if-else來作filter或output(官網說明),如果要區分Web專用或者SQL專用,需要特定pattern可以用來當作if-else判斷的依據,支援一般比對、regex模糊比對和。
假設虛擬機log裡會帶host名稱或種類,且可以用來判斷為Web或SQL (如:ldpweb01, lddweb02, prodsql01, prodsql02),則可以這樣寫:
filter{
if [host] =~ /.*web.*/ {
mutate { add_field => { "[log_type]" => "web" } }
}
if [host] =~ /.*sql.*/ {
mutate { add_field => { "[log_type]" => "sql" } }
}
}
如果符合if condition,logstash會在message裡加入一個log_type的欄位,那在kibana呈現時就當作query條件或是當作metric的x or y軸。
教你一個更有效率的方法
在 /etc/logstash/ 下建立一個清單文件
vi device_list.yaml
"10.1.1.123": "web"
"10.1.1.124": "web"
"10.1.1.125": "sql"
"10.1.1.126": "test"
改寫一下 conf.d/xxx.conf
filter {
.....
translate {
field => "host"
destination => "device_type"
dictionary_path => '/etc/logstash/device_list.yaml'
refresh_interval => '300'
}
.....
這樣就能依據原來的 vm 作簡單的分類,「device_type」是新的辨視欄位