0x00 概述
我們用Logsatsh寫配置文件的時候,如果讀取的文件太多,匹配的正則過多,會使配置文件動輒成百上千行代碼,可能會造成閱讀和修改困難。這時候,我們可以將配置文件的輸入、過濾、輸出分別放在不同的配置文件里,甚至把輸入、過濾、輸出再次分離,放在不同的文件里。
這時候,后期再需要增刪改查內容的時候,就容易維護了。
0x01 logstash如何讀取多個配置文件
我們知道在啟動logstash的時候,只要加上-f /you_path_to_config_file就可以加載配置文件了,如果我們需要加載多個配置文件,只需要-f /you_path_to_config_directory就可以了。簡單說,就是在-f后面加上目錄就可以。
注意:目錄后面不能加 * 號,否則只會讀取一個文件,但是在讀取日志文件時,*可以匹配所有,比如sys.log*可以匹配所有以sys.log開頭的日志文件,如sys.log1,sys.log2等。
示例如下:
//比如 /home/husen/config/目錄下有 //in1.conf、in2.conf、filter1.conf、filter2.conf、out.conf這5個文件 //我們使用 /logstash-5.5.1/bin/logstash -f /home/husen/config啟動logtstash //logstash會自動加載這個5個配置文件,並合並成1個整體的配置文件
0x02 logstash多個配置文件里的input、filter、output是否相互獨立
答案是:NO!
比如:
## in1.conf內容如下: input{ file{ path=>[ "/home/husen/log/sys.log" ] } } ## in2.conf內容如下: input{ file{ path=>[ "/home/husen/log/error.log" ] } } ## out1.conf如下 elasticsearch { action => "index" hosts => "localhost:9200" index => "from_sys_log" codec => "json" } ## out2.conf如下 elasticsearch { action => "index" hosts => "localhost:9200" index => "from_error_log" codec => "json" }
//這幾個配置文件的目的是: //想把in1.conf讀進來的sys.log的索引建立為from_sys_log //把in.conf讀進來的error.log的索引建立為femo_error_log //logstash-5.5.1/bin/logstash -f /home/husen/config //啟動之后,會發現in1.conf的日志被輸出了兩次,in2.conf讀進來的日志也被輸出了兩次 //結論:logstash讀取多個配置文件只是簡單的將所有配置文件整合到了一起! //如果要彼此獨立,需要自己加字段,然后判斷一下 //比如讀取來不同不同服務器的同樣格式的日志,那么filter是可以共用的 //但是輸出的索引需要分別建立,以提高辨識度
0x03 logstash讀取多個配置文件建議的配置方法
如果要在配置文件中,獨立一些部分,又要共用一些部分,比如我上門提高同樣的日志來自不同的服務器,需要用同樣的filter,但是建立不同的索引的問題,該怎么辦?
建議使用tags或者type這兩個特殊字段,即在讀取文件的時候,添加標識符在tags中或者定義type變量。
示例如下:
## in1.conf內容如下: input{ file{ path=>[ "/home/husen/log/sys.log" ] type => "from_sys" #tags => ["from_sys"] } } ## in2.conf內容如下: input{ file{ path=>[ "/home/husen/log/error.log" ] type => "from_error" #tags => ["from_sys"] } } ## out1.conf如下 if [type] == "from_sys"{ #if "from_sys" in [tags] elasticsearch { action => "index" hosts => "localhost:9200" index => "from_sys_log" codec => "json" } } ## out2.conf如下 if [type] == "from_error"{ #if "from_error" in [tags] elasticsearch { action => "index" hosts => "localhost:9200" index => "from_error_log" codec => "json" } } #特別地,如果要針對不同的類型日志用不同filter來grok解析, #也可以通過類似的方法判斷