搭建syslog服务器+log4j2输出日志到syslog

文章目录

  • 前言
  • 搭建syslog服务器
  • 修改rsyslog配置
  • 自定义配置
  • 测试验证
    • Log4j2依赖
    • Log4j2配置
    • 测试接口
    • 验证
  • 日志转发
  • 参考资料

前言

本文将介绍如何搭建syslog服务器,并使用Apache Log4j2将日志数据输出到syslog服务器,同时验证syslog的转发功能。

搭建syslog服务器

在Linux系统中使用rsyslog服务进行日志服务器的搭建,通常在Linux系统中已经安装了该服务但未启动。

首先通过查看服务状态确认是否已经安装该服务,以及服务是否为运行状态。

root@westone:~# systemctl status rsyslog.service
● rsyslog.service - System Logging Service
     Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-01-10 01:39:29 UTC; 3 days ago
TriggeredBy: ● syslog.socket
       Docs: man:rsyslogd(8)
             man:rsyslog.conf(5)
             https://www.rsyslog.com/doc/
   Main PID: 921 (rsyslogd)
      Tasks: 10 (limit: 2196)
     Memory: 4.7M
        CPU: 401ms
     CGroup: /system.slice/rsyslog.service
             └─921 /usr/sbin/rsyslogd -n -iNONE

修改rsyslog配置

syslog服务支持TCPUDP两种通讯协议,通过修改配置可以同时启用,服务的配置文件路径为/etc/rsyslog.conf,删除module和input前的注释。

# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")

# provides TCP syslog reception
module(load="imtcp")
input(type="imtcp" port="514")

重启服务使配置生效。

systemctl restart rsyslog.service

此时可以看到rsyslogd进程已经监听了514端口。

配置文件中默认配置了IncludeConfig目录,我们可以将自定义的配置放在/etc/rsyslog.d/目录下。

#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf

自定义配置

/etc/rsyslog.d目录下创建配置文件local0.conf,文件内容如下:

# 配置可以接收日志的网段
$AllowedSender TCP, 127.0.0.1, 192.168.137.0/24
$AllowedSender UDP, 127.0.0.1, 192.168.137.0/24

# 配置日志模板
# remote-incoming-logs为自定义的日志模板名称
# 该配置表示将在`/var/log/rsyslog/`目录下按照主机名称,每天创建一个日志文件
$template remote-incoming-logs,"/var/log/rsyslog/%HOSTNAME%/%PROGRAMNAME%_%$YEAR%-%$MONTH%-%$DAY%.log"
# 过滤facility为local0的日志使用该模板
local0.* ?remote-incoming-logs

# 配置远程转发
local0.*        @@192.168.137.100

完成自定义配置后,可以通过命令检查配置语法是否正确。

root@westone:/etc/rsyslog.d# rsyslogd /etc/rsyslog.d/local0.conf
usage: rsyslogd [options]
use "man rsyslogd" for details. To run rsyslog interactively, use "rsyslogd -n"
to run it in debug mode use "rsyslogd -dn"
For further information see https://www.rsyslog.com/doc/

修改配置的目标日志文件路径的用户和分组,否则在记录日志时将会出现没有权限的错误。

chown syslog:adm /var/log/rsyslog/

重启rsyslog服务使配置生效。

systemctl restart rsyslog.service

同时可以查看rsyslog服务启动时是否有错误。

journalctl -xfu rsyslog

测试验证

Log4j2依赖

基于Spring Boot开发时,需要在引入依赖时排除对默认的logback日志组件的依赖,并加入spring-boot-starter-log4j2的依赖。

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
    <version>2.7.5version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-loggingartifactId>
        exclusion>
    exclusions>
dependency>
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-log4j2artifactId>
    <version>2.7.5version>
dependency>

Log4j2配置

log4j2.xml配置Syslog的appender,日志格式遵从RFC5424规范,并设置日志服务器的地址和端口,将facility设置为与上位


<configuration status="WARN">
    <appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread] [%-30.30logger{30}] %msg%n"/>
        Console>
        <Syslog name="SYSLOG" format="RFC5424" host="192.168.137.218" port="514" protocol="UDP" appName="test-app"
                facility="LOCAL0"/>
    appenders>
    <loggers>
        <root level="info">
            <appender-ref ref="SYSLOG"/>
            <appender-ref ref="CONSOLE"/>
        root>
    loggers>
configuration>

测试接口

编写一个简单的测试接口类,输出当前的系统时间,日志组件将会把内容输出到syslog服务器上。

@RestController
@Slf4j
public class HelloController {
    @GetMapping("/now")
    public String now() {
        String now = "Now: " + LocalDateTime.now();
        log.info(now);
        return now;
    }
}

验证

启动测试服务,调用测试接口,可以看到除了在控制台会输出信息,在日志服务器的/var/log/rsyslog/WST-20220825QHX目录下会生成当前日志的日志文件,其中WST-20220825QHX是测试服务所在机器的主机名。

root@westone:/var/log/rsyslog/WST-20220825QHX# ls
test-app_2023-01-13.log

日志内容与控制台输出的内容一致。

日志转发

由于我们在rsyslog配置文件中增加了转发的规则,该日志同时会以UDP协议转发到指定的服务器上,该服务器的rsyslog配置可参考上文的内容。

# 配置远程转发
local0.*        @@192.168.137.100

参考资料

  • Apache Log4j2 SyslogAppender
  • RSyslog Documentation

你可能感兴趣的:(log4j,syslog)