7

Tôi đã thiết lập các công cụ xem nhật ký Elasticsearch, Logstash, Kibana trên hệ thống của mình. Có 2 máy trong cấu hình của tôi bây giờ (Amazon EC2 trường hợp):Nhận địa chỉ IP của máy chuyển tiếp Logstash

  • 54.251.120.171 - Logstash-server nơi ELK được cài đặt
  • 54.249.59.224 - Logstash-giao nhận - gửi "/ var/log/messages "đăng nhập để logstash-server

On logstash-server, điều này configs của tôi (trong các tập tin khác nhau) như sau: -

input { 
    lumberjack { 
    port => 5000 
    type => "logs" 
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt" 
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key" 
    } 
} 




filter { 
if [type] == "syslog" { 

    grok { 
     match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } 
     add_field => [ "received_at", "%{@timestamp}" ] 
     add_field => [ "received_from", "%{host}" ] 
    } 
    syslog_pri { } 
    date { 
     match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] 
    } 
    } 
} 


output { 
    elasticsearch { host => localhost } 
    stdout { codec => rubydebug } 
} 

On logstash-giao nhận, điều này những tập tin hình cấu hình của tôi như thế nào, nó sẽ chuyển tiếp thư mục/var/log/messages,/var/log/an toàn bản ghi để logstash-server

{ 
    "network": { 
     "servers": [ "54.251.120.171:5000" ], 
     "timeout": 15, 
     "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt" 
    }, 

    "files": [ 
     { 
     "paths": [ 
       "/var/log/messages", 
       "/var/log/secure" 
     ], 
     "fields": { "type": "syslog" } 
     } 
    ] 
} 

Đây là những gì giao diện Kibana của tôi trông giống như sau khi nó đã lấy các bản ghi chỉ mục từ Elasticsearch. enter image description here

Vì vậy, câu hỏi của tôi là, tôi cần một cách để lấy địa chỉ IP của logstash-forwarder ví dụ: 54.249.59.224 trong trường hợp có một sự kiện đăng nhập.

Lý do tại sao tôi hỏi đây là một tình huống thực tế, chúng tôi có thể có nhiều người chuyển tiếp logstash (nói 10), với tất cả 10 người trong số họ gửi nhật ký tới máy chủ logstash của chúng tôi. Vì vậy, tôi cần một cách nào đó để gắn thẻ tất cả các sự kiện nhật ký, để tôi có thể xác định logstash-server nào đã gửi sự kiện nhật ký nào.

Tôi sẽ cần phải sử dụng địa chỉ IP (có thể một số thông tin khác) để tìm kiếm các sự kiện nhật ký trong giao diện Kibana.

Ai đó có thể giúp tôi thực hiện việc này không? :)

Hoặc trong trường hợp ai đó có ý tưởng tốt hơn cách thực hiện điều này một cách hiệu quả theo cách khác, bạn được chào đón nhiều nhất!

Trả lời

3

Bạn sẽ cần phải sửa đổi bộ lọc đầu vào Lumberjack và máy chủ để thực hiện việc này. Xem các diffs sau:

https://github.com/stanhu/logstash-input-lumberjack/commit/0861c9d95caa46370f17a82353710bc78ea2c82e

https://github.com/stanhu/logstash-forwarder/commit/b711d273a24ab3fe1b4a7b6005d2f26983cac859

Cho đến những thay đổi này được sáp nhập vào logstash-forwarder và logstash-input-Lumberjack, cách dễ nhất để sử dụng này ngay bây giờ là để sửa đổi các file cài đặt của bạn trực tiếp . Nếu bạn đang sử dụng các gói Debian hiện tại, họ đang ở đây:

/opt/logstash/lib/logstash/inputs/lumberjack.rb 
/opt/logstash/vendor/bundle/jruby/1.9/gems/jls-lumberjack-0.0.20/lib/lumberjack/server.rb 

Để các tập tin cấu hình bộ lọc đầu vào (ví dụ /etc/logstash/conf.d/01-lumberjack-input.conf), thêm:

client_address_field => "client_address" 

cấu hình logstash bạn nên tìm một cái gì đó như thế này:

input { 
    lumberjack { 
    host => "localhost" 
    port => 5000 
    type => "logs" 
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt" 
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key" 
    client_address_field => "client_address" 
    } 
} 

Restart logstash trên máy tính này, và kiểm tra xem trường client_address hiện đang được thêm vào mỗi tin nhắn.

0

Đây là trường 'máy chủ' (mà bạn cũng đang sao chép thành 'received_from').

+0

Như bạn có thể thấy trong snap kibana tôi đã đính kèm, trường receive_from báo cáo tên máy chủ là 'eva-all', nhưng tôi mong nó báo cáo địa chỉ IP của máy chủ tức là '54 .249.59.224 'Bạn có thể chỉ cho tôi cách sửa đổi mã để làm điều này không. Rất tiếc, tôi vẫn không thể hiểu đầy đủ cú pháp hoặc khả năng của bộ lọc và bộ lọc. – chinmay

+0

Tôi đã thêm một máy khác có IP là '46 .137.246.88 ', về cơ bản Kibana nhận nhật ký từ 2 máy (cả hai đều có tên máy chủ), vì vậy tôi không thể phân biệt được nhật ký nào từ đó máy. – chinmay

+2

Như bạn đã thấy trong cấu hình đăng nhập-chuyển tiếp, bạn có thể gửi các trường từ người gửi hàng. Thêm một trường khác và cung cấp cho nó một giá trị cho phép bạn phân biệt nó với một máy khác. Bạn cũng có thể xem xét không cho máy của bạn cùng một tên máy chủ. –

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