2014-09-22 19 views
10

Vì vậy, tôi có nền tảng web in tệp JSON theo yêu cầu chứa một số dữ liệu nhật ký về yêu cầu đó. Tôi có thể định cấu hình một số quy tắc về thời điểm nó nên đăng nhập nội dung, chỉ ở các cấp độ nhất định, v.v ...Nhập tệp JSON vào Logstash + Elasticsearch + Kibana

Bây giờ, tôi đã từng đùa với lô Logstash + Elasticsearch + Kibana3 và tôi rất muốn tìm cách để xem những nhật ký đó ở Kibana. Câu hỏi của tôi là, có cách nào để làm cho Logstash nhập khẩu các loại tập tin, hoặc tôi sẽ phải viết một plugin đầu vào tùy chỉnh cho nó? Tôi đã tìm kiếm và xem những gì tôi đã thấy, các plugin được viết bằng Ruby, một ngôn ngữ mà tôi không có kinh nghiệm.

Trả lời

10

Logstash chỉ là công cụ để chuyển đổi các loại tệp syslog thành JSON và tải chúng vào elasticsearch (hoặc graphite, hoặc ...).

Vì tệp của bạn đã có trong JSON nên bạn không cần đăng nhập. Bạn có thể tải chúng trực tiếp vào elasticsearch bằng cách sử dụng curl.

Xem Import/Index a JSON file into Elasticsearch

Tuy nhiên, để làm việc tốt với Kibana, các file JSON của bạn cần phải ở mức tối thiểu.

  1. Phẳng - Kibana không grok lồng nhau cấu trúc JSON. Bạn cần một băm đơn giản của các cặp khóa/giá trị.

  2. Có dấu thời gian có thể nhận dạng.

Những gì tôi đề nghị là tìm kiếm các tệp JSON logstash và xem liệu bạn có thể xoa bóp tệp JSON của bạn để phù hợp với cấu trúc đó không. Bạn có thể thực hiện điều này bằng bất kỳ ngôn ngữ nào mà bạn tương tự như hỗ trợ JSON. Chương trình jq rất tiện dụng để lọc json từ định dạng này sang định dạng khác.

định dạng Logstash - https://gist.github.com/jordansissel/2996677

JQ - http://stedolan.github.io/jq/

+0

chúng ta đang nói logstash không thể xử lý rất nhiều tác phẩm với mục JSON đơn?Nếu không, bây giờ bạn phải làm việc ra nếu có nhiều hơn 1 dòng, sử dụng curl, hoặc người nào khác nhập vào Logstash. Chắc chắn các tập tin dòng đơn không khác với quan điểm của Logstash? –

+0

Tôi không nói gì về tệp logstash và json. Tôi chỉ nói rằng nếu logstash không thể làm những gì bạn muốn và nếu dữ liệu đã có trong JSON, nó khá tầm thường để làm những gì logstash làm. –

1

Đăng nhập có thể nhập các định dạng và nguồn khác nhau vì nó cung cấp nhiều plugin. Ngoài ra còn có các công cụ thu thập và chuyển tiếp khác có thể gửi nhật ký để logstash như nxlog, rsyslog, syslog-ng, flume, kafka, fluentd, v.v ... Từ những gì tôi nghe hầu hết mọi người sử dụng nxlog trên windows (mặc dù nó hoạt động trên linux cũng tốt) kết hợp với ngăn xếp ELK vì dấu chân tài nguyên thấp của nó. (Tuyên bố từ chối trách nhiệm: Tôi liên kết với dự án)

14

Logstash là một công cụ rất tốt để xử lý các file năng động.

Dưới đây là cách để nhập tệp json của bạn vào elasticsearch sử dụng logstash:

tập tin cấu hình:

input 
{ 
    file 
    { 
     path => ["/path/to/json/file"] 
     start_position => "beginning" 
     sincedb_path => "/dev/null" 
     exclude => "*.gz" 
    } 
} 

filter 
{ 
    mutate 
    { 
     replace => [ "message", "%{message}" ] 
     gsub => [ 'message','\n',''] 
    } 
    if [message] =~ /^{.*}$/ 
    { 
     json { source => message } 
    } 

} 

output 
{ 
    elasticsearch { 
    protocol => "http" 
    codec => json 
    host => "localhost" 
    index => "json" 
    embedded => true 
    } 

    stdout { codec => rubydebug } 
} 

ví dụ về tệp json:

{"foo":"bar", "bar": "foo"} 
{"hello":"world", "goodnight": "moon"} 

Lưu ý json cần phải được trong một dòng. nếu bạn muốn phân tích một tệp json multiline, thay thế lĩnh vực liên quan trong tập tin cấu hình của bạn:

input 
{ 
    file 
    { 
     codec => multiline 
     { 
      pattern => '^\{' 
      negate => true 
      what => previous     
     } 
     path => ["/opt/mount/ELK/json/*.json"] 
     start_position => "beginning" 
     sincedb_path => "/dev/null" 
     exclude => "*.gz" 
    } 
} 

filter 
{ 
    mutate 
    { 
     replace => [ "message", "%{message}}" ] 
     gsub => [ 'message','\n',''] 
    } 
    if [message] =~ /^{.*}$/ 
    { 
     json { source => message } 
    } 

} 
+0

Cấu hình đầu tiên không hoạt động. : response => {"create" => {"_ index" => "fb", "_type" => "nhật ký", "_id" => "AVZUyqwOVPEDPgwGc4_k", "trạng thái" => 400, "lỗi" => {"type" => "mapper_parsing_exception", "reason" => "không phân tích cú pháp", "generated_by" => {"type" => "illeg_state_exception", "reason" => "Trộn các loại trường: lớp org. elasticsearch.index.mapper.core.StringFieldMapper $ StringFieldType! = class org.elasticsearch.index.mapper.internal.IdFieldMapper $ IdFieldType trên trường _id "}}}},: level =>: warn} – KevinOelen

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