第二十八:日志服务管理
一、系统日志介绍
在现实生活中,记录日志非常重要﹐比如:银行转账时会有转账记录﹔飞机飞行过程中的黑盒子(飞行数据记录器)记录着飞机的飞行过程. 那么将系统和应用发生的事件记录至日志中,也很意义,常可以助于排错和分析使用
日志记录的内容包括:
历史事件:时间,地点,人物,事件
日志级别:事件的关键性程度,Loglevel
(1)sysklogd系统日志服务
CentOS 5 之前版本采用的日志管理系统服务
klogd: linux kernel 记录内核日志
syslogd: system application 记录应用日志
事件记录格式:
日期时间 主机 进程[pid]: 事件内容
C/S架构:通过TCP或UDP协议的服务完成日志记录传送,将分布在不同主机的日志实现集中管理
(2)rsyslog系统日志服务
rsyslog是CentOS 6 以后版本的系统管理服务.它提供了高性能,出色的安全性和模块化设计。 尽管
rsyslog最初是常规的syslogd,但已发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输
入,并将其转换,然后输出到不同的目的地。
当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。 即使在远程的目的地
和更精细的处理中,性能通常也被认为是“惊人的”。
官方网站:
1 | https://www.rsyslog.com/ |
rsyslog 特性
多线程
UDP, TCP, SSL, TLS, RELP
MySQL, PGSQL, Oracle实现日志存储
强大的过滤器,可实现过滤记录日志信息中任意部分
自定义输出格式
适用于企业级中继链

(3) ELK
ELK:由Elasticsearch, Logstash, Kibana三个软件组成
非关系型分布式数据库
基于Apache软件基金会jakarta项目组的项目lucene
Elasticsearch是个开源分布式搜索引擎,可以处理大规模日志数据,比如:Nginx、Tomcat、系统日志等功能
Logstash对日志进行收集、分析,过滤,并将其存储供以后使用
Kibana 可以提供的日志分析友好的 Web 界面
二、Rsyslog管理
1、系统日志术语
facility:设施,从功能或程序上对日志进行归类
1 2 3 4 5 | #内置分类 auth, authpriv, cron, daemon,ftp,kern, lpr, mail, news, security(auth), user ( default ), uucp, syslog #自定义的分类 local0-local7 |
参看帮助: man 3 syslog,man logger
1 2 | [root@centos8 ~]#yum -y install man-pages [root@centos8 ~]#man 3 syslog |
2、rsyslog相关文件
程序包:rsyslog
主程序:/usr/sbin/rsyslogd
Ubuntu: /usr/lib/systemd/system/rsyslog.service
CentOS 6:/etc/rc.d/init.d/rsyslog {start|stop|restart|status}
CentOS 7,8:/usr/lib/systemd/system/rsyslog.service
配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
库文件: /lib64/rsyslog/*.so
3、rsyslog配置文件
/etc/rsyslog.conf 配置文件格式:由三部分组成
MODULES:相关模块配置
GLOBAL DIRECTIVES:全局配置
RULES:日志记录相关的规则配置
RULES配置格式:
1 | facility.priority; facility.priority… target |
facility格式:
1 2 | * #所有的facility facility1,facility2,facility3,... #指定的facility列表 |
priority格式:
1 2 3 4 | *: 所有级别 none:没有级别,即不记录 PRIORITY:指定级别(含)以上的所有级别 =PRIORITY:仅记录指定级别的日志信息 |
target格式:
1 2 3 4 | 文件路径:通常在/var/log/,文件路径前的-表示异步写入 用户:将日志事件通知给指定的用户,* 表示登录的所有用户 日志服务器:@host,把日志送往至指定的远程UDP日志服务器 @@host 将日志发送到远程TCP日志服务器 管道: | COMMAND,转发给其它命令处理 |
通常的日志文件的格式:
日志文件有很多,如: /var/log/messages,cron,secure等,基本格式都是类似的。格式如下
事件产生的日期时间 主机 进程(pid):事件内容
4、启用网络日志服务
启用网络日志服务功能,可以将多个远程主机的日志,发送到集中的日志服务器,方便统一管理。
1 2 3 4 5 6 7 8 9 | [root@centos8 ~]#vim /etc/rsyslog.conf ## MODULES #### ...省略... # Provides UDP syslog reception # for parameters see http://www.rsyslog.com/doc/imudp.html module( load = "imudp" ) # needs to be done just once input(type= "imudp" port= "514" ) # Provides TCP syslog reception # for parameters see http://www.rsyslog.com/doc/imtcp.html |
module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")
#在客户端指定将日志发送到远程的TCP、UDP的日志服务器
[root@centos7 ~]#vim /etc/rsyslog.conf
5、常见日志文件
/var/log/secure,/var/log/auth.log:系统安全日志,文本格式,应周期性分析
/var/log/btmp:当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行查看
/var/log/wtmp:当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看
1 2 | #显示系统关机项和运行级别更改 last -x, --system |
/var/log/lastlog:每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看
/var/log/dmesg:CentOS7 之前版本系统引导过程中的日志信息,文本格式,开机后的硬件变化
将不再记录,也可以通过专用命令
dmesg查看,可持续记录硬件变化的情况
/var/log/boot.log 系统服务启动的相关信息,文本格式,Ubuntu无此文件
/var/log/messages(红帽系统),/var/log/syslog (Ubuntu) :系统中大部分的信息
/var/log/anaconda : anaconda的日志,Ubuntu无此文件
三、日志管理工具 journalctl
CentOS 7 以后版,利用Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用
journalctl一个命令,查看所有日志(内核日志和应用日志)。
日志的配置文件:
1 | /etc/systemd/journald.conf |
journalctl命令格式
1 | journalctl [OPTIONS...] [MATCHES...] |
选项说明:
四、利用 MySQL 存储日志信息
1、目前和环境
利用rsyslog日志服务,将收集的日志记录于MySQL中
两台主机
一台:rsyslog日志服务器,IP:10.0.0.8
一台:mariadb数据库服务器,IP:10.0.0.18
2、在rsyslog服务器上安装连接mysql模块相关的程序包
1 2 3 | [root@centos8 ~]#yum -y install rsyslog-mysql [root@ubuntu2004 ~]#apt -y install rsyslog-mysql [root@centos8 ~]#rpm -ql rsyslog-mysql |
#查看sql脚本文件内容
[root@ubuntu2204 ~]#cat /usr/share/dbconfig-common/data/rsyslog
mysql/install/mysql
[root@ubuntu2004 ~]#cat /usr/share/dbconfig-common/data/rsyslog
mysql/install/mysql
[root@centos8 ~]#cat /usr/share/doc/rsyslog/mysql-createDB.sql
#方法1:事先执行2.3.2步骤再执行下面指令
[root@ubuntu2204 ~]#mysql -ursyslog -p123456 -h10.0.0.202 Syslog <
/usr/share/dbconfig-common/data/rsyslog-ysql/install/mysql
[root@ubuntu2204 ~]#mysql -ursyslog -p123456 -h10.0.0.202 Syslog -e "source
/usr/share/dbconfig-common/data/rsyslog-ysql/install/mysql"
#方法2
#将sql脚本复制到数据库服库上
[root@centos8 ~]#scp /usr/share/doc/rsyslog/mysql-createDB.sql 10.0.0.18:/data
3、准备 MySQL
1 2 3 4 5 6 | [root@centos8 ~]#yum install mysql-server #在MySQL数据库服务器上创建相关数据库和表,并授权rsyslog能连接至当前服务器 [root@centos8 ~]#mysql -u mysql>source /data/mysql-createDB.sql mysql> CREATE USER 'rsyslog' @ '10.0.0.%' IDENTIFIED BY '123456' ; mysql> GRANT ALL ON Syslog.* TO 'rsyslog' @ '10.0.0.%' ; |
4、配置日志服务器将日志发送至指定数据库
五、 Logrotate 日志转储
1、Logrotate 介绍
logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转
储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行
2、Logrotate 配置
软件包:logrotate
相关文件
计划任务:/etc/cron.daily/logrotate,/lib/systemd/system/logrotate.service,/lib/systemd/system/logrotate.timer
程序文件:/usr/sbin/logrotate
配置文件: /etc/logrotate.conf
日志文件:/var/lib/logrotate/logrotate.status
配置文件主要参数如下:
3、 Logroate 配置范例
分类:
马哥教育Linux笔记
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库