更换docker日志驱动

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文是关于docker日志第三篇,更换docker日志驱动为-syslog。在之前的两篇文章: Docker容器日志分析介绍过docker的json日志滚动策略; fluentd收集kubernetes 集群日志分析分析kubernetes中fluentd收集docke容器日志原理。

本文是关于docker日志第三篇,更换docker日志驱动为-syslog。在之前的两篇文章: Docker容器日志分析介绍过docker的json日志滚动策略; fluentd收集kubernetes 集群日志分析分析kubernetes中fluentd收集docke容器日志原理。


准备测试容器



准备一个自动生成日志的容器,其 Dockerfile 如下:


FROM alpine:3.7
CMD [ "sh", "-c", "while true; do echo hello; sleep 10; done"]


测试容器很简单,每10s打印一次 hello 到控制台。


准备测试环境



测试环境,选择使用compose,其文件 docker-compose.yaml 如下:


version: '3'
services:
  # https://github.com/rsyslog/rsyslog-docker
  rsyslog:
    image: rsyslog/syslog_appliance_alpine
    ports:
      - "514:514"
    volumes:
      - ./logs:/logs
  logapp:
    build: ./app
    image: logapp:0.0.1
    depends_on:
      - rsyslog
    logging:
      driver: "syslog"
      options:
        syslog-address: "tcp://127.0.0.1:514"
        tag: "app"
        labels: "testing,frontend"


rsyslog服务使用容器方式运行,省去物理机配置,方便清理。rsyslog 服务又作为 logapp 测试容器的日志接收器。


注意mac需要替换127.0.0.1为物理IP


测试



docker-compose.yaml 目录使用 docker-compose up 启动测试, 日志输出如下:


Creating network "rsyslog_default" with the default driver
Creating rsyslog_rsyslog_1 ... done
Creating rsyslog_logapp_1  ... done
Attaching to rsyslog_rsyslog_1, rsyslog_logapp_1
logapp_1   | WARNING: no logs are available with the 'syslog' log driver
rsyslog_1  | rsyslog appliance version 2018-06-26 (1530020232) - http://www.syslogappliance.de
rsyslog_1  | Copyright (C) 2018 by Rainer Gerhards and Adiscon GmbH - released under ASL 2.0
rsyslog_1  |
rsyslog_1  | WARNING: this is an experimental container - do not use in production
rsyslog_1  |
rsyslog_1  | Using rsyslog configuration file: /etc/rsyslog.conf
rsyslog_1  | ENABLE_LOGSENE=off
rsyslog_1  | RSYSLOG_CONF=/etc/rsyslog.conf
rsyslog_1  | LOGFILES_STORE=/logs/hosts/%hostname:::secpath-replace%/messages.log
rsyslog_1  | HOSTNAME=6d034357ccb0
rsyslog_1  | SHLVL=1
rsyslog_1  | HOME=/root
rsyslog_1  | CNF_CALL_LOG_TO_LOGFILES=call log_to_files
rsyslog_1  | CNF_CALL_LOG_TO_LOGSENE=
rsyslog_1  | PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
rsyslog_1  | ENABLE_STATISTICS=on
rsyslog_1  | PWD=/home/appliance
rsyslog_1  | ENABLE_LOGFILES=on
rsyslog_1  | TZ=UTC
rsyslog_1  | rsyslogd 8.36.0: running as pid 1, enabling container-specific defaults, press ctl-c to terminate rsyslog
rsyslog_1  | 2019-05-01T15:15:22.330709+00:00 6d034357ccb0 rsyslogd: [origin software="rsyslogd" swVersion="8.36.0" x-pid="1" x-info="http://www.rsyslog.com"] start


日志中重点是 logapp_1   | WARNING: no logs are available with the 'syslog' log driver 提示 logapp 的日志不再输出到docker标准console中了,所以看不到容器的 hello 输出。


可以注释logging部分,对比一下日志输出。


