—— 包含 SSH 日志集中、MySQL 存储、多主机日志汇总的完整实验

搭建时间同步服务器

一、准备环境 & 安装服务

chrony 是目前 Linux 系统中更推荐的时间同步工具,相比传统 ntpd 更轻量、同步精度更高,适配 Ubuntu 环境。

1. 更新软件源

先更新系统软件包列表,确保后续安装依赖正常

2. 安装 chrony 服务

直接通过 apt 安装 chrony

二、配置 chrony 作为局域网 NTP 服务器

chrony 的核心配置文件为 /etc/chrony/chrony.conf,我们需要修改该文件,配置上游时间源和内网访问权限。

1. 编辑配置文件

使用 nano 打开配置文件

nano /etc/chrony/chrony.conf

2. 核心配置修改

在文件中添加 / 修改以下关键配置(可直接复制替换原有内容,或按需补充)

# 1. 配置上游公共NTP时间源(优先使用国内源,保证同步稳定性)
pool ntp.aliyun.com iburst
pool ntp.tuna.tsinghua.edu.cn iburst
pool cn.ntp.org.cn iburst

# 2. 允许局域网10.0.0.0/24网段的客户端同步时间
allow 10.0.0.0/24

# 3. 公网NTP源不可用时,允许本地服务器作为时间源提供服务
local stratum 10

# 4. 系统基础配置(默认已存在,无需修改,确认即可)
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync

3. 保存并退出配置文件

在 nano 编辑器中,按 Ctrl+O 回车保存修改,再按 Ctrl+X 退出编辑器。

三、重启服务并放行防火墙

配置修改完成后,需要重启 chrony 服务生效配置,同时放行 NTP 服务的 UDP 123 端口,确保内网客户端可正常连接。

1. 重启 chrony 服务并设置开机自启

# 重启服务,加载新配置
systemctl restart chrony

# 设置开机自动启动chrony服务
systemctl enable chrony

# 查看服务运行状态,确认服务正常
systemctl status chrony

看到 active (running) 即表示服务运行正常。

2. 放行防火墙端口

NTP 服务默认使用 UDP 123 端口,根据你的防火墙类型执行对应命令

使用 ufw(Ubuntu 默认防火墙):

ufw allow 123/udp

四、验证 NTP 服务器状态

通过以下命令验证服务器是否成功同步上游时间,并准备好为内网客户端提供服务。

1. 查看时间同步状态

chronyc tracking

关键指标解读:

Leap status: Normal:表示时间同步状态正常,无异常告警;

Stratum:层级为 3 左右,说明服务器已成功与上游 NTP 源同步;

System time:显示当前系统时间与标准 NTP 时间的误差,误差在毫秒级即表示同步精度正常。

2. 查看客户端连接情况

后续有内网客户端连接同步时间时,可通过以下命令查看

chronyc clients

该命令会显示所有连接到这台 NTP 服务器的客户端 IP 及同步状态。

总结常见的日志服务管理的常见日志服务

1. rsyslog(最广泛使用)

配置文件/etc/rsyslog.conf/etc/rsyslog.d/

管理命令

systemctl restart rsyslog
systemctl enable --now rsyslog

特点:传统 syslog 的增强版;支持 TCP/UDP/TLS 远程日志;支持将日志写入文件、数据库、网络等。

日志默认位置/var/log/(messages, secure, cron, maillog 等)

2. syslog-ng

配置文件/etc/syslog-ng/syslog-ng.conf

管理命令

特点:比 rsyslog 更灵活的消息过滤和分类;更现代化的配置语法;企业级功能丰富。

3. systemd-journald

配置文件/etc/systemd/journald.conf

管理命令

systemctl restart systemd-journald

特点:systemd 自带,几乎所有现代发行版默认启用;二进制日志存储(快速、索引安全);查看日志命令:journalctl

默认存储/run/log/journal/(临时)或 /var/log/journal/(持久化)

4. logrotate(日志轮转工具,常与其他服务搭配)

配置文件/etc/logrotate.conf/etc/logrotate.d/

管理命令

logrotate -vf /etc/logrotate.conf   # 手动执行
systemctl restart logrotate         # 服务型

作用:自动压缩、切分、删除旧日志。

管理日志的常用查询/排查命令

Linux 日志管理实战 5 合 1 完整教程

一、3 台主机通过 rsyslog 集中收集 SSH 日志到服务器

环境说明

  • 日志服务端:10.0.0.13
  • 客户端 1:10.0.0.12
  • 客户端 2:10.0.0.15
  • 目标:所有客户端 SSH 日志 → 服务端 /var/log/all-ssh.log

1. 服务端配置(10.0.0.13)

1)修复 rsyslog 并启动

