2014-10-30 47 views
0

我已經編寫了一個腳本來持續將我的S3存儲桶日誌文件全部下拉到我的Logstash服務器,因此可以使用this pull request中的模式解析它。唉,考慮到腳本從頭開始重新創建日誌文件而不是追加它,Logstash的file輸入沒有看到任何新的更改。有任何想法嗎?創建一個可由Logstash解析的組合S3日誌文件

腳本如下:

#!/usr/bin/ruby 

require 'rubygems' 
require 'aws/s3' 

# for non-us buckets, we need to change the endpoint 
AWS.config(:s3_endpoint => "s3-eu-west-1.amazonaws.com") 

# connect to S3 
s3 = AWS::S3.new(:access_key_id => S3_ACCESS_KEY, :secret_access_key => S3_SECRET_KEY) 

# grab the bucket where the logs are stored 
bucket = s3.buckets[BUCKET_NAME] 

File.open("/var/log/s3_bucket.log", 'w') do |file| 

    # grab all the objects in the bucket, can also use a prefix here and limit what S3 returns 
    bucket.objects.with_prefix('staticassets-logs/').each do |log| 
    log.read do |line| 
     file.write(line) 
    end 
    end 
end 

任何幫助嗎?謝謝!

回答

1

我最終改變我的腳本如下:精闢現在

input { 
    file { 
    type => "s3-access-log" 
    path => "/var/log/s3/$S3_BUCKET/$S3_BUCKET/*" 
    sincedb_path => "/dev/null" 
    start_position => "beginning" 
    } 
} 
filter { 
    if [type] == "s3-access-log" { 
     grok { 
      patterns_dir => ["/etc/logstash/conf.d/patterns"] 
      match => { "message" => "%{S3_ACCESS_LOG}" } 
      remove_field => ["message"] 
     } 
     date { 
      match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] 
      remove_field => ["timestamp"] 
     } 
    } 
} 
output { 
    elasticsearch { host => localhost } 
    stdout { codec => rubydebug } 
} 

作品:

#!/bin/bash 
export PATH=$PATH:/bin:/usr/bin 
cd /var/log/s3/$S3_BUCKET/ 
export s3url=s3://$S3_BUCKET/$S3_PREFIX 
s3cmd -c /home/logstash/.s3cfg sync --skip-existing $s3url . 

...並評估一個日誌文件,以匹配替換整個/var/log/s3/my_bucket目錄改變它。

0

我們使用cloudtrail進行審計,並使用帶有云軌編解碼器的s3輸入,該編解碼器會自動將實際日誌從頂部雲軌對象中拉出。

對於您的使用案例,您應該也可以使用s3輸入以獲取實際的日誌內容,然後在任何具有該類型的操作上使用S3 grok過濾器。

編輯:請務必使用S3備份的「備份到存儲桶」選項,因爲它每次都對存儲桶中的所有內容進行操作,即使它只是通過logstash推送最近的日誌。

+0

我有另一個抓取CloudTrail日誌的腳本,它工作的很好 - 因爲它附加到文件的末尾,而不是在每個cron運行中重新創建它。這往往會更好地工作,因爲如果文件被重新創建而不是被修改(如果我錯過了某些東西),似乎sincedb會感到困惑。唉,由於日誌文件的前綴結構不同,這對於S3並不適用... – aendrew 2014-10-30 15:43:49

+0

我們還沒有遇到這個問題,但也許這只是時間問題。我們也可能不會用雲軌記錄來解決這個問題,因爲它只是每15分鐘一個新文件。 雖然看起來你只是從staticassets-logs /前綴(這可能只是一個例子)拉下所有東西,但我會說多個s3輸入可以讓你做到這一點,並增加吞吐量(儘管它可能是痛苦)。 – clly 2014-10-30 16:47:40