logstash默认情况下是内置了输入syslog日志的,但是不支持输出syslog,需要输出syslog的情况下,就需要手动安装logstash-output-syslog插件。安装方法如下:
下载logstash-output-syslog插件,https://rubygems.org/downloads/logstash-output-syslog-3.0.5.gem
#将其打包成ZIP包
zip logstash-output-syslog-3.0.5.zip logstash-output-syslog-3.0.5.gem
#此处忽略容器的部署,进入其中一个正在运行的logstash容器,将zip文件docker cp 复制到容器的/usr/share/logstash目录中。
#安装
bin/logstash-plugin install file:///usr/share/logstash/logstash-output-syslog-3.0.5.zip
#查看列表 中是否存在
logstash-output-syslog: bin/logstash-plugin list
安装成功,将已经安装成功插件的容器提交新的镜像,docker commit 容器ID 容器镜像,然后提交至registry镜像服务器,这里没有的话,也可以保存成文件再导入其它工作节点。
修改logstash的部署文件logstash.conf,如下:
input {
gelf {
use_udp => true
port_tcp => 12202
}
}
output {
elasticsearch {
hosts => ["es:9200"]
index => "log-%{+YYYY.MM.dd}"
user => "######"
password => "######"
}
file { path => './logstash.log' }
syslog {
host => "192.168.##.##"
port => "514"
protocol => "udp"
codec => "plain"
}
}
#这里实现了可进行三个副本输出到三个位置的日志。
修改容器的日志驱动,让它们将日志流转至Logstash
#service配置日志驱动
logging:
driver: "gelf"
options:
gelf-address: "udp://127.0.0.1:12201"
tag: test
#或者
docker run -d --name test --log-driver gelf --log-opt gelf-address=udp://127.0.0.1:12201 --log-opt tag=test \
--log-opt env=staging --log-opt labels=staging httpd
重新启动logstash集群即可。logstash收到日志后会根据规则向指定的目标转发日志。