日志服务与文件共享 日志服务与文件共享一句话总结学了 Linux 日志怎么收rsyslog、怎么看journalctl、怎么切logrotate以及怎么给多台机器共享文件NFS和实时同步数据inotifyrsync / sersync。一、日志服务1. 日志是干什么的日志就是系统的黑匣子记录着什么时间、谁、干了什么事、结果如何。级别适用场景主机级别单机排查问题 →rsyslog集群级别多台机器统一收日志 →ELKElasticsearch Logstash Kibana或Spark类比rsyslog 就像你家里的日记本ELK 就像公司的档案室把所有人的日记统一归档方便检索。2. rsyslog 基础rsyslog Rocket-fast SYStem for LOG processing极速日志处理系统CentOS 6 / Rocky / openEuler 默认安装Ubuntu Server 需手动安装apt install rsyslog -y核心文件/usr/sbin/rsyslogd # 主程序 /etc/rsyslog.conf # 主配置文件 /etc/rsyslog.d/*.conf # 子配置文件目录 /var/log/messages # Rocky 默认日志Ubuntu 是 /var/log/syslog3. rsyslog 核心概念设施 优先级设施Facility— 数据来源分类设施可以理解为消息从哪来的——就像快递上的寄件地址标签。 ​ LOG_KERN → 内核产生的消息硬件驱动、内核错误 LOG_MAIL → 邮件服务 LOG_CRON → 定时任务crontab / at LOG_AUTH → 安全和认证 LOG_AUTHPRIV → 安全和认证私有 LOG_DAEMON → 各守护进程 LOG_FTP → FTP 服务 LOG_LOCAL0~7 → 自定义分类给第三方应用用 * → 所有设施优先级Priority— 消息紧急程度优先级可以理解为这条消息有多急——就像快递上的加急标签。 ​ 从高到低 LOG_EMERG 紧急系统要挂了 → 最高 LOG_ALERT ⚠️ 告警必须立即处理 LOG_CRIT 关键硬件故障等 LOG_ERR 错误 LOG_WARNING 警告 LOG_NOTICE 通知 LOG_INFO 一般信息 LOG_DEBUG ⚪ 调试信息 → 最低重要规则设置了某个优先级会记录该级别及以上所有级别的日志。比如设err则errcritalertemerg都会记。4. rsyslog 配置规则配置格式就是一个三段式设施.优先级 动作去哪里 ↓ ↓ 来源 筛选 重定向经典配置解读Rocky# 查看主配置中生效的规则 grep -Ev ^#|^$ /etc/rsyslog.conf*.info;mail.none;authpriv.none;cron.none /var/log/messages # 除了 mail、authpriv、cron 之外的 info 及以上日志 → 写到 messages ​ authpriv.* /var/log/secure # 安全认证相关的所有日志 → 写到 secure ​ mail.* -/var/log/maillog # 邮件相关所有日志 → 写到 maillog- 表示异步写入 ​ cron.* /var/log/cron # 定时任务相关日志 → 写到 cron ​ *.emerg :omusrmsg:* # 所有设施的紧急日志 → 发给所有登录用户终端弹窗警告 ​ local7.* /var/log/boot.log # 启动流程日志 → 写到 boot.log解读示例*.info;mail.none;authpriv.none;cron.none /var/log/messages— 我要记所有设施的 info 及以上日志但 mail、authpriv、cron 的日志别混进来它们有专门的文件。5. 选择器的多种写法写法含义示例*所有优先级kern.*内核所有日志none不记录mail.none排除邮件日志priority仅该级别mail.err只记 mail 的 err!priority排除该级别及以上mail.!info不记 info 及以上?基于属性过滤:msg,contains,error /var/log/myerr.log6. 动作Action— 日志去哪动作写法说明写入文件/var/log/xxx.log最常见的异步写入-/var/log/xxx.log加-不阻塞丢入黑洞/dev/null不想保留的日志发给用户root或*发给已登录用户发送远程IP:端口UDP 发送发送远程IP:端口TCP 发送可靠存数据库action(typeommysql ...)需装对应模块丢弃stop不处理扔掉远程日志转发重点角色 日志客户端Client→ 发送日志 → 日志服务器Server ​ Server 端启用 UDP/TCP 模块监听 514 端口 Client 端在规则中把日志动作指向 Server# 服务端启用 TCP 接收修改 /etc/rsyslog.conf module(loadimtcp) input(typeimtcp port514) # 客户端配置把日志转发到服务端 *.info;mail.none 10.0.0.100:5147. journalctl — systemd 日志查看rsyslog 管的是文本日志/var/log/ 下的文件而 systemd 还有一个二进制日志系统journald用journalctl查看。命令作用journalctl -xeu 服务名最常用查看某个服务的详细日志含错误解释journalctl -f实时跟踪日志类似tail -fjournalctl --since 10 min ago只看最近 10 分钟journalctl -p err只看 error 及以上级别的日志推荐用法服务起不来了先跑journalctl -xeu 服务名比看配置文件快多了。8. logrotate — 日志轮转切割日志如果不切割会越来越大直到撑爆磁盘。logrotate 就是自动帮你切日志的工具。/etc/logrotate.conf # 主配置 /etc/logrotate.d/ # 各服务的轮转规则配置项解读/var/log/messages { monthly # 每月轮转一次 rotate 4 # 保留最近 4 个归档 compress # 压缩归档.gz missingok # 文件不存在不报错 notifempty # 空文件不轮转 create 0600 root root # 轮转后新建日志文件的权限 }参数含义daily / weekly / monthly按时间轮转size 100M按大小轮转超过 100M 就切rotate N保留 N 个旧版本compress压缩归档missingok日志文件不存在也不报错notifempty日志为空则不轮转create 权限 属主 属组轮转后创建新日志文件postrotate ... endscript轮转后执行的脚本通常重启服务实际生产环境通常时间和容量双重触发每天切一次但如果某天日志量特别大超过 100M 也会提前切。二、共享存储1. 存储类型总览存储样式 DAS直连存储 → 硬盘直接插在机器上 → 就像自己电脑的硬盘 NAS网络附加存储→ 通过网络共享文件 → 就像公司共享文件夹 SAN存储区域网络→ 通过光纤/网络共享块设备 → 就像远程硬盘高级 存储方式 块存储 → 像硬盘一样用可以分区、格式化→ 对应 SAN 文件存储 → 像文件夹一样用NFS、CIFS → 对应 NAS 对象存储 → 像网盘一样用存放、下载、分享→ 对应 OSS/S32. NFS — 网络文件系统NFS 是最经典的 Linux 文件共享方案把一台机器的目录通过网络挂载到另一台机器上。服务端配置# 1. 安装 yum install nfs-utils -y # 2. 编辑共享配置 vim /etc/exports/data/share 10.0.0.0/24(rw,sync,no_root_squash) # 共享目录 允许的网段(权限)导出选项含义rw / ro读写 / 只读sync同步写入安全但慢async异步写入快但可能丢数据no_root_squash客户端 root 保持 root 权限root_squash默认客户端 root 映射为 nobody安全no_subtree_check禁用子树检查提高性能# 3. 生效配置 exportfs -r # 重新读取 exports exportfs -v # 查看当前导出的共享 # 4. 启动服务 systemctl enable --now nfs-server客户端挂载showmount -e 10.0.0.100 # 查看服务端有哪些共享目录 mount -t nfs 10.0.0.100:/data/share /mnt/nfs # 挂载 df -h # 确认已挂载 # 永久挂载 → 写入 /etc/fstab 10.0.0.100:/data/share /mnt/nfs nfs defaults 0 0⚠️NFS 权限两层检查先看/etc/exports的网络权限rw/ro再看文件系统本身的权限755/644。两层都允许才能读写。三、实时数据同步1. 方案对比方案原理优点缺点inotify rsyncinotify 监控文件变化 → 触发 rsync 同步简单、原生支持高频变更时事件风暴、重复同步sersync rsyncsersync 代替 inotify事件去重 多线程高效、配置简单、失败重试项目已停更2. inotify rsyncinotify 监控命令# 监控 /data 目录的文件变更阻塞等待事件 inotifywait -mrq /data/ -e create,delete,close_write,attrib # 常用选项 -m # 持续监控不加则只监控一次退出 -r # 递归监控子目录 -q # 只输出事件信息不输出标题 -e # 指定要监控的事件 --format %T %w%f # 自定义输出格式 --timefmt %F %T # 时间戳格式rsync 同步命令# 本地同步 rsync -avz /源目录/ /目标目录/ # 推送到远程 rsync 服务 rsync -avz --delete /data/www/ rsyncer10.0.0.13::dir1 # 常用选项 -a # 归档模式保留权限、时间等属性 -v # 显示过程 -z # 压缩传输 --delete # 目标端删除源端不存在的文件保持完全一致rsync 服务端配置# /etc/rsyncd.conf uid root gid root log file /var/log/rsyncd.log pid file /var/run/rsyncd.pid [dir1] path /data/dir1/ comment sync dir1 read only no auth users rsyncer secrets file /etc/rsyncd.pwd# 密码文件服务端 echo rsyncer:123456 /etc/rsyncd.pwd chmod 600 /etc/rsyncd.pwd # 密码文件客户端只需密码 echo 123456 /etc/rsyncd.pwd chmod 600 /etc/rsyncd.pwd完整同步脚本#!/bin/bash # inotify rsync 实时同步脚本 SRC/data/www/ DESTrsyncer10.0.0.13::dir1 PASS_FILE/etc/rsyncd.pwd LOG_FILE/var/log/rsync_sync.log inotifywait -mrq --timefmt %F %T --format %T %w%f \ -e create,delete,moved_to,close_write,attrib ${SRC} | \ while read TIME FILE; do rsync -az --delete --password-file${PASS_FILE} ${SRC} ${DEST} \ echo ${TIME} ${FILE} synced ${LOG_FILE} done⚠️inotify 的坑高频写入场景下一个文件保存可能触发多个事件CREATE CLOSE_WRITE ATTRIB导致 rsync 被反复调用。这就是 sersync 要解决的问题。3. sersync rsync增强版sersync 用 C 重写了 inotify 监控逻辑自带事件去重、多线程并发、失败重试队列、内置 crontab。# 1. 下载解压 wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz mv GNU-Linux-x86/ /usr/local/sersync # 2. 修改配置文件 /usr/local/sersync/confxml.xmlinotify createFile starttrue/ attrib starttrue/ modify starttrue/ /inotify sersync localpath watch/data/www remote ip10.0.0.13 namedir1/ /localpath rsync commonParams params-artuz/ auth starttrue usersrsyncer passwordfile/etc/rsyncd.pwd/ /rsync /sersync# 3. 启动守护进程模式 cd /usr/local/sersync ./sersync2 -dro ./confxml.xml # 参数说明 -d # 守护进程模式后台运行 -r # 启动前先全量同步一次 -o # 指定配置文件sersync 启动后会自动调整内核参数max_user_watches、max_queued_events不需要手动调优。今日干货总结场景用什么一句话命令看某个服务的日志journalctljournalctl -xeu nginx配置日志收集规则rsyslogfacility.priority /var/log/xxx.log日志切分防爆盘logrotate配/etc/logrotate.d/共享目录给其他机器NFSexportfs -rmount -t nfs实时同步文件到远程inotifyrsync写脚本循环监控 同步生产级实时同步sersyncrsyncsersync2 -dro confxml.xml日志是排错的第一入口共享存储是集群的基础实时同步是数据一致性的保障 — 这三块做好服务器管理就稳了一大半。