Ambiente:
Centos7.4
软件 :
jdk-1.8.0_211 ; elasticsearch
-7.9.2 ;
search-guard-7
logstash-7.9.2 ;
kibana-7.9.2 ;
filebeat-7.7.1
Cenário: O
aplicativo Java desenvolvido pela empresa possui três arquivos de log, appname_info.log, appname_warn.log e appname_error.log. O formato dos logs de informações e avisos são os mesmos, e o log de erros é um log de erros do aplicativo java.
Dificuldade 1: devido à configuração do search-guard-7, o erro de autenticação é relatado quando o logstash se conecta ao elasticsearch. A configuração final é a seguinte:
output {
elasticsearch {
hosts => ["192.168.20.39:9200", "192.168.20.40:9200", "192.168.20.41:9200"]
ssl => true
ssl_certificate_verification => false
cacert => "/export/server/logstash-7.9.2/config/root-ca.pem"
index => "ngms-exchange-%{+YYYY.MM.dd}"
user => "admin"
password => "admin"
}
}
Dificuldade 2: logstash corresponde aos logs em dois formatos, a configuração é a seguinte:
filter {
grok {
match => {
"message" => [
'(?<recod-time>\d+-\d+-\d+\s+\d+:\d+:\d+\.\d+)(\|)(?<log-level>\w+)(\s+\|)(?<log-message>.*)', #匹配单行日志
'(?m)^%{TIMESTAMP_ISO8601:recod-time}\|%{LOGLEVEL:log-level}\|%{GREEDYDATA:log-message}' #匹配多行日志
]
}
remove_field => ["message","agent","flags","ecs","os","path","@version"]
}
date {
match => ["recod-time","yyyy-MM-dd HH:mm:ss.SSS"]
target => "@timestamp" #用日志的时间替换logstash原来的timestamp
}
}
Dificuldade 3: Use filebeat para gerar logs de diferentes aplicativos para logstash, adicionar tags na configuração de filebeat e, em seguida, julgar no logstash:
#filebeat配置如下:
- type: log
paths:
- /export/logs/appname1/appname1*.log
fields:
source: appname1
scan_frequency: 10s
#filebeat多行匹配
multiline.pattern: '^\d{4}-\d{2}-\d{2}'
multiline.negate: true
multiline.match: after
#添加tags
tags: ['appname1']
- type: log
paths:
- /export/logs/appname2/appname2*.log
fields:
source: appname2
scan_frequency: 10s
#filebeat多行匹配
multiline.pattern: '^\d{4}-\d{2}-\d{2}'
multiline.negate: true
multiline.match: after
#添加tags
tags: ['appname2']
#logstash配置
output {
if "ngms-exchange" in [tags] {
elasticsearch {
hosts => ["192.168.20.39:9200", "192.168.20.40:9200", "192.168.20.41:9200"]
ssl => true
ssl_certificate_verification => false
cacert => "/export/server/logstash-7.9.2/config/root-ca.pem"
index => "ngms-exchange-%{+YYYY.MM.dd}"
user => "admin"
password => "admin"
}
}
}