2015-05-06 19 views
14

Tôi đang cố gắng để phân tích một logfile sử dụng grokLogstash lĩnh vực tùy chọn trong logfile

Mỗi dòng của logfile đã lĩnh vực phân cách bằng dấu phẩy:

13,home,ABC,Get,,Private, Public,1.2.3 ecc... 

Tôi đang sử dụng trận đấu như thế này: match => [ "message", "%{NUMBER:requestId},%{WORD:ServerHost},%{WORD:Service}, ...

Câu hỏi của tôi là: Tôi có thể cho phép trường tùy chọn không? Đôi khi một số tệp có thể rỗng ,,

Có mẫu phù hợp với chuỗi như thế này 2.3.5 không? (một loại số phiên bản)

+0

Ngoài bộ lọc grok, bộ lọc [csv] (http://logstash.net/docs/latest/filters/csv) được thực hiện để phân tích cú pháp loại dữ liệu này. –

Trả lời

44

Tại nó là cơ sở, grok được dựa trên biểu thức thông thường, vì vậy bạn có thể bao quanh một mô hình với ()? để làm cho nó không bắt buộc - ví dụ (%{NUMBER:requestId})?,

Nếu không có một mô hình grok phù hợp với nhu cầu của bạn, bạn luôn có thể tạo một trích xuất có tên như sau: (?<version>[\d\.]+) sẽ trích xuất thành phiên bản, một chuỗi có bất kỳ số chữ số và dấu chấm nào trong đó.

+0

Câu trả lời hay! Tôi có cùng một vấn đề và câu trả lời của bạn đã giúp tôi tiết kiệm thời gian để tìm kiếm! – Allen

+0

Vâng, điều này cũng làm việc hoàn hảo cho tôi. @Alcanzar Tôi đã nhìn thấy bạn trả lời các câu hỏi khác - bạn đề xuất những tham khảo tốt nào? Tôi thấy có một khoảng trống ngữ cảnh giữa tài liệu grok và tham chiếu reg-exp cơ bản! – scipilot

+0

Chỉ cần quan sát, rằng công cụ sửa đổi tùy chọn dường như không áp dụng cho mẫu GREEDYDATA. Ví dụ: '(% {GREEDYDATA: x})? % {IP: ipaddr} (% {GREEDYDATA: y})? ' – ifelsemonkey

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