前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >rsyslog 时区问题

rsyslog 时区问题

原创
作者头像
奇门水镜
发布2024-03-26 20:21:13
870
发布2024-03-26 20:21:13

时区问题

1.1 问题描述

官方提供的镜像rsyslog/syslog_appliance_alpine无法获取时区信息。宿主机是东八区时区,但是rsyslog接收远程syslog日志存储时给的时间是UTC时间。

替换了多个参数/配置后,还是无法自动读取系统时区文件。

代码语言:bash
复制
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 (无效)

1.2 解决方案

在无法改动rsyslog-alpine镜像自动读取时区的情况下,决定使用ubuntu:20.04基础镜像制作一个新的rsyslog镜像。

代码语言:bash
复制
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"]

1.3 搭建环境自测(单机即可)

安装服务端(容器)

代码语言:yml
复制
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配置如下

代码语言:bash
复制
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的两个参数:

代码语言:bash
复制
$PrivDropToUser root
$PrivDropToGroup root

docker-compose up -d 启动rsyslog容器即可。

安装客户端(用操作系统自带的测试即可)

代码语言:bash
复制
# 安装rsyslog,一般都是系统自带安装好的
$ sudo apt install rsyslog

# 默认配置文件: /etc/rsyslog.d/50-default.conf
$ sudo vim /etc/rsyslog.d/50-default.conf

为什么客户端不用docker搭建,而用系统自带的rsyslog包。因为我懒,测起来方便。

客户端常用的一些配置如下所示

代码语言:bash
复制
# 将所有日志输出到本地文件
*.* /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服务。

模拟发送一条syslog日志

代码语言:bash
复制
$ logger -p user.warn "This is a warning message."

服务端的/var/log/rsyslogRemote会自动生成一个文件

代码语言:bash
复制
root@8186d90b728e:/var/log/rsyslogRemote/127.0.0.1# ls
127.0.0.1_2024-03-25-19.log

查看文件发现时间已经改为正常的东8区时间格式。

代码语言:bash
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 时区问题
    • 1.1 问题描述
      • 1.2 解决方案
        • 1.3 搭建环境自测(单机即可)
          • 安装服务端(容器)
          • 安装客户端(用操作系统自带的测试即可)
          • 模拟发送一条syslog日志
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档