Gar*_*aid 5 logstash docker docker-compose
我正在尝试在使用多种应用程序技术(Java、Rails 和各种 DB)的环境中集中日志记录。
我们希望开发人员使用 Docker Compose 来调用堆栈,但我们希望他们引用中央日志源 (ELK) 来调试问题,而不是尝试打开 shell 以运行 Docker 容器。
应用程序都写入文件系统而不是 STDOUT/STDERR,这会删除与 Docker 日志驱动程序相关联的所有选项,还有日志喷口。
我们所做的是配置容器,让 rsyslog 包含应用程序日志文件,并将这些文件转发到具有 syslog 输入的 logstash。这在将日志从 A 移动到 B 方面起作用,但是基于 syslog 输入在 ELK 中管理多技术日志是可怕的(例如,试图捕获多个 Java 堆栈跟踪或 MySQL 慢查询)。
有一个更好的方法吗?我是否应该在每个容器中运行 logstash,以便我可以将过滤器和编解码器直接应用于日志文件,这样我就不必依赖 syslog 输入?
是否有某种方法可以将 Docker 日志驱动程序与写入文件系统的应用程序日志文件一起使用?
Docker 的最新版本支持将“GELF”格式的日志传输到网络端口。Logstash 有 GELF 输入。您可以在每个节点上运行 Logstash,并将该节点上的所有 Docker 实例转发到它。
作为 Logstash 输入:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-gelf.html
gelf {
}
Run Code Online (Sandbox Code Playgroud)
对于 Docker 输出: https://docs.docker.com/engine/admin/logging/overview/#gelf
$ docker run -dit \
--log-driver=gelf \
--log-opt gelf-address=udp://127.0.0.1:12201 \
alpine sh
Run Code Online (Sandbox Code Playgroud)
(gelf-address是从容器外部的角度来看的,而不是内部的)
归档时间: |
|
查看次数: |
3468 次 |
最近记录: |