7

Skonfigurowałem narzędzia przeglądania dzienników Elasticsearch, Logstash, Kibana w moich systemach. Są 2 komputery w mojej konfiguracji teraz Amazon EC2 (instancje):Uzyskiwanie adresu IP maszyny Logstash-forwarder

  • 54.251.120.171 - Logstash ELK-serwer, gdzie jest zainstalowany
  • 54.249.59.224 - Logstash-forwarderów - wysyła „/ var/log/wiadomości "log do logstash-server

na logstash-serwer, to co moi configs (w różnych plikach) wyglądać tak: -

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 } 
} 

na logstash-spedytora, ten co mój config wygląda plików jak to przekazuje/var/log/messages/var/log/secure logi do 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" } 
     } 
    ] 
} 

To właśnie mój interfejs Kibana wygląda po jego pobrane indeksowanych logi z Elasticsearch. enter image description here

Moje pytanie brzmi: potrzebuję sposobu na odzyskanie adresu IP do forwardera logstash, tj. 54.249.59.224 na wypadek, gdyby wystąpiło zdarzenie dziennika.

Powód, dla którego o to pytam, jest w prawdziwym scenariuszu, możemy mieć wielu logstash-forwarderów (powiedzmy 10), przy czym wszystkie 10 z nich wysyła logi do naszego serwera logstash. Potrzebuję więc, aby oznaczyć wszystkie zdarzenia w dzienniku, aby móc zidentyfikować, który serwer logstash wysłał dane zdarzenia.

Będę musiał użyć adresu IP (być może również innych informacji), aby wyszukać zdarzenia dziennika w interfejsie Kibana.

Czy ktoś może mi pomóc to zrobić? :)

Albo ktoś, kto ma lepszy pomysł, jak skutecznie to zrobić w inny sposób, jesteś bardzo mile widziany!

Odpowiedz

3

Będziesz musiał zmodyfikować filtr wejściowy Lumberjack i serwer, aby to zrobić. Zobacz następujące dyferencjału:

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

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

Dopóki te zmiany zostaną połączone w logstash-spedytora i logstash-input-drwal, najprostszym sposobem korzystania z tego prawa jest teraz modyfikować zainstalowanych plików bezpośrednio . Jeśli używasz aktualne pakiety Debiana, są tutaj:

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

pliku konfiguracyjnego w filtr wejściowy (np /etc/logstash/conf.d/01-lumberjack-input.conf), dodać:

client_address_field => "client_address" 

Twój logstash config powinien wyglądać mniej więcej tak:

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 na komputerze i sprawdź, czy pole client_address jest obecnie dodawany do każdej wiadomości.

0

To samo dotyczy pola "host" (którego również kopiujesz do "received_from").

+0

Jak widać w załączonym pliku kibana, pole receive_from zgłasza nazwę hosta jako "eva-all", ale spodziewam się, że raportuje adres IP hosta, czyli '54 .249.59.224 "Czy możesz wskazać mi, jak zmodyfikować kod, aby to zrobić. Niestety nadal nie jestem w stanie w pełni zrozumieć składni ani możliwości grok i filtrów. – chinmay

+0

Dodałem kolejną maszynę, której IP to '46 .137.246.88 ', więc w zasadzie Kibana pobiera logi z 2 maszyn (oba mają nazwy hostów jako eva-all), więc nie jestem w stanie rozróżnić, który log jest z której maszyny. – chinmay

+2

Jak pokazano w konfiguracji logstash-forwarder, możesz wysyłać pola od nadawcy. Dodaj kolejne pole i nadaj mu wartość, która pozwoli odróżnić go od innego komputera. Możesz także rozważyć niedodawanie maszynom tych samych nazw hostów. –