Alpine Linux syslog

Alpine Linux内置了一个极小化 syslogd 服务,即通过默认的 BusyBox 来实现系统日志:

  • 轻量级: 资源使用最小化,满足Alpine容器的精简目标

  • 简单: 提供基本的日志功能,包括日志写入文件和日志轮转

  • 默认: 不需要安装任何第三方软件包,保持系统最小化

配置

/etc/conf.d/syslog 配置文件用于调整 syslogd 运行选项,所有的运行选项可以通过 syslogd --help 查看,实际上选项也不多:

syslogd 的运行选项
# syslogd --help
BusyBox v1.37.0 (2025-08-05 16:40:33 UTC) multi-call binary.

Usage: syslogd [OPTIONS]

System logging utility

	-n		Run in foreground
	-R HOST[:PORT]	Log to HOST:PORT (default PORT:514)
	-L		Log locally and via network (default is network only if -R)
	-C[size_kb]	Log to shared mem buffer (use logread to read it)
	-K		Log to kernel printk buffer (use dmesg to read it)
	-O FILE		Log to FILE (default: /var/log/messages, stdout if -)
	-s SIZE		Max size (KB) before rotation (default 200KB, 0=off)
	-b N		N rotated logs to keep (default 1, max 99, 0=purge)
	-l N		Log only messages more urgent than prio N (1-8)
	-S		Smaller output
	-t		Strip client-generated timestamps
	-D		Drop duplicates
	-f FILE		Use FILE as config (default:/etc/syslog.conf)

需要注意:

  • 默认监听在服务器的 UDP 端口 514 ,这是一个私有端口(低于1024)

当在podman rootless容器中运行,这个端口可能会不能监听会产生错误 下面这个错误是因为没有使用 sudo 来启动 syslogd 导致的,实践发现 alpine linux 的 syslogd 没有绑定 514 端口权限问题

podman rootless 容器中运行,由于UDP 514端口无法绑定报错
syslogd: bind: Permission denied

解决的方法是在 /etc/conf.d/syslog 中配置:

/etc/conf.d/syslog 监听高端口 10514
SYSLOGD_OPTS="-t -R 127.0.0.1:10514 -L"

这样启动 syslogd 监听在本地 10514 端口

然后在运行 podman run 时候设置端口映射,将Host端口514映射到10514:

podman运行时映射Host端口514映射到10514
podman run -p 514:10514/udp my_syslog_image

警告

上述podman rootless运行syslogd的方法我没有实践,我主要目标是debug排查 podman rootless 运行 sshd服务(已解决,见 改进 alpine-dev ),已经花费太多时间,暂时没有精力折腾了

参考