将 docker-compose 与 GELF 日志驱动程序结合使用

2024-01-05

根据到 Docker 官方文档 https://docs.docker.com/reference/logging/overview/,可以得到stdout and stderr容器的输出为GELF消息 https://www.graylog.org/resources/gelf/这是一种可以被例如理解的格式格雷日志/格雷日志2 https://www.graylog.org/ and logstash https://www.elastic.co/products/logstash.

当我从命令行手动运行容器时,这工作得很好。例如,

docker run --log-driver=gelf --log-opt gelf-address=udp://localhost:12201 busybox echo This is my  message.

将向在本地主机上运行的 Graylog2 服务器发送一条日志消息,该服务器在端口 12201 处配置了 UDP 输入侦听器。

现在,我想使用相同的日志选项docker 撰写 https://docs.docker.com/compose/根据文档,原则上应该是可以的 https://docs.docker.com/compose/yml/#log-driver。但是,文档没有提到任何日志格式,而是json-file, syslog and none当我包括类似的东西时

my-container:
  container_name: ...
  build: ...
  ports: ...
  log_driver: "gelf"
  log_opt:
    gelf-address: "udp://localhost:12201"

in my docker-compose.yml然后归档docker-compose up失败并显示:

Traceback (most recent call last):
  File "<string>", line 3, in <module>
  File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.main", line 39, in main
  File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.docopt_command", line 21, in sys_dispatch
  File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.command", line 27, in dispatch
  File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.docopt_command", line 24, in dispatch
  File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.command", line 59, in perform_command
  File "/code/build/docker-compose/out00-PYZ.pyz/compose.cli.main", line 495, in up
  File "/code/build/docker-compose/out00-PYZ.pyz/compose.project", line 265, in up
  File "/code/build/docker-compose/out00-PYZ.pyz/compose.service", line 369, in execute_convergence_plan
  File "/code/build/docker-compose/out00-PYZ.pyz/compose.service", line 270, in create_container
  File "/code/build/docker-compose/out00-PYZ.pyz/compose.service", line 643, in _get_container_create_options
  File "/code/build/docker-compose/out00-PYZ.pyz/compose.service", line 656, in _get_container_host_config
  File "/code/build/docker-compose/out00-PYZ.pyz/docker.utils.types", line 27, in __init__
ValueError: LogConfig.type must be one of (json-file, syslog, none)

根据记录,这是在 docker-compose 1.4.0 和 docker 1.8.1(构建 d12ea79)上进行的。

显然,Docker 和 docker-compose 在这里的实现级别并不相同。我刚刚发现这个问题已经解决并包含在Master branch在 Github 上,请参阅https://github.com/docker/compose/issues/1869 https://github.com/docker/compose/issues/1869 and https://github.com/docker/docker-py/pull/724 https://github.com/docker/docker-py/pull/724 .

有没有办法从当前的 Master 分支重新安装 docker-compose 或手动将其添加到现有安装中?我找不到提交到主机上任何位置的文件...


对于 Docker-Compose v2 服务,语法略有变化,现在全部位于新的“logging”部分下:

version: "2"

services:
  example:
    container_name: example
    image: debian:wheezy
    command: /bin/sh -c "while true; do date && echo "hello"; sleep 1; done"
    ports:
      - "1234:1234"
    logging:
      driver: "gelf"
      options:
        gelf-address: "udp://graylog.example.com:12201"
        tag: "first-logs"

重要提示:地址gelf-address需要是服务器的外部地址,因为 Docker 通过主机的网络解析该地址。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 docker-compose 与 GELF 日志驱动程序结合使用 的相关文章

随机推荐