ELK學習筆記之logstash將配置寫在多個文件


 

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解析,
#也可以通過類似的方法判斷

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM