Моя архитектура:
Filebeat A (удаленный)> Logstash A (2 конвейера)> Elasticsearch A> Kibana A
Filebeat B (удаленно)> Logstash A (2 конвейера)> Elasticsearch A> Kibana A
Его для анализа журналов.
говорят, что мой формат журналов abc_logs-yyyy.mm.dd.log
Мои Filebeats
подталкивают журналы к Logstash
(я вижу в файле данных / реестра), но Logstash
- это НЕ , создающий индекс для некоторых файлов журнала.
скажем, abc_logs-2019.11.02.log
есть в моем журнале и также Filebeat
подтолкнул его к Logstash
. Но я НЕ МОГУ видеть какой-либо созданный индекс в Elasticsearch
.
Примеры журналов:
<ip> <ip> 27 27 <ip> HTTP/1.1 - GET 8380 - GET /healthcheck/healthcheck.do HTTP/1.1 200 - [12/Nov/2019:00:33:49 +0000] - /healthcheck/healthcheck.do houston.hp.com 0 0.000 default task-245 "-" "-" "-" "-" "-" "-"
<ip> <ip> 42 42 <ip> HTTP/1.1 - POST 8743 - POST /ContactServices/api/contact/create HTTP/1.1 200 - [12/Nov/2019:07:00:54 +0000] - /ContactServices/api/contact/create - 1969 1.969 default task-199 "-" "application/json" "-" "-" "-" "-"
logstash.conf file:
input {
beats {
port => 5044
host => "<host_name>"
}
}
filter {
grok {
match => ["message", '%{IPV4:remoteIP}\s+%{IPV4:localIP}\s+%{INT:throughtputData:int}\s+%{INT}\s+%{IPV4}\s+%{DATA:requestProtocol}\s+%{DATA:remoteLogicalUserName}\s+%{DATA:requestMethod}\s+%{DATA:port}\s+%{DATA}\s+%{DATA}\s+/ContactServices/api/%{DATA}\s+%{DATA:requestProtocol2}\s+%{INT:requestStatusCode}\s+%{DATA:userSessionID}\s+\[%{HTTPDATE:logTimeStamp}\]\s+%{DATA:remoteUser}\s+/ContactServices/api/%{DATA:requestedURL2}\s+%{DATA:serverName}\s+%{INT:timeTakenInMilliSec:int}\s+%{NUMBER}\s+default\s+task-%{INT}\s+"%{DATA:authorization}"\s+"%{DATA}"\s+"%{DATA}"\s+"%{DATA}"\s+"%{DATA}"\s+"%{DATA}"']
}
if "_grokparsefailure" in [tags]{
drop {}
}
if "_groktimeout" in [tags]{
drop {}
}
date {
match => ["logTimeStamp" ,"dd/MMM/yyyy:HH:mm:ss Z" ]
}
mutate{
remove_field => ["message","host","input","type","@version","prospector","beat","garbageData","offset"]
}
}
output {
elasticsearch {
hosts => ["<ip>:9202"]
index => "contact-logs-%{+YYYY.MM.dd}"
}
}
Файл filebeat.conf
filebeat.inputs:
- type: log
enabled: true
paths:
- /path/to/logs/*.log
exclude_lines: ['.*healthcheck.*','.*swagger.*']
output.logstash:
hosts: ["<serverip>:5044"]
Кроме того, еще одна проблема.
Дажеесли индексы созданы, НЕ все действительные журналы анализируются .
Как если бы в файле журнала было 100 correct log
строк (как в grok filter
шаблоне logstash.conf
файла) only 60%-70% data
отображается как документ в Elasticsearch .. около 40% data is getting dropped
.. Я не знаю, какова точная причина ..
Если я проверю unparsed logs
в grok debugger
с указанным шаблоном Grok, отлично разбирает .
Есть какое-нибудь решение этой проблемы?