如何将systemd日志重定向至文件、syslog或Filebeat可读文件?
我来帮你搞定这个问题!把systemd的日志转到syslog或者让Filebeat能读取,其实有几种靠谱的方法,我给你一步步拆解:
systemd-journald本身就支持把日志转发给syslog服务(比如rsyslog或syslog-ng),操作步骤很简单:
确保syslog服务已安装并运行
如果你用的是rsyslog,先检查状态:systemctl status rsyslog如果没安装,用包管理器装上,比如Debian/Ubuntu:
apt install rsyslog,CentOS/RHEL:yum install rsyslog,然后启动并设置开机自启:systemctl enable --now rsyslog修改journald配置开启转发
编辑/etc/systemd/journald.conf文件,找到ForwardToSyslog这一行,去掉注释并改成:ForwardToSyslog=yes另外可以顺便检查
ForwardToConsole和ForwardToWall,如果不需要重复输出可以设为no。重启journald服务生效
systemctl restart systemd-journald验证日志是否转发成功
查看syslog的日志文件(比如/var/log/syslog或/var/log/messages),或者用tail -f /var/log/syslog实时观察新日志是否进来。
这里有两种思路:一是让Filebeat直接读取systemd的二进制日志(推荐,高效不丢数据),二是让journald把日志导出到文本文件再让Filebeat读取。
思路1:Filebeat直接对接systemd-journald
这是官方推荐的方式,不需要额外导出日志,步骤如下:
配置Filebeat的journald输入
编辑Filebeat的主配置文件/etc/filebeat/filebeat.yml,添加或修改input部分:filebeat.inputs: - type: journald paths: [] # 可选:过滤特定服务的日志,比如只收集nginx的 # include_matches: # - "_SYSTEMD_UNIT=nginx.service"给Filebeat添加读取journal的权限
默认情况下Filebeat用户可能没有读取systemd日志目录的权限,把它加到systemd-journal组里:usermod -aG systemd-journal filebeat配置日志输出(比如Elasticsearch)
如果你要把日志发到Elasticsearch,在配置文件里找到output部分,设置:output.elasticsearch: hosts: ["your-es-host:9200"] # 需要认证的话添加用户名密码 # username: "elastic" # password: "your-password"要是只是测试,也可以先输出到控制台:
output.console: enabled: true pretty: true重启Filebeat并验证
systemctl restart filebeat查看Filebeat日志确认没有错误:
journalctl -u filebeat -f,或者看控制台输出(如果选了console输出)。
思路2:让journald导出日志到文本文件
如果一定要用文本文件让Filebeat读取,可以通过定时任务导出:
创建日志导出脚本
创建/usr/local/bin/export-systemd-logs.sh:#!/bin/bash LOG_FILE="/var/log/systemd_export.log" # 导出最近1小时的日志,覆盖旧文件(用>>可以追加) journalctl --since "1 hour ago" --until now > $LOG_FILE # 给Filebeat读取权限 chmod 644 $LOG_FILE给脚本加执行权限:
chmod +x /usr/local/bin/export-systemd-logs.sh添加定时任务
编辑crontab:crontab -e添加一行,让脚本每小时执行一次:
0 * * * * /usr/local/bin/export-systemd-logs.sh配置Filebeat读取该文件
在/etc/filebeat/filebeat.yml里添加:filebeat.inputs: - type: log paths: - /var/log/systemd_export.log重启Filebeat即可。
内容的提问来源于stack exchange,提问作者Flochon