systemctl unmask rsyslog
systemctl unmask syslog.socket
systemctl enable rsyslog
systemctl start rsyslog

2)编辑 rsyslog 配置

nano /etc/rsyslog.conf

3)开启 UDP 514 接收

4)创建日志文件并授权

touch /var/log/all-ssh.log
chown syslog:syslog /var/log/all-ssh.log
chmod 644 /var/log/all-ssh.log

5)重启服务

systemctl restart rsyslog

6)放行防火墙

# Ubuntu
ufw allow 514/udp

# Rocky/CentOS
firewall-cmd --add-service=syslog --permanent
firewall-cmd --reload

2. 客户端配置(10.0.0.12 和 10.0.0.15)

nano /etc/rsyslog.d/ssh-forward.conf

2)写入内容

3)重启客户端 rsyslog

systemctl restart rsyslog

3. 测试

服务端查看实时日志

tail -f /var/log/all-ssh.log

二、/var/log/ 目录常用日志文件作用

三、journalctl 命令常用选项 + 示例

1)基础查看

journalctl                    # 全部日志
journalctl -n 20               # 最后20行
journalctl -f                 # 实时刷新
journalctl -k                 # 只看内核日志

2)按服务查看

journalctl -u rsyslog
journalctl -u sshd
journalctl -u chrony

3)按时间过滤

journalctl --since "10 min ago"
journalctl --since "2025-05-01 00:00:00" --until "2025-05-06 00:00:00"

4)优先级查看

journalctl -p err              # 错误日志
journalctl -p warning          # 警告

5)其他常用

journalctl --disk-usage        # 查看日志占用空间
journalctl --vacuum-size=100M  # 清理日志到100M
journalctl --vacuum-time=90d   # 保留90天

4. 多主机 Logger 日志集中写入 MySQL

1 安装 MySQL 和 rsyslog MySQL 模块

服务端执行

# Ubuntu/Debian
apt install mysql-server rsyslog-mysql -y

# CentOS/RHEL
yum install mariadb-server rsyslog-mysql -y

2 创建数据库和表

执行以下 SQL:

mysql -u root -p
CREATE DATABASE rsyslog;
USE rsyslog;

CREATE TABLE SystemEvents (
    ID int unsigned not null auto_increment primary key,
    CustomerID bigint,
    ReceivedAt datetime NULL,
    DeviceReportedTime datetime NULL,
    Facility smallint NULL,
    Priority smallint NULL,
    FromHost varchar(60) NULL,
    Message text,
    NTSeverity int NULL,
    Importance int NULL,
    EventSource varchar(60),
    EventUser varchar(60) NULL,
    EventCategory int NULL,
    EventID int NULL,
    EventBinaryData text NULL,
    MaxAvailable int NULL,
    CurrUsage int NULL,
    MinUsage int NULL,
    MaxUsage int NULL,
    InfoUnitID int NULL,
    SysLogTag varchar(60),
    EventLogType varchar(60),
    GenericFileName varchar(60),
    SystemID int NULL
);

CREATE USER 'rsyslog'@'localhost' IDENTIFIED BY 'password123';
GRANT ALL ON rsyslog.* TO 'rsyslog'@'localhost';
FLUSH PRIVILEGES;
EXIT;

3 配置 rsyslog 写入 MySQL

vim /etc/rsyslog.d/50-mysql.conf
# 加载 MySQL 模块
module(load="ommysql")

# 将所有 logger 日志写入 MySQL
if $programname == 'logger' then {
    action(type="ommysql" server="localhost" db="rsyslog" uid="rsyslog" pwd="password123")
    stop
}

添加内容:

4 客户端配置(多主机)

每个客户端执行:

vim /etc/rsyslog.d/50-logger-client.conf
# 发送 logger 命令产生的日志
if $programname == 'logger' then {
    action(type="omfwd" target="192.168.1.100" port="514" protocol="tcp")
}

添加(rocky服务器 IP 10.0.0.12):

5 测试

客户端执行:

logger -t logger "Test message from $(hostname -I | awk '{print $1}')"

服务端验证:

mysql -u root -p -e "SELECT FromHost, Message, ReceivedAt FROM rsyslog.SystemEvents ORDER BY ID DESC LIMIT 5;"

5. Logrotate 切割 messages 日志

# 模拟强制执行切割(调试模式)
logrotate -d /etc/logrotate.d/messages-custom

# 强制执行一次(实际切割)
logrotate -vf /etc/logrotate.d/messages-custom
# 查看切割后的文件
ls -lh /var/log/messages*

验证所有配置

# 检查 rsyslog 语法
rsyslogd -f /etc/rsyslog.conf -N1

# 查看 rsyslog 状态
systemctl status rsyslog

# 查看日志是否正常写入
tail -f /var/log/all-ssh.log

apache环境部署结果

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