2014-10-17 71 views
2

我使用Logstash和ElasticSearch來分析和存儲我的apache日誌中的數據。在我的設置中,logstash正在從文件stdin.log獲取輸入。如何查找Logstash在EOF?

我想創建一個腳本,當logstash在stdin.log末尾達到時,會自動將最新日誌插入到stdin.log中。所以我的問題是,有沒有辦法找到logstash是否已達到eof?我可以使用sincedb文件來達到這個目的嗎?

+0

文件,但爲什麼'stdin.log'的OFFSET列?你可以只從''error.og/access.log'文件中讀取'logstash'進程。 – anubhava 2014-10-17 06:38:11

+0

@anubhava我必須從多個位置讀取多個apache日誌文件。我的腳本將它們下載到本地系統。 – Tariq 2014-10-17 06:40:04

+0

這些位置在同一個主機上? – anubhava 2014-10-17 06:40:50

回答

2

我已經通過比較文件的大小和sincedb文件中提供的偏移來實現我的目標。

currentPosition = tail -1 .sincedb | awk '{printf $4}' 

產生文件logstash文件指針在日誌文件中的當前偏移量。雖然

fileSize = stat -c '%s' stdin.log 

以字節爲單位產生總大小。所以,比較它

if[[ $currentPosition = $fileSize ]]; then #Proceed 
0

你可以在sincedb文件裏面查看inode和當前的偏移量。

+0

我不認爲sincedb是一個sqlite數據庫。它是純文本文件,其中包含inode,設備ID,源ID和以空格分隔的純文本格式的偏移量。 – Tariq 2014-10-20 05:27:53

+0

啊,對不起。看起來像是用sqlite維護的海狸文件。我編輯了答案。謝謝。 – 2014-10-20 16:08:34

0

另一種選擇是lsof -oo10 -p $LOGSTASHPID和審查問題