저는 우분투를 사용하고 있으며 동일한 시스템에 ELK 스택 버전 8.5가 설치되어 있습니다. 각 서비스(logstash, elasticsearch, kibana)에 대해 필요한 구성을 만들었고 유사하게 rsyslog를 구성하여 로그를 logstash(매일 생성되는 인덱스 정의)로 보내고 logstash에서 elasticsearch로 보냅니다. 문제는 logstash에 rsyslog를 입력하면 elasticsearch에 어떤 로그도 표시되지 않는다는 것입니다. 동시에 파일 경로와 함께 파일 입력을 사용하면 작동합니다(elasticsearch와 kibana에서도 인덱스를 볼 수 있습니다). 일부 파일이 표시되지 않는다는 것을 깨달았습니다. 따라서 일부 파일에서는 작동하지만 다른 파일에서는 작동하지 않습니다. 그러면 무엇이 문제가 될까요?
rsyslog.conf 파일
#################
#### MODULES ####
#################
module(load="imuxsock") # provides support for local system logging
#module(load="immark") # provides --MARK-- message capability
# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")
# provides kernel logging support and enable non-kernel klog messages
module(load="imklog" permitnonkernelfacility="on")
/etc/rsyslog.d 디렉터리의 구성 파일
01-json-template.conf file
template(name="json-template"
type="list") {
constant(value="{")
constant(value="\"@timestamp\":\"") property(name="timereported" dateFormat="rfc3339")
constant(value="\",\"@version\":\"1")
constant(value="\",\"message\":\"") property(name="msg" format="json")
constant(value="\",\"sysloghost\":\"") property(name="hostname")
constant(value="\",\"severity\":\"") property(name="syslogseverity-text")
constant(value="\",\"facility\":\"") property(name="syslogfacility-text")
constant(value="\",\"programname\":\"") property(name="programname")
constant(value="\",\"procid\":\"") property(name="procid")
constant(value="\"}\n")
}
50-default.conf 파일
# Default rules for rsyslog.
#
# For more information see rsyslog.conf(5) and /etc/rsyslog.conf
*.* @localhost:514
#
# First some standard log files. Log by facility.
#
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
#daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
#lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
#user.* -/var/log/user.log
#
# Logging for the mail system. Split it up so that
# it is easy to write scripts to parse these files.
#
#mail.info -/var/log/mail.info
#mail.warn -/var/log/mail.warn
mail.err /var/log/mail.err
60-output.conf 파일
# This line sends all lines to defined IP address at port 10514,
# using the "json-template" format template
*.* @localhost:10514;json-template
rsyslog의 Logstash 구성 파일
input {
udp {
host => "localhost"
port => 10514
codec => "json"
type => "rsyslog"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "rsyslog-%{+YYYY.MM.dd}"
}
}