本發(fā)明屬于計(jì)算機(jī)日志信息處理領(lǐng)域,涉及一種使用rsyslog傳輸日志文件夾下的日志到遠(yuǎn)端日志服務(wù)器的系統(tǒng),尤其是涉及一種基于Linux的日志文件夾遠(yuǎn)程傳輸系統(tǒng)。
背景技術(shù):
企業(yè)信息系統(tǒng)中會(huì)包含多種設(shè)備和應(yīng)用,各種復(fù)雜的網(wǎng)絡(luò)設(shè)備和應(yīng)用系統(tǒng)每天都會(huì)產(chǎn)生大量的日志。企業(yè)內(nèi)部一般會(huì)建立統(tǒng)一的日志收集、管理和分析系統(tǒng)。統(tǒng)一的日志管理和分析首先需要匯聚日志,一般匯聚日志是各個(gè)網(wǎng)絡(luò)設(shè)備和應(yīng)用系統(tǒng)將自身產(chǎn)生的日志發(fā)送到指定的日志服務(wù)器上。如何收集不同的網(wǎng)絡(luò)設(shè)備和應(yīng)用系統(tǒng)產(chǎn)生的各種日志成為企業(yè)目前不得不面對(duì)的一個(gè)重要問(wèn)題。
目前大多數(shù)網(wǎng)絡(luò)設(shè)備和應(yīng)用系統(tǒng)的運(yùn)行環(huán)境都是類UNIX操作系統(tǒng)的,而系統(tǒng)日志Syslog協(xié)議是一個(gè)工業(yè)標(biāo)準(zhǔn)協(xié)議(RFC3164),是在一個(gè)IP網(wǎng)絡(luò)中轉(zhuǎn)發(fā)系統(tǒng)日志信息的標(biāo)準(zhǔn)。Syslog協(xié)議允許一個(gè)設(shè)備通過(guò)網(wǎng)絡(luò)把日志信息傳遞給日志信息接受者,通常為日志服務(wù)器。但是Syslog協(xié)議在網(wǎng)絡(luò)安全的數(shù)據(jù)加密、正確性、傳輸認(rèn)證、系統(tǒng)程序等方面存在不可忽視的漏洞,所以Rsyslog協(xié)議應(yīng)用而生。Rsyslog協(xié)議解決了Syslog協(xié)議的相關(guān)漏洞,目前主流的Linux系統(tǒng)默認(rèn)的日志協(xié)議為Rsyslog協(xié)議。所以企業(yè)內(nèi)部一般使用Rsyslog工具來(lái)收集各種網(wǎng)絡(luò)設(shè)備和應(yīng)用系統(tǒng)的日志。
由于網(wǎng)絡(luò)安全以及功能性限制,很多網(wǎng)絡(luò)設(shè)備和應(yīng)用系統(tǒng)產(chǎn)生的日志無(wú)法直接發(fā)送到遠(yuǎn)程服務(wù)器,需要將日志保存為本地文件。對(duì)于如何采集各個(gè)終端系統(tǒng)中的本地文件日志,目前解決方案有兩種:一種是在需要采集日志的主機(jī)上部署日志采集的第三方客戶端,第二種是使用主機(jī)系統(tǒng)默認(rèn)自帶的日志工具Rsyslog來(lái)收集日志。對(duì)于部署日志采集的第三方客戶端這種方式,由于部署的第三方客戶端可能會(huì)搶占系統(tǒng)資源、導(dǎo)致網(wǎng)絡(luò)安全不可控以及系統(tǒng)安全不好隔離等原因,對(duì)現(xiàn)有系統(tǒng)的侵入性較強(qiáng),所以此種方式在對(duì)侵入性敏感的運(yùn)行環(huán)境系統(tǒng)中使用有很大的局限性。由于Rsyslog協(xié)議工具是系統(tǒng)默認(rèn)自帶的,所以不存在對(duì)當(dāng)前系統(tǒng)的侵入性問(wèn)題。同時(shí),Rsyslog工具可以作為采集的客戶端,支持監(jiān)控本地日志文件并通過(guò)網(wǎng)絡(luò)發(fā)送到遠(yuǎn)程日志服務(wù)器上,所以使用Rsyslog工具采集本地文件日志成為日志管理員收集日志的重要選項(xiàng)。
但是使用Rsyslog采集本地文件的日志存在以下不足之處:
一、不支持批量采集本地日志文件或文件夾。管理員需要每次針對(duì)單個(gè)日志文件生成相應(yīng)的rsyslog配置文件。當(dāng)產(chǎn)生的日志位于多個(gè)文件夾中的多個(gè)日志文件時(shí),一方面很難管理需要上傳的日志文件,另一方面對(duì)于日志管理員來(lái)說(shuō)是很大的負(fù)擔(dān)。
二、一般系統(tǒng)生成的日志會(huì)根據(jù)一定的策略進(jìn)行切分或歸類,如每天的日志生成以日期名作為文件名的日志文件,或者同一個(gè)文件夾下可能包含多種類型的日志,如何對(duì)日志文件夾下的日志文件進(jìn)行過(guò)濾從而只上傳指定的某些日志文件是另外一個(gè)需要解決的問(wèn)題。
三、Rsyslog無(wú)法在指定的時(shí)間點(diǎn)文件夾上傳新增的日志。例如,按日期切分的日志,管理員希望在每周末的凌晨收集本周的日志。
四、Rsyslog上傳的日志沒(méi)有日志類型和日志標(biāo)簽,導(dǎo)致在日志服務(wù)器處很不好處理此類日志。
因此,有必要對(duì)現(xiàn)有的日志信息處理方法進(jìn)行改進(jìn)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種基于Linux的日志文件夾遠(yuǎn)程傳輸系統(tǒng),可以指定需要傳輸?shù)娜罩疚募?、遠(yuǎn)程的日志采集服務(wù)器和端口,同時(shí)提供按頻率和定時(shí)觸發(fā)等配置策略,可以靈活方便快速地解決Linux系統(tǒng)上批量上傳本地日志文件到遠(yuǎn)程日志服務(wù)器的問(wèn)題,極大地減少日志采集以及維護(hù)的成本。
本發(fā)明的目的可以通過(guò)以下技術(shù)方案來(lái)實(shí)現(xiàn):
一種基于Linux的日志文件夾遠(yuǎn)程傳輸系統(tǒng),該系統(tǒng)設(shè)置于一Linux主機(jī)中,包括:
日志文件夾監(jiān)控管理器,用于管理日志文件夾監(jiān)控任務(wù),包括對(duì)日志文件夾監(jiān)控任務(wù)的新建、刪除和查詢;
Crontab模塊,用于保存所述日志文件夾監(jiān)控任務(wù),按設(shè)定任務(wù)調(diào)度計(jì)劃觸發(fā)所述日志文件夾監(jiān)控任務(wù);
監(jiān)控任務(wù)處理器,在所述日志文件夾監(jiān)控任務(wù)觸發(fā)時(shí)響應(yīng),用于根據(jù)所述日志文件夾監(jiān)控任務(wù)監(jiān)控目標(biāo)文件夾的變化;
日志文件配置管理器,根據(jù)所述監(jiān)控任務(wù)處理器獲得的目標(biāo)文件夾的變化對(duì)與目標(biāo)文件夾對(duì)應(yīng)的rsyslog配置文件進(jìn)行管理,包括對(duì)rsyslog配置文件的添加和刪除;
Rsyslog模塊,用于根據(jù)所述日志文件夾監(jiān)控任務(wù)將經(jīng)日志文件配置管理器管理后的目標(biāo)文件夾下日志文件中的日志發(fā)送到遠(yuǎn)程日志服務(wù)器中。
所述日志文件夾監(jiān)控管理器包括:
監(jiān)控任務(wù)新建模塊,用于獲取任務(wù)參數(shù)并根據(jù)所述任務(wù)參數(shù)創(chuàng)建日志文件夾監(jiān)控任務(wù),所述任務(wù)參數(shù)包括目標(biāo)文件夾絕對(duì)路徑、任務(wù)調(diào)度計(jì)劃、日志類型和日志標(biāo)簽;
監(jiān)控任務(wù)查詢模塊,用于根據(jù)正在運(yùn)行任務(wù)查詢指令或任務(wù)id指令查詢Crontab模塊中相應(yīng)的日志文件夾監(jiān)控任務(wù)并顯示;
監(jiān)控任務(wù)刪除模塊,用于根據(jù)所有任務(wù)刪除指令或任務(wù)id指令刪除Crontab模塊中相應(yīng)的日志文件夾監(jiān)控任務(wù)。
所述目標(biāo)文件夾絕對(duì)路徑包括精確路徑、Linux通配符路徑或?qū)蛹?jí)通配符路徑。
所述任務(wù)調(diào)度計(jì)劃包括設(shè)定時(shí)間間隔調(diào)度或定時(shí)調(diào)度。
所述監(jiān)控任務(wù)新建模塊根據(jù)任務(wù)參數(shù)創(chuàng)建日志文件夾監(jiān)控任務(wù)時(shí),使用MD5生成任務(wù)id,將任務(wù)調(diào)度計(jì)劃轉(zhuǎn)化為符合crontab語(yǔ)法的時(shí)間策略,并將所創(chuàng)建的日志文件夾監(jiān)控任務(wù)加入至Crontab模塊中。
所述監(jiān)控任務(wù)處理器包括:
rsyslog配置文件字典獲取模塊,用于根據(jù)日志文件夾監(jiān)控任務(wù)調(diào)用日志文件配置管理器,獲取歸屬當(dāng)前日志文件夾監(jiān)控任務(wù)的所有日志文件的rsyslog配置文件字典,記為D1;
MD5值字典獲取模塊,用于根據(jù)日志文件夾監(jiān)控任務(wù)獲取出需要監(jiān)控的目標(biāo)文件夾下的所有日志文件的絕對(duì)路徑,并根據(jù)每個(gè)日志文件的絕對(duì)路徑生成MD5值字典,記為D2;
rsyslog配置文件添加控制模塊,用于對(duì)D2和D1做差集,得到字典D21,即D21=D2-D1,對(duì)字典D21中的每條日志文件信息調(diào)用日志文件配置管理器添加對(duì)應(yīng)的rsyslog配置文件;
rsyslog配置文件刪除控制模塊,用于對(duì)D1和D2做差集,得到字典D12,即D12=D1-D2,對(duì)字典D12中的每條日志文件信息調(diào)用日志文件配置管理器刪除對(duì)應(yīng)的rsyslog配置文件。
所述rsyslog配置文件字典中的鍵存儲(chǔ)的是rsyslog配置文件對(duì)應(yīng)的監(jiān)控文件的絕對(duì)路徑生成的MD5值,值是對(duì)應(yīng)的rsyslog配置文件的絕對(duì)路徑。
所述MD5值字典中的鍵為日志文件對(duì)應(yīng)的MD5值,值為對(duì)應(yīng)的日志文件的絕對(duì)路徑。
所述日志文件配置管理器包括:
rsyslog配置文件新建模塊,用于根據(jù)日志文件的絕對(duì)路徑新建與該日志文件對(duì)應(yīng)的rsyslog配置文件;
rsyslog配置文件刪除模塊,用于根據(jù)MD5值指令或任務(wù)id指令刪除相應(yīng)的rsyslog配置文件,所述任務(wù)id包括單個(gè)任務(wù)id或多個(gè)任務(wù)id;
rsyslog配置文件獲取模塊,用于根據(jù)日志文件的絕對(duì)路徑獲取對(duì)應(yīng)的rsyslog配置文件。
所述Rsyslog配置文件、日志文件以及日志文件監(jiān)控任務(wù)相互映射關(guān)聯(lián)。
與現(xiàn)有技術(shù)相比,本發(fā)明可以達(dá)到如下有益效果:
1、使用Crontab監(jiān)控文件夾下的日志文件,并通過(guò)Rsyslog發(fā)送到遠(yuǎn)端的日志服務(wù)器,無(wú)需針對(duì)管理員針對(duì)單個(gè)日志文件設(shè)置Rsyslog配置文件。
2、當(dāng)監(jiān)控的日志文件夾的日志內(nèi)容發(fā)生變化時(shí),可以增量發(fā)送變化的內(nèi)容到遠(yuǎn)端日志服務(wù)器,大大減少日志傳輸量。
3、可以按時(shí)間頻率、指定時(shí)間點(diǎn)、指定時(shí)間段設(shè)置監(jiān)控任務(wù),這樣可以按指定的頻率、指定時(shí)間點(diǎn)或指定時(shí)間段內(nèi)發(fā)送日志文件到遠(yuǎn)程的日志服務(wù)器,解決需要按頻率、按時(shí)間點(diǎn)、時(shí)間段來(lái)傳輸日志的問(wèn)題。
4、指定監(jiān)控和發(fā)送的日志文件的路徑支持通配符,可以靈活的過(guò)濾出文件夾下需要監(jiān)控和傳輸?shù)娜罩疚募鉀Q根據(jù)過(guò)濾只傳輸用戶希望的日志文件問(wèn)題。
5、用戶可以設(shè)置要發(fā)送的日志文件夾中日志的類型和標(biāo)簽,這樣文件夾下所有日志文件的日志發(fā)送到遠(yuǎn)程服務(wù)器時(shí)候都會(huì)附加用戶設(shè)定的日志類型和標(biāo)簽,便于日志服務(wù)器識(shí)別和處理日志。
附圖說(shuō)明
圖1為本發(fā)明的結(jié)構(gòu)示意圖;
圖2為本發(fā)明日志文件平監(jiān)控任務(wù)的新建流程示意圖;
圖3為本發(fā)明監(jiān)控任務(wù)處理流程示意圖;
圖4為本發(fā)明日志文件的rsyslog配置文件的新建流程示意圖。
具體實(shí)施方式
以下對(duì)本發(fā)明中的實(shí)施方式進(jìn)行清晰、完整的描述,顯然所描述的實(shí)施例僅僅是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域的技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明的保護(hù)范圍。
本發(fā)明實(shí)現(xiàn)了一種使用crontab來(lái)監(jiān)控日志文件夾,并使用Rsyslog將日志文件夾下日志文件中的日志發(fā)送到遠(yuǎn)程日志服務(wù)器的系統(tǒng)。由于本發(fā)明是基于Rsyslog讀取單個(gè)日志文件并上傳到遠(yuǎn)程日志服務(wù)器的基礎(chǔ)實(shí)現(xiàn)的,首先介紹下Rsyslog的整體架構(gòu)、配置文件的管理和實(shí)現(xiàn)單個(gè)日志文件并傳輸?shù)竭h(yuǎn)程日志服務(wù)器的方法,便于對(duì)后續(xù)本發(fā)明實(shí)現(xiàn)的Rsyslog傳輸日志文件夾有更好的理解。
1)Rsyslog整體架構(gòu)
Rsyslog整體架構(gòu)由日志的輸入、過(guò)濾和輸出三部分組成,對(duì)應(yīng)為input、filter和output三類插件。input插件負(fù)責(zé)輸入日志,filter插件用來(lái)過(guò)濾日志,output插件用來(lái)輸出日志。Input插件中的imfile插件支持讀取本地的某個(gè)日志文件,output插件中的omtcp或omudp支持使用tcp或udp協(xié)議將讀取的日志發(fā)送到遠(yuǎn)程的日志服務(wù)器。
2)Rsyslog配置文件管理
Rsyslog以配置文件的形式來(lái)管理所有插件,默認(rèn)配置文件為/etc/rsyslog.conf,其他配置文件可以存放在/etc/rsyslog.d目錄下。rsyslog啟動(dòng)時(shí)會(huì)首先加載/etc/rsyslog.conf,然后加載/etc/rsyslog.d目錄下的所有配置。/etc/rsyslog.d目錄下的配置文件會(huì)重載/etc/rsyslog.conf配置文件中的功能。Rsyslog支持以一定的語(yǔ)法來(lái)定制化需要使用的插件,通常按功能需要將需要配置的功能寫入到一個(gè)配置文件中并放在/etc/rsyslog.d目錄下,這樣便于維護(hù),同時(shí)對(duì)于其它的功能不產(chǎn)生影響。例如需要讀取兩個(gè)日志文件A和B并發(fā)送到遠(yuǎn)程服務(wù)器,可以在/etc/rsyslog.d目錄下創(chuàng)建日志文件A和B對(duì)應(yīng)的Rsyslog配置文件A.conf和B.conf。
3)單個(gè)日志文件的讀取和傳輸
對(duì)于單個(gè)日志文件的讀取使用Rsyslog的imfile插件模塊。Imfile插件需要指定讀取的日志文件的絕對(duì)路徑,輸出使用omtcp插件以TCP協(xié)議傳輸日志。在/etc/rsyslog.d下新建此文件對(duì)應(yīng)的配置文件,將插件功能寫入到對(duì)應(yīng)的配置文件中,重啟Rsyslog即可實(shí)現(xiàn)讀取某個(gè)日志文件并傳輸?shù)竭h(yuǎn)程服務(wù)器的功能。
如圖1所示,本發(fā)明提供的基于Linux的日志文件夾遠(yuǎn)程傳輸系統(tǒng)設(shè)置于一Linux主機(jī)中,包括日志文件夾監(jiān)控管理器1、Crontab模塊2、監(jiān)控任務(wù)處理器3、日志文件配置管理器4和Rsyslog模塊5,其中,日志文件夾監(jiān)控管理器1用于管理日志文件夾監(jiān)控任務(wù),包括對(duì)日志文件夾監(jiān)控任務(wù)的新建、刪除和查詢;Crontab模塊2用于保存日志文件夾監(jiān)控任務(wù),按設(shè)定任務(wù)調(diào)度計(jì)劃觸發(fā)日志文件夾監(jiān)控任務(wù);監(jiān)控任務(wù)處理器3在日志文件夾監(jiān)控任務(wù)觸發(fā)時(shí)響應(yīng),用于根據(jù)日志文件夾監(jiān)控任務(wù)監(jiān)控目標(biāo)文件夾的變化;日志文件配置管理器4根據(jù)監(jiān)控任務(wù)處理器3獲得的目標(biāo)文件夾的變化對(duì)與目標(biāo)文件夾對(duì)應(yīng)的rsyslog配置文件進(jìn)行管理,包括對(duì)rsyslog配置文件的添加和刪除;Rsyslog模塊5用于根據(jù)日志文件夾監(jiān)控任務(wù)將經(jīng)日志文件配置管理器4管理后的目標(biāo)文件夾下日志文件中的日志發(fā)送到遠(yuǎn)程日志服務(wù)器中。
1、日志文件夾監(jiān)控管理器
日志文件夾監(jiān)控管理器1包括監(jiān)控任務(wù)新建模塊、監(jiān)控任務(wù)查詢模塊和監(jiān)控任務(wù)刪除模塊,監(jiān)控任務(wù)新建模塊,用于獲取任務(wù)參數(shù)并根據(jù)任務(wù)參數(shù)創(chuàng)建日志文件夾監(jiān)控任務(wù),任務(wù)參數(shù)包括目標(biāo)文件夾絕對(duì)路徑、任務(wù)調(diào)度計(jì)劃、日志類型和日志標(biāo)簽;監(jiān)控任務(wù)查詢模塊,用于根據(jù)正在運(yùn)行任務(wù)查詢指令或任務(wù)id指令查詢Crontab模塊中相應(yīng)的日志文件夾監(jiān)控任務(wù)并顯示;監(jiān)控任務(wù)刪除模塊,用于根據(jù)所有任務(wù)刪除指令或任務(wù)id指令刪除Crontab模塊中相應(yīng)的日志文件夾監(jiān)控任務(wù)。
1.1新建監(jiān)控任務(wù)
用戶調(diào)用日志文件夾監(jiān)控任務(wù)管理裝置,輸入需要監(jiān)控的目標(biāo)文件夾的絕對(duì)路徑、任務(wù)調(diào)度計(jì)劃、日志類型和日志標(biāo)簽來(lái)創(chuàng)建一個(gè)監(jiān)控任務(wù)。監(jiān)控任務(wù)支持的功能包括:
1)目標(biāo)文件夾的絕對(duì)路徑
●支持遞歸監(jiān)控目標(biāo)文件夾下的所有子文件夾,如/usr/local/2016/下有以日志命令的文件夾08-30和08-31兩個(gè)子文件夾,這兩個(gè)子文件夾下各有兩個(gè)日志文件access.log和error.log,則設(shè)置目標(biāo)文件夾參數(shù)為/usr/local/2016會(huì)監(jiān)控/usr/local/2016下所有子文件的日志文件。
●支持Linux通配符,如需要監(jiān)控文件夾/usr/local/下所有的error開(kāi)頭的日志文件,可以設(shè)置為/usr/local/error*。
●支持文件路徑的層級(jí)通配符,如文件夾路徑為/usr/local/2016*/apache*,此文件夾路徑會(huì)監(jiān)控/usr/local路徑下所有以2016開(kāi)頭的子文件夾中以apache開(kāi)頭的日志文件。
2)任務(wù)調(diào)度計(jì)劃
任務(wù)調(diào)度計(jì)劃定義了一個(gè)日志文件夾監(jiān)控任務(wù)何時(shí)觸發(fā)監(jiān)控,支持的策略包括:
a.每隔一個(gè)時(shí)間間隔調(diào)用監(jiān)控任務(wù),時(shí)間間隔可以指定為秒、分、小時(shí)、天、星期、月和年。
b.定時(shí)調(diào)用監(jiān)控任務(wù),定時(shí)調(diào)用監(jiān)控任務(wù)會(huì)在用戶指定的某個(gè)時(shí)間點(diǎn)或時(shí)間段調(diào)用監(jiān)控任務(wù)。
c.支持crontab的時(shí)間語(yǔ)法,可以靈活設(shè)置各種調(diào)度時(shí)間計(jì)劃。
3)日志類型
日志類型用來(lái)表明當(dāng)前監(jiān)控的文件下的日志的類型,一個(gè)監(jiān)控任務(wù)對(duì)應(yīng)一個(gè)日志類型。發(fā)送日志文件的日志時(shí)候會(huì)自動(dòng)在日志生成模板上附加上日志類型,便于遠(yuǎn)程日志服務(wù)器根據(jù)不同的日志類型對(duì)日志進(jìn)行相應(yīng)的處理。
4)日志標(biāo)簽
可以設(shè)置日志標(biāo)簽來(lái)給要監(jiān)控的文件夾下的日志設(shè)置標(biāo)簽,當(dāng)傳輸監(jiān)控文件夾下的日志到遠(yuǎn)程日志服務(wù)器時(shí),會(huì)自動(dòng)給每條日志附加上日志標(biāo)簽,便于遠(yuǎn)程日志服務(wù)器進(jìn)行相應(yīng)的歸類、聚合等操作。日志標(biāo)簽參數(shù)以逗號(hào)分隔,可以設(shè)置多個(gè)日志標(biāo)簽,也可以不設(shè)置日志標(biāo)簽。
如圖2所示,新建監(jiān)控任務(wù)的流程如下:
1)用戶調(diào)用日志文件夾監(jiān)控任務(wù)管理器,并輸入?yún)?shù):監(jiān)控的目標(biāo)文件夾的絕對(duì)路徑dirPath、任務(wù)調(diào)度計(jì)劃schedule、日志類型logType和日志標(biāo)簽logTag。
2)在目標(biāo)文件夾存在且已有日志文件夾監(jiān)控任務(wù)中不存在相同的目標(biāo)文件夾時(shí),日志文件夾監(jiān)控任務(wù)管理器根據(jù)dirPath+schedule+logType+logTag使用MD5生成任務(wù)jobId。
3)日志文件夾監(jiān)控任務(wù)管理器解析任務(wù)調(diào)度計(jì)劃schedule參數(shù),將schedule參數(shù)轉(zhuǎn)換為對(duì)應(yīng)的crontab的語(yǔ)法的時(shí)間策略。
4)日志文件夾監(jiān)控任務(wù)管理器在Linux的crontab中添加一條新的任務(wù),crontab中的監(jiān)控任務(wù)格式如下:
schedule文件夾監(jiān)控處理命令dirPath參數(shù)logType參數(shù)logTag參數(shù)#jobId。
1.2查詢監(jiān)控任務(wù)
通過(guò)日志文件夾監(jiān)控任務(wù)管理器查詢當(dāng)前所有正在運(yùn)行的日志文件夾監(jiān)控任務(wù)或根據(jù)任務(wù)id查詢某個(gè)監(jiān)控任務(wù)。
查詢所有監(jiān)控任務(wù)的處理流程:
1)監(jiān)控任務(wù)管理器掃描crontab下的所有任務(wù)。
2)對(duì)步驟1中返回的每條任務(wù)內(nèi)容通過(guò)正則表達(dá)式過(guò)濾掉不符合本系統(tǒng)監(jiān)控任務(wù)格式的其他任務(wù),得到是由本發(fā)明的監(jiān)控任務(wù)管理器生成的日志文件夾監(jiān)控任務(wù)內(nèi)容。
3)對(duì)步驟2中過(guò)濾出的監(jiān)控任務(wù)解析其schedule、dirPath、logType、logTag和jobId,并返回。
根據(jù)任務(wù)id查詢某個(gè)監(jiān)控任務(wù)處理流程:
1)監(jiān)控任務(wù)管理器直根據(jù)任務(wù)id掃描crontab下的所有任務(wù),過(guò)濾出包含任務(wù)id的指定行的任務(wù)內(nèi)容
2)對(duì)步驟2中過(guò)濾出的監(jiān)控任務(wù)解析其schedule、dirPath、logType、logTag和jobId,并返回
1.3刪除監(jiān)控任務(wù)
日志文件夾監(jiān)控任務(wù)管理器支持刪除所有監(jiān)控任務(wù)和根據(jù)任務(wù)id刪除指定的某個(gè)任務(wù)。
刪除所有監(jiān)控任務(wù)的處理流程:
1)監(jiān)控任務(wù)管理器掃描crontab下的所有任務(wù)。
2)對(duì)步驟1中返回的每條任務(wù)內(nèi)容通過(guò)正則表達(dá)式過(guò)濾掉不是本發(fā)明的監(jiān)控系統(tǒng)產(chǎn)生的任務(wù)。
3)刪除步驟2中過(guò)濾出的監(jiān)控任務(wù)
4)刪除/etc/rsyslog.d下由日志文件配置管理裝置生成的所有配置文件。
根據(jù)任務(wù)id刪除監(jiān)控任務(wù)處理流程:
1)監(jiān)控任務(wù)管理器直根據(jù)任務(wù)id掃描crontab下的所有任務(wù),過(guò)濾出包含任務(wù)id的指定行的任務(wù)內(nèi)容。
2)刪除步驟1中過(guò)濾出的該任務(wù)id的監(jiān)控任務(wù)。
3)通知日志文件配置管理裝置刪除/etc/rsyslog.d目錄下任務(wù)id為該任務(wù)id的所有配置文件。
2、監(jiān)控任務(wù)處理器
監(jiān)控任務(wù)處理器3主要負(fù)責(zé)監(jiān)控日志文件夾的變化,并通知日志文件配置管理裝置對(duì)/etc/rsyslog.d目錄下的配置文件進(jìn)行相應(yīng)的新建、刪除操作,包括rsyslog配置文件字典獲取模塊、MD5值字典獲取模塊、rsyslog配置文件添加控制模塊和rsyslog配置文件刪除控制模塊。
每次監(jiān)控任務(wù)的觸發(fā),都會(huì)調(diào)用日志文件夾的監(jiān)控處理,如圖3所示,日志文件夾的監(jiān)控處理流程如下:
1)根據(jù)監(jiān)控任務(wù)id,調(diào)用日志文件配置管理裝置,獲取歸屬當(dāng)前監(jiān)控任務(wù)的所有日志文件的rsyslog配置文件字典,假設(shè)該集合為D1,該字典D1中的鍵存儲(chǔ)的是rsyslog配置文件對(duì)應(yīng)的監(jiān)控文件的絕對(duì)路徑生成的MD5值,值是對(duì)應(yīng)的rsyslog配置文件的絕對(duì)路徑。
2)根據(jù)監(jiān)控任務(wù)傳遞的目標(biāo)文件夾的絕對(duì)路徑,調(diào)用系統(tǒng)命令ls,獲取出需要監(jiān)控的文件夾下的所有日志子文件的絕對(duì)路徑,并根據(jù)每個(gè)日志文件的絕對(duì)路徑生成MD5值字典,假設(shè)該字典為D2。字典D2的鍵為日志文件對(duì)應(yīng)的MD5值,字典的值為對(duì)應(yīng)的日志文件的絕對(duì)路徑。
3)做操作D2和D1做差集,得到字典D21,即D21=D2-D1,則字典D21即為監(jiān)控的目標(biāo)文件夾中新增的日志文件。在D21非空集時(shí),對(duì)字典D21中的每條日志文件信息調(diào)用日志文件配置管理裝置來(lái)添加一條rsyslog配置文件。
4)做操作D1和D2做差集,得到字典D12,即D12=D1-D2,則字典D12即為監(jiān)控的目標(biāo)文件夾中已刪除的日志文件的信息。在D12非空集時(shí),對(duì)D12中每條信息,調(diào)用日志文件配置管理裝置來(lái)刪除對(duì)應(yīng)的rsyslog配置文件。
3、日志文件配置管理器
日志文件配置管理器4的功能包括新建、刪除、獲取日志文件對(duì)應(yīng)的配置文件、根據(jù)監(jiān)控任務(wù)id刪除對(duì)應(yīng)配置文件以及刪除所有的配置文件。日志文件配置管理器4包括rsyslog配置文件新建模塊、rsyslog配置文件刪除模塊和rsyslog配置文件獲取模塊。
3.1Rsyslog配置文件與日志文件和監(jiān)控的對(duì)應(yīng)策略
每個(gè)監(jiān)控任務(wù)監(jiān)控的文件夾下的日志文件都會(huì)在/etc/rsylog.d目錄下對(duì)應(yīng)的有一個(gè)配置文件,此配置文件用來(lái)監(jiān)控、讀取對(duì)應(yīng)的日志文件中的日志并發(fā)送到遠(yuǎn)端的日志服務(wù)器。當(dāng)監(jiān)控的日志文件中新增了日志,Rsyslog能夠發(fā)現(xiàn)日志文件的變化,并增量日志文件中新增的日志發(fā)送到遠(yuǎn)程日志服務(wù)器。當(dāng)監(jiān)控的日志文件被刪除時(shí),對(duì)應(yīng)的Rsyslog配置文件也需要被刪除。當(dāng)某個(gè)監(jiān)控任務(wù)被刪除時(shí),也需要?jiǎng)h除該監(jiān)控任務(wù)監(jiān)控的日志文件對(duì)應(yīng)的Rsyslog配置文件。
為了滿足以上的功能,需要日志文件的Rsyslog配置文件建立與日志文件以及監(jiān)控任務(wù)的映射關(guān)系。本發(fā)明通過(guò)配置文件名來(lái)實(shí)現(xiàn)此種關(guān)聯(lián)映射,定義Rsyslog配置文件的文件名格式為:jobId_fileMD5.conf,jobId為監(jiān)控任務(wù)id,fileMD5為對(duì)應(yīng)的日志文件的MD5值。
3.2新建Rsyslog配置文件
如圖4所示,新建日志文件對(duì)應(yīng)的Rsyslog配置文件的流程如下:
1)根據(jù)日志文件的絕對(duì)路徑生成MD5值。
2)/etc/rsyslog.d下的配置文件名中是否有包含該MD5值的文件,如果有,說(shuō)明已經(jīng)此日志文件已經(jīng)被監(jiān)控,則直接返回。
3)如果步驟2中,沒(méi)有文件名中包含MD5值的文件,則在/etc/rsyslog.d目錄下新建配置文件,配置文件名為jobId_fileMD5.conf。
4)向jobId_fileMD5.conf中寫入如下配置項(xiàng),以實(shí)現(xiàn)日志文件的增加上傳、發(fā)送的日志帶有日志類型和日志標(biāo)簽的內(nèi)容,如下:
$InputFileName${FILEPATH}
$InputFileTag${TAGNAME}
$InputFileStateFile stat-${CUR_TIMESTAMP}-${TAGNAME}
$InputFileSeverity info
$InputFilePersistStateInterval 20000
$RepeatedMsgReduction off
\$InputRunFileMonitor
\$InputFilePollInterval 3
\$template AnyrobotFormat_${APPNAME},\"<%pri%>%protocol-version%%ti mestamp:::date-rfc3339%%HOSTNAME%%app-name%%procid%%msgid%[${AUTH_TOKEN}@${Anyrobot_DISTRIBUTION_ID}tag=\\\"${TAG}\\\"]%ms g%\n\"
If$programname=='${APPNAME}'then@@${SYSLOG_SERVER_HOST}:${SYSLOG_SERVER_PORT};AnyrobotFormat_${APPNAME}
if$programname=='${APPNAME}'then~
3.3刪除Rsyslog配置文件
刪除Rsyslog配置文件分三種:
a)根據(jù)日志文件的MD5值刪除配置文件
直接查找/etc/rsyslog.d目錄中文件名中包含有該MD5的配置文件,然后直接刪除。
b)根據(jù)任務(wù)id刪除配置文件
直接查找/etc/rsyslog.d目錄中文件名包含該任務(wù)id的配置文件,然后直接刪除。
c)刪除監(jiān)控任務(wù)的所有的配置文件
獲取所有的監(jiān)控任務(wù)的id,然后依次刪除對(duì)應(yīng)的監(jiān)控任務(wù)下的配置文件。
3.4獲取日志對(duì)應(yīng)的配置文件
由于日志文件的Rsyslog配置文件名中包含了日志文件絕對(duì)路徑上的MD5值,所以要獲取一個(gè)日志文件的配置文件直接根據(jù)其絕對(duì)路徑的MD5值即可獲取到對(duì)應(yīng)的配置文件。
本發(fā)明的實(shí)施需要一臺(tái)Linux主機(jī),該主機(jī)上除了安裝Rsyslog和Crontab外,還需要安裝由三個(gè)Linux Shell腳本:task_manager.sh、task_process.sh和config_manage.sh,分別對(duì)應(yīng)日志文件夾監(jiān)控管理器、監(jiān)控任務(wù)處理器和日志文件配置管理器。task_manager.sh用來(lái)創(chuàng)建文件夾監(jiān)控任務(wù),實(shí)施時(shí)只需要調(diào)用task_manager.sh根據(jù)輸入?yún)?shù)來(lái)創(chuàng)建相應(yīng)的任務(wù)即可。創(chuàng)建監(jiān)控任務(wù)task_manager.s的調(diào)用方式如下:
./manage_monitor_task.sh-a--hour hour--minute minute--day_of_week day_of_week--day_of_month day_of_month--month month-h host-p port--filepath/path/to/your/logfile--logType type_of_your_log--tag"custom_attributes_of_your_log
各個(gè)參數(shù)功能如下:
-a:添加一個(gè)監(jiān)控任務(wù)
--hour:按小時(shí)頻率調(diào)用監(jiān)控任務(wù)
--minute:按分鐘頻率調(diào)用監(jiān)控任務(wù)
--day_of_week:指定調(diào)用為每個(gè)星期的某一天
--day_of_month:指定調(diào)用的每月的日期
--month month:指定調(diào)用的月份
-h:遠(yuǎn)程主機(jī)ip
-p:遠(yuǎn)程主機(jī)接受日志的端口
--filepath:監(jiān)控的文件夾的絕對(duì)路徑
--logType:日志類型??梢栽O(shè)置多個(gè)標(biāo)簽,以逗號(hào)分隔
--tag:日志標(biāo)簽
下面是具體實(shí)施案例:
實(shí)施案例一按時(shí)間間隔定期監(jiān)控日志文件夾,并將其下所有日志文件上傳到遠(yuǎn)程日志服務(wù)器
案例環(huán)境:存在apache日志文件夾A,需要將文件夾A下的所有日志文件上傳到IP為192.168.84.90、端口為5000的日志匯聚服務(wù)器上,并且設(shè)置日志類型為apache,標(biāo)簽設(shè)置為access和error,同時(shí)監(jiān)控任務(wù)觸發(fā)周期設(shè)置為每一小時(shí)。
實(shí)施方案:
1.如果僅要按每5分鐘觸發(fā)監(jiān)控任務(wù),則配置時(shí)間觸發(fā)策略為:--minute 5,完整調(diào)用命令如下:
./manage_monitor_task.sh-a--minute 5-h 192.168.84.90-p 5000--filepath/A/*--logType apache--tag access,error
2.如果要按每2小時(shí)的時(shí)間間隔定期監(jiān)控日志文件夾,則配置時(shí)間觸發(fā)策略為:--hour 2,完整調(diào)用命令如下:
./manage_monitor_task.sh-a--hour 2-h 192.168.84.90-p 5000--filepath/A/*--logType apache--tag access,error
實(shí)施案例二按指定日期點(diǎn)監(jiān)控日志文件夾,并將其下所有日志文件上傳到遠(yuǎn)程日志服務(wù)器
案例背景:用戶的日志存放在日志文件夾A下,用戶需要指定的時(shí)間點(diǎn)來(lái)觸發(fā)監(jiān)控文件夾的任務(wù),來(lái)收集新增的日志,其它背景條件和實(shí)施案例一中相同。
實(shí)施方案:
1.如果用戶需要在每周日晚上的20:00收集文件夾A下新增的日志,則設(shè)置文件夾監(jiān)控的時(shí)間觸發(fā)策略為:--hour 20:00-day_of_week 7,完整調(diào)用命令如下:
./manage_monitor_task.sh-a---hour 20:00-day_of_week 7-h 192.168.84.90-p5000--filepath/A/*--logType apache--tag access,error
2.如果用戶需要在每月5號(hào)的晚上21:00到23:00,每半小時(shí)觸發(fā)一下監(jiān)控任務(wù),則設(shè)置監(jiān)控的時(shí)間觸發(fā)策略為:--hour 21:00-23:00--day_of_month 5,完整調(diào)用命令如下:
./manage_monitor_task.sh-a--hour 21:00-23:00--day_of_month 5-h192.168.84.90-p 5000--filepath/A/*--logType apache--tag access,error
實(shí)施案例三根據(jù)日志文件名過(guò)濾監(jiān)控文件中日志文件并上傳遠(yuǎn)程日志服務(wù)器
案例背景:系統(tǒng)生成的日志根據(jù)時(shí)間生成相應(yīng)的日志文件,例如日志文件存放在文件夾A,文件夾A下有根據(jù)日期生成的日志文件:2016-07-01.log,2016-07-02.log,2016-08-02.log、2016-08-04.log、2016-08-03.log五個(gè)日志文件。其他相關(guān)背景和實(shí)施例一中相同。
實(shí)施方案:
1.如果僅需要監(jiān)控和上傳8月份產(chǎn)生的日志文件,則配置監(jiān)控的目的文件夾路徑為:/A/2016-08*.log,完整命令如下:
./manage_monitor_task.sh-a--hour 1-h 192.168.84.90-p 5000--filepath/A/2016-08*.log--logType apache--tag access,error
2.如果僅需監(jiān)控和上傳每個(gè)月2號(hào)產(chǎn)生的日志文件,則配置監(jiān)控的文件夾路徑為:/A/2016-*-02.log,完整命令如下:
./manage_monitor_task.sh-a--hour 1-h 192.168.84.90-p 5000--filepath/A/2016-*-02.log--logType apache--tag access,error。