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.
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!
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
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
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. –