官方提供的镜像rsyslog/syslog_appliance_alpine无法获取时区信息。宿主机是东八区时区,但是rsyslog接收远程syslog日志存储时给的时间是UTC时间。
替换了多个参数/配置后,还是无法自动读取系统时区文件。
1、使用环境变量(无效)
TZ=Asia/Shanghai
2、rsyslog.conf中使用%timereported:::data-hour% (无效)
3、rsyslog.conf中使用%timegenerated:::date-rfc3339%Z(无效)
$template myFormat,"%timegenerated:::date-rfc3339%Z %fromhost-ip% %syslogtag% %msg%\n"
$ActionFileDefaultTemplate myFormat
4、rsyslog.conf中使用%HOUR%(无效)
$template Remote,"/workdir/app/rsyslog/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%-%$HOUR%.log"
5、rsyslog.conf中使用$ActionFileDefaultTz Asia/Shanghai (无效)
在无法改动rsyslog-alpine镜像自动读取时区的情况下,决定使用ubuntu:20.04基础镜像制作一个新的rsyslog镜像。
FROM ubuntu:20.04
LABEL maintainer="yinzhou@fiberhome.com"
RUN apt-get update && \
apt-get install -y rsyslog && \
# apt-get install -y tcpdump && \
apt-get clean
#COPY rsyslog.conf /etc/rsyslog.conf
RUN mkdir -p /var/log/rsyslogRemote && chown -R syslog:syslog /var/log/rsyslogRemote
#USER root
EXPOSE 514/tcp 514/udp
CMD ["/usr/sbin/rsyslogd", "-n"]
version: '3'
services:
rsyslog:
image: rsyslog-ubuntu:8.2001
container_name: rsyslog
restart: always
healthcheck:
test: exit 0
interval: 30s
timeout: 5s
retries: 6
#environment:
# - RSYSLOG_CONF=/etc/rsyslog.conf
volumes:
- /etc/localtime:/etc/localtime
- /etc/timezone:/etc/timezone
- ./50-default.conf:/etc/rsyslog.d/50-default.conf
- ./data:/var/log/RemoteLogs:rw
ports:
- 0.0.0.0:1601:1601
- 0.0.0.0:514:514/udp
- 0.0.0.0:514:514/tcp
其中50-default.conf配置如下
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
#daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
#lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
#user.* -/var/log/user.log
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")
$template myFormat,"%timegenerated:::date-rfc3339%Z %fromhost-ip% %syslogtag% %msg%\n"
$ActionFileDefaultTemplate myFormat
$template Remote,"/var/log/rsyslogRemote/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%-%HOUR%.log"
rsyslog.conf可以不改动,容器默认使用syslog用户启动rsyslogd进程。如果需要改为root,则需要改动rsyslog.conf的两个参数:
$PrivDropToUser root
$PrivDropToGroup root
docker-compose up -d 启动rsyslog容器即可。
# 安装rsyslog,一般都是系统自带安装好的
$ sudo apt install rsyslog
# 默认配置文件: /etc/rsyslog.d/50-default.conf
$ sudo vim /etc/rsyslog.d/50-default.conf
为什么客户端不用docker搭建,而用系统自带的rsyslog包。因为我懒,测起来方便。
客户端常用的一些配置如下所示
# 将所有日志输出到本地文件
*.* /var/log/all.log
# 将所有警告级别以上的日志输出到单独的文件
*.warn /var/log/warnings.log
# 将所有错误级别以上的日志输出到远程syslog服务器
*.err @remote-syslog-server:514
# 将所有日志通过TCP协议输出到远程syslog服务器
*.* @@remote-syslog-server:514
# 将所有日志通过RELp协议输出到远程syslog服务器
*.* :omrelp:remote-syslog-server:1601
配置修改后service rsyslog restart重启rsyslog服务。
$ logger -p user.warn "This is a warning message."
服务端的/var/log/rsyslogRemote会自动生成一个文件
root@8186d90b728e:/var/log/rsyslogRemote/127.0.0.1# ls
127.0.0.1_2024-03-25-19.log
查看文件发现时间已经改为正常的东8区时间格式。
root@8186d90b728e:/var/log/rsyslogRemote/127.0.0.1# cat 127.0.0.1_2024-03-25-19.log
2024-03-25T19:50:57.752073+08:00Z 127.0.0.1 rsyslogd: environment variable TZ is not set, auto correcting this to TZ=/etc/localtime [v8.2001.0 try https://www.rsyslog.com/e/2442 ]
2024-03-25T19:50:57.752090+08:00Z 127.0.0.1 rsyslogd: imklog: cannot open kernel log (/proc/kmsg): Operation not permitted.
2024-03-25T19:50:57.752093+08:00Z 127.0.0.1 rsyslogd: activation of module imklog failed [v8.2001.0 try https://www.rsyslog.com/e/2145 ]
2024-03-25T19:50:57.752096+08:00Z 127.0.0.1 rsyslogd: rsyslogd's groupid changed to 102
2024-03-25T19:50:57.752098+08:00Z 127.0.0.1 rsyslogd: rsyslogd's userid changed to 101
2024-03-25T19:50:57.752101+08:00Z 127.0.0.1 rsyslogd: [origin software="rsyslogd" swVersion="8.2001.0" x-pid="1" x-info="https://www.rsyslog.com"] start
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。