rsyslog 挂载的数据卷目录 logs 中看到生成了一系列日志:


➜  logs tree -L 3
.
├── debug
└── hosts
    ├── 6d034357ccb0
    │   └── messages.log
    ├── e5281045a174
    │   └── messages.log
    └── localhost
        └── messages.log


其中localhost/messages.log信息如下:


2019-05-01T15:15:23+00:00 localhost app[1478]: hello
2019-05-01T15:15:33+00:00 localhost app[1478]: hello
2019-05-01T15:15:43+00:00 localhost app[1478]: hello
2019-05-01T15:15:53+00:00 localhost app[1478]: hello
...


可见 logapp 的日志使用tcp传输到 rsyslog 中,并由后者写入文件。


在官方的说明中,可以在 daemon.json 中定义,统一替换docker日志驱动:


{
  "log-driver": "syslog",
  "log-opts": {
    "syslog-address": "udp://1.2.3.4:1111"
  }
}


也可以对单个容器使用 --log-driver 参数自定义更换,命令如下:


docker run \
      -–log-driver syslog –-log-opt syslog-address=udp://1.2.3.4:1111 \
      alpine echo hello world


当然,如果了解 compose ,推荐使用本文的方式替换,会更便捷。至于 rsyslog 的配置,比较复杂,请直接查看参考链接。


清理



使用 Ctrl + C 结束容器后,在使用 docker-compose down 将测试容器及网络清理。


参考链接





相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2月前
|
存储 Kubernetes 监控
在Docker中,很多应用容器都是默认后台运行的,怎么查看它们的输出和日志信息?
在Docker中,很多应用容器都是默认后台运行的,怎么查看它们的输出和日志信息?
|
3月前
|
存储 Docker 容器
docker查看日志:docker service logs 与 docker container logs
docker查看日志:docker service logs 与 docker container logs
157 0
|
5月前
|
存储 运维 监控
【Docker专栏】Docker日志管理与监控的最佳方法
【5月更文挑战第7天】本文探讨了Docker容器的日志管理与监控,强调其在运维中的重要性。Docker默认使用`json-file`日志驱动,可通过`docker logs`命令查看。建议选择合适日志驱动,配置日志选项,并集成ELK Stack等工具进行高级分析。实时监控、设置警报、分析数据和审计日志是实践关键。最佳实践包括日志数据与容器数据分离、使用日志代理、保护敏感信息及遵守法规。关注新技术以提升系统稳定性和安全性。
794 10
【Docker专栏】Docker日志管理与监控的最佳方法
|
5月前
|
监控 应用服务中间件 nginx
使用 Docker Compose V2 快速搭建日志分析平台 ELK (Elasticsearch、Logstash 和 Kibana)
ELK的架构有多种,本篇分享使用的架构如图所示: Beats(Filebeat) -> -> Elasticsearch -> Kibana,目前生产环境一天几千万的日志,内存占用大概 10G
279 4
|
5月前
|
Docker 容器
docker 全局日志控制
docker 全局日志控制
|
5月前
|
Docker 容器
一篇文章搞懂docker日志的查看
`docker logs` 命令用于查看Docker容器的日志,支持多个选项:`-f` 跟踪实时日志,`--since` 显示指定时间后的日志,`--tail` 显示指定行数(默认全部),`-t` 显示时间戳。例如,`docker logs -f --tail=200 <容器ID/名称>` 显示最后200行实时日志。还可以结合`grep`进行过滤,或使用`--since`和`--until`指定时间范围。日志可重定向至文件,如`docker logs <容器id> > container_logs.txt`。
1563 6
|
5月前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs <container_name>` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
149 0
|
2月前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
|
23天前
|
Java
日志框架log4j打印异常堆栈信息携带traceId,方便接口异常排查
日常项目运行日志,异常栈打印是不带traceId,导致排查问题查找异常栈很麻烦。
|
1月前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
66 9
下一篇
无影云桌面