Я пытаюсь настроить rsyslog для отправки журналов в logstash, а затем пересылать их в elasticsearch.
Я создал файл конфигурации /etc/rsyslog.d/60-output.conf
со следующим содержимым:
*.* @localhost:10514;json-template
и файл шаблона /etc/rsyslog.d/01-json-template.conf
со следующим содержимым:
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")
}
Затем я перезапустил службу rsyslog.
А для logstash я создал файл конфигурации /etc/logstash/conf.d/logstash.conf
со следующим содержимым:
input {
udp {
port => 10514
codec => "json"
type => "rsyslog"
}
}
filter { }
output {
if [type] == "rsyslog" {
elasticsearch {
hosts => [ "localhost:9200" ]
}
}
}
Затем я перезапустил logstash.
Когда я бегу sudo netstat -tulpn | grep 10514
я получаю это:
user@rsyslog-server:/var/log$ sudo netstat -tulpn | grep 10514
udp 0 0 0.0.0.0:10514 0.0.0.0:* 5327/java
поэтому Logstash прослушивает порт 10514.
Чтобы проверить ввод elasticsearch, я запускаю curl -XGET 'http://localhost:9200/logstash-*/_search?q=*&pretty'
, но это не возвращает никаких результатов:
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 0,
"successful" : 0,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 0,
"relation" : "eq"
},
"max_score" : 0.0,
"hits" : [ ]
}
}
Я использую:
Как я могу это решить?
Rsyslog настроен на отправку журналов по TCP в logstash. Logstash настроен на прослушивание сообщений UDP.
Чтобы отправлять журналы по UDP, отредактируйте /etc/rsyslog.d/60-output.conf
:
*.* @@localhost:10514;json-template # note the second @ sign
Однако для большей ясности можно использовать синтаксис RainerScript, который будет выглядеть следующим образом:
# load omfwd module
module(load = "omfwd")
*.* action(type = "omfwd" target = "127.0.0.1" port = "10514" protocol = "udp")