Я настраиваю LogStash в Windows и провожу тестовый запуск logstash.bat из консоли, чтобы проверить, обрабатывает ли он записи из файла log4net. Вот что он сообщил, но я не вижу никаких записей в целевом ES, хотя в файле журнала есть записи:
C:>logstash.bat agent -f logstash.conf
Using JAVA_HOME=C:\Program Files\Java\jre1.8.0_102 retrieved from C:\ProgramData\Oracle\java\javapath\java.exe
io/console not supported; tty will not be manipulated
Settings: Default pipeline workers: 4
Pipeline main started
logstash.conf (host, uid и pwd верны, поэтому это не проблема с подключением):
input {
file {
path => "C:\LogStash\logs\logfile"
type => "log4net"
codec => multiline {
pattern => "^(DEBUG|WARN|ERROR|INFO|FATAL)"
negate => true
what => previous
}
}
}
filter {
if [type] == "log4net" {
grok {
match => [ "message", "(?m)%{TIMESTAMP_ISO8601:sourceTimestamp} \[Worker #%{NUMBER:threadId}\] %{LOGLEVEL:level} %{GREEDYDATA:tempMessage}" ]
}
mutate {
replace => [ "message" , "%{tempMessage}" ]
remove_field => [ "tempMessage" ]
}
}
}
output {
elasticsearch {
hosts => ["http://XXXXX:9200"]
user => "XXXXX"
password => "XXXXX"
index => "logstash-%{+YYYY.MM.dd}"
template_overwrite => true
}
}
Оказывается, LogStash требует особой обработки при работе с «историческими» файлами журнала, то есть файлами, которые либо уже просматривались, либо старше 24 часов.
start_position => "начало" - заставляет LS смотреть файлы с самого начала, предполагая, что все .sincedb * были удалены в каталоге вашего профиля / HOME.
ignore_older => 86400 (по умолчанию!) - заставляет LS игнорировать любые файлы старше 24 часов.