2015-04-01 14 views
6

Tôi đang chèn lấp các nhật ký của mình vào Elasticsearch. Vì vậy, để tạo một chỉ số theo ngày ghi trong đó là dấu thời gian, tôi sử dụng date lọc như thế này:Dấu thời gian Syslog không có năm?

date { 
       "locale" => "en" 
       match => ["timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601"] 
       target => "@timestamp" 
     } 

Tôi đang sử dụng các bản ghi từ syslog, và định dạng syslog timestamp doest không có năm:

# Syslog Dates: Month Day HH:MM:SS 
SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME} 

Vì vậy, sau khi sử dụng bộ lọc ngày, chỉ mục được tạo giống như logstash-2015.12.26 nếu tôi đọc nhật ký ngày 26 tháng 12 năm 2014. Vì dấu thời gian không có sẵn trong nhật ký, nên hãy chọn năm hiện tại theo mặc định.

Bất kỳ ý tưởng nào về cách tạo chỉ mục chính xác?

Trả lời

7

Vắng mặt một năm trong chuỗi được phân tích cú pháp theo Thời gian Joda, Logstash hiện mặc định là năm mà quá trình Logstash được bắt đầu. Xem github.com/logstash-plugins/logstash-filter-date bug #3. Để giải quyết tạm thời, hãy thêm bộ lọc tạm thời để thêm năm chính xác (2014) vào cuối của dấu thời gian và điều chỉnh mẫu date filter của bạn để bao gồm YYYY.

filter { 
    mutate { 
    replace => ["timestamp", "%{timestamp} 2014"] 
    } 
    date { 
    locale => "en" 
    match => ["timestamp", 
       "MMM d HH:mm:ss YYYY", 
       "MMM dd HH:mm:ss YYYY", 
       "ISO8601"] 
    } 
} 
+1

Vì vậy, ngoại trừ mã cứng tạm thời, có không phải là cách giải quyết nào? –

+0

Tôi không tin là có, không. Vâng, ngoại trừ việc đặt lại thời gian trên máy nơi bạn chạy Logstash nhưng đó sẽ là một ý tưởng thực sự tồi tệ. –

0

Nếu các tập tin log bạn đang tải có năm trong tên tập tin, bạn có thể giải nén nó sử dụng một bộ lọc grok, tạo ra một lĩnh vực mới có ngày bạn đã kéo từ syslog cộng năm từ tên tệp.

Một ví dụ về làm thế nào để trích xuất các ngày/giờ từ tên tập tin có thể được tìm thấy ở đây: Logstash: How to use date/time in a filename as an imported field

1

Bạn có thể chuyển đổi chuỗi lại ngày sang một định dạng ngày sử dụng bộ lọc ngày. Theo mặc định, khi bạn sử dụng bộ lọc ngày, ngày (hoặc datetime) của nhật ký của bạn sẽ ghi đè @timestamp. Vì vậy, trong bộ lọc của bạn, bạn không cần nhắm mục tiêu. Bạn chỉ cần sử dụng nó nếu bạn muốn chuyển đổi một chuỗi biến cho đến nay.

Ví dụ: trận đấu => [ "dấu thời gian", "d MMM HH: mm: ss", "MMM DD HH: mm: ss", "ISO8601"]

Các vấn đề liên quan