可以说,我们有一个Kubernetes集群(正在生产中),它记录到Logstash。
我们希望将日志的特定部分发送到我们的远程Splunk计算机(VM)。
设计是添加Splunk forwarder来收集日志并将其转发。
我们可以只运行splunk forwarder in a docker container并公开它在k8s集群中有一个服务。
,但我希望将日志收集器与Splunk转发器分离,并在侧车容器中运行更轻便的Log Collector(如Rsyslog或Syslog-ng),该容器将与Splunk转发器(或将来可能替换它的任何其他转发器)共享一个卷)。
在寻找解决方案时,我发现了一些似乎尚未准备就绪的项目(下面列出)。
对我而言,解耦日志收集器似乎是一种琐碎的设计模式,但是由于缺乏稳定的官方解决方案,我开始怀疑也许是有原因的。
另一方面,也许更现代(且更轻便)的解决方案(如fluentd)接管了Syslog遗留解决方案。
有任何想法吗?
Rsyslog-docker项目:
https://github.com/rsyslog/rsyslog-docker
https://github.com/jumanjihouse/docker-rsyslog
https://github.com/deoren/rsyslog-docker
https://github.com/camptocamp/docker-rsyslog-bin/blob/master/Dockerfile
https://github.com/megastef/rsyslog-logsene
Syslog-ng-docker项目:
https://github.com/mumblepins-docker/syslog-ng-alpine
https://hub.docker.com/r/balabit/syslog-ng/ <-看起来是最稳定的解决方案。
最佳答案
有点晚,但也许会帮助某人。
您可以使用logstash sidecar通过HTTP(Splunk HEC)将日志转发到splunk。
logstash容器可以与其他容器共享卷并遵循日志文件。
在每个新日志中,它将转发给Splunk。
这是logstash.conf文件(logstash的输入和输出配置文件)的示例:
input {
file {
path => "${LOGS_FILE_PATH}"
start_position => "beginning"
}
}
http {
http_method => "post"
url => "http://XX.XX.XX.XX:8088/services/collector/event"
headers => ["Authorization", "Splunk XXXXX-XXXX-XXXXX-XXXXX"]
mapping => {
"event" => "%{[message]}"
}
}
}
有关配置logstash的更多信息:
https://www.elastic.co/guide/en/logstash/current/docker-config.html
关于docker - RSyslog/Syslog-ng-在容器内运行日志收集器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57346815/