本發(fā)明涉及計算機(jī)軟件處理領(lǐng)域,尤其涉及一種基于Logstash分布式的系統(tǒng)日志監(jiān)控系統(tǒng)。
背景技術(shù):
隨著計算機(jī)網(wǎng)絡(luò)端業(yè)務(wù)增加及新業(yè)務(wù)上線,特別是新業(yè)務(wù)在上線初期,需監(jiān)控日志,一方面幫助日志微調(diào),一方面及早發(fā)現(xiàn)程序的問題。現(xiàn)有監(jiān)控日志的查詢是采用tail+grep或者把日志下載后再搜索,這種查詢方法僅適用于主機(jī)少及應(yīng)用少的部署場景。而,在同一種應(yīng)用被部署到幾臺服務(wù)器上而每臺服務(wù)器上又部署著不同的多個應(yīng)用,即多機(jī)多應(yīng)用部署時,需要登陸多臺服務(wù)器,執(zhí)行多個tail-F和grep命令,導(dǎo)致查詢很被動、效率非常低、操作繁瑣。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種基于Logstash分布式系統(tǒng)的日志監(jiān)控系統(tǒng),從而解決現(xiàn)有技術(shù)中存在的前述問題。
為了實(shí)現(xiàn)上述目的,本發(fā)明所述基于Logstash分布式系統(tǒng)的日志監(jiān)控系統(tǒng),所述系統(tǒng)包括:三個獨(dú)立的工作端:
日志收集端,負(fù)責(zé)監(jiān)控本地日志文件的變化,及時把日志文件的最新內(nèi)容收集起來,輸出到日志轉(zhuǎn)發(fā)器暫存;
日志存儲端,接收并存儲從日志轉(zhuǎn)發(fā)器發(fā)送的日志信息;
日志查看分析端,從日志存儲端調(diào)取目標(biāo)日志查看并分析。
優(yōu)選地,一個日志轉(zhuǎn)發(fā)器與多個日志收集端通信連接;一個日志存儲端與多個日志查看分析端通信連接。
優(yōu)選地,所述日志收集端需配置的參數(shù)包括:需要監(jiān)控的文件、監(jiān)控日志輸出的控制臺、監(jiān)控日志輸出的日志轉(zhuǎn)發(fā)器的端口號、監(jiān)控日志輸出的日志轉(zhuǎn)發(fā)器的主機(jī)地址、監(jiān)控日志輸出的日志轉(zhuǎn)發(fā)器的數(shù)據(jù)庫編號、監(jiān)控日志使用的發(fā)布/訂閱模式和監(jiān)控日志發(fā)布的通道名稱。
更優(yōu)選地,所述日志收集端還包括監(jiān)控日志輸出的日志轉(zhuǎn)發(fā)器的備用主機(jī)地址。
優(yōu)選地,所述日志收集端收集到日志文件數(shù)據(jù)后,經(jīng)過文件處理后,暫存到日志轉(zhuǎn)換器中。
優(yōu)選地,所述日志存儲端從日志轉(zhuǎn)發(fā)器讀取日志文本,將讀取的文本修改為format文件后存儲,同時,所述日志存儲端設(shè)置了需存儲的日志寫入文件路徑。
優(yōu)選地,所述日志存儲端實(shí)時或設(shè)置每個一段時間間隔從日志轉(zhuǎn)換器中讀取日志文件。
優(yōu)選地,本系統(tǒng)運(yùn)行的環(huán)境為JAVA。
本發(fā)明所述基于Logstash分布式系統(tǒng)的日志監(jiān)控系統(tǒng)的日志監(jiān)控方法:
S1,日志收集端實(shí)時判斷監(jiān)的日志文件是否更新,如果是,則調(diào)取更新的日志文件并暫存到日志轉(zhuǎn)發(fā)器中;如果否,則返回S1,繼續(xù)判斷;
S2,當(dāng)日志存儲端收到日志轉(zhuǎn)發(fā)器暫存更新日志文件的消息后,接收并存儲從日志轉(zhuǎn)發(fā)器發(fā)送的日志信息;所述日志信息包括:日志文件的輸出地址、日志文件內(nèi)容和收集日志文件的日志收集端;
S3,日志查看分析端在接收到日志存儲端存儲了更新日志文件的消息后,從日志存儲端調(diào)取目標(biāo)日志查看并分析;所述日志查看分析端為處于空閑狀態(tài)的日志查看分析端或查看分析任務(wù)最少的日志查看分析端。
優(yōu)選地,制定任意一個或多個日志查看分析端僅查看并分析由預(yù)先指定一個或多個日志收集端收集到的日志文件,具體為在步驟S3之前包括以下步驟:
判斷日志存儲端收集到的任意一條日志信息中存儲的日志收集端的唯一序列號,將所述唯一序列號與預(yù)先存儲的制定查看并分析列表進(jìn)行比對,如果唯一序列號在查看并分析列表中某個或某些日志查看分析端的編碼號對應(yīng),則將該日志信息發(fā)送到與編碼號對應(yīng)的日志查看分析端中;如果在查看并分析列表并不存在所述唯一序列號,則將該日志信息發(fā)送到隨機(jī)選定的日志查看分析端中。
本發(fā)明的有益效果是:
本發(fā)明將日志收集、日志存儲、日志分析說均使用不同機(jī)器、不同應(yīng)用分開處理;提高收集、存儲和分析的效率,簡化操作。
附圖說明
圖1是基于Logstash分布式系統(tǒng)日志監(jiān)控系統(tǒng)結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施方式僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本實(shí)施例所述基于Logstash分布式系統(tǒng)日志監(jiān)控系統(tǒng),所述系統(tǒng)包括:三個獨(dú)立的工作端:
日志收集端,負(fù)責(zé)監(jiān)控本地日志文件的變化,及時把日志文件的最新內(nèi)容收集起來,輸出到日志轉(zhuǎn)發(fā)器暫存;
日志存儲端,接收并存儲從日志轉(zhuǎn)發(fā)器發(fā)送的日志信息;
日志查看分析端,從日志存儲端調(diào)取目標(biāo)日志查看并分析。
(一)一個日志轉(zhuǎn)發(fā)器與多個日志收集端通信連接;一個日志存儲端與多個日志查看分析端通信連接。
(二)所述日志收集端需配置的參數(shù)包括:需要監(jiān)控的文件、監(jiān)控日志輸出的控制臺、監(jiān)控日志輸出的日志轉(zhuǎn)發(fā)器的端口號、監(jiān)控日志輸出的日志轉(zhuǎn)發(fā)器的主機(jī)地址、監(jiān)控日志輸出的日志轉(zhuǎn)發(fā)器的數(shù)據(jù)庫編號、監(jiān)控日志使用的發(fā)布/訂閱模式和監(jiān)控日志發(fā)布的通道名稱。
所述日志收集端還包括監(jiān)控日志輸出的日志轉(zhuǎn)發(fā)器的備用主機(jī)地址。
所述日志收集端收集到日志文件數(shù)據(jù)后,經(jīng)過文件處理后,暫存到日志轉(zhuǎn)換器中。
(三)所述日志存儲端從日志轉(zhuǎn)發(fā)器讀取日志文本,將讀取的文本修改為format文件后存儲,同時,所述日志存儲端設(shè)置了需存儲的日志寫入文件路徑。
所述日志存儲端實(shí)時或設(shè)置每個一段時間間隔從日志轉(zhuǎn)換器中讀取日志文件。
本實(shí)施例所述基于Logstash分布式系統(tǒng)的日志監(jiān)控系統(tǒng)的日志監(jiān)控方法:
S1,日志收集端實(shí)時判斷監(jiān)的日志文件是否更新,如果是,則調(diào)取更新的日志文件并暫存到日志轉(zhuǎn)發(fā)器中;如果否,則返回S1,繼續(xù)判斷;
S2,當(dāng)日志存儲端收到日志轉(zhuǎn)發(fā)器暫存更新日志文件的消息后,接收并存儲從日志轉(zhuǎn)發(fā)器發(fā)送的日志信息;所述日志信息包括:日志文件的輸出地址、日志文件內(nèi)容和收集日志文件的日志收集端;
S3,日志查看分析端在接收到日志存儲端存儲了更新日志文件的消息后,從日志存儲端調(diào)取目標(biāo)日志查看并分析;所述日志查看分析端為處于空閑狀態(tài)的日志查看分析端或查看分析任務(wù)最少的日志查看分析端。
其中,制定任意一個或多個日志查看分析端僅查看并分析由預(yù)先指定一個或多個日志收集端收集到的日志文件,具體為在步驟S3之前包括以下步驟:判斷日志存儲端收集到的任意一條日志信息中存儲的日志收集端的唯一序列號,將所述唯一序列號與預(yù)先存儲的制定查看并分析列表進(jìn)行比對,如果唯一序列號在查看并分析列表中某個或某些日志查看分析端的編碼號對應(yīng),則將該日志信息發(fā)送到與編碼號對應(yīng)的日志查看分析端中;如果在查看并分析列表并不存在所述唯一序列號,則將該日志信息發(fā)送到隨機(jī)選定的日志查看分析端中。
本發(fā)明所述系統(tǒng)涉及到代碼的主要流程為:
1.安裝JAVA運(yùn)行環(huán)境
2.安裝Logstash
3.編寫Shipper角色的配置文件:shipper.conf
input{file{path=>[#這里填寫需要監(jiān)控的文件
"/data/log/php/php_fetal.log","/data/log/service1/access.log"]}}
output{#輸出到控制臺#stdout{}#輸出到redis redis{host=>
"10.140.45.190"#redis主機(jī)地址port=>6379#redis端口號db=>8#redis
數(shù)據(jù)庫編號data_type=>"channel"#使用發(fā)布/訂閱模式key=>
"logstash_list_0"#發(fā)布通道名稱}}
filter{mutate{#替換元數(shù)據(jù)host的值replace=>["host","10.140.46.134
B[1]"]}}
4.編寫Indexer角色的配置文件:indexer.conf
5.啟動Logstash
#先在Indexer主機(jī)上啟動
nohup/usr/local/logstash-1.4.3/bin/logstash agent-f indexer.conf&>/dev/null&
#然后在Shipper主機(jī)上啟動
nohup/usr/local/logstash-1.4.3/bin/logstash agent-f shipper.conf&>/dev/null&
#最后在Indexer上觀察日志
tail-f/data/log/logstash/all.log
6.日志著色腳本
tail-f/data/log/logstash/all.log|awk'{
if(match($0,/.*(PHP Deprecated|PHP Notice|PHP Fatal error|PHP
Warning|ERROR|WARN).*/)){print"\033[41;37;1m"$0"\033[0m"}
else if(match($0,/.*關(guān)鍵信息1.*/)){print"\033[32;1m"$0"\033[0m"}
else if(match($0,/.*關(guān)鍵信息2.*/)){print"\033[36;1m"$0"\033[0m"}
else{print$0}}'
通過采用本發(fā)明公開的上述技術(shù)方案,得到了如下有益的效果:本發(fā)明將日志收集、日志存儲、日志分析說均使用不同機(jī)器、不同應(yīng)用分開處理;提高收集、存儲和分析的效率,簡化操作。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視本發(fā)明的保護(hù)范圍。