Linux 日志管理
操作系统内核和程序记录了发生的事件日志,这些日志用于审核系统并解决问题。日志以文本方式保存在/var/log目录中。可以使用普通文本实用程序(如less和tail)检查这些日志。
Linux 内置了基于Syslog协议的标准日志记录系统。许多程序使用此系统记录事件并将其组织到日志文件中。CentOS 7 中systemd-journald和rsyslog服务负责处理syslog消息。
- systemd-journald 服务,是操作系统事件记录体系结构的核心,收集系统各方面事件消息,包括内核、引导过程早期阶段的输出、守护程序启动和运行时的输出、syslog事件,然后将它们重组为标准格式,并写入结构化的索引系统日志中。
- rsyslog 服务,读取systemd-journald日志,然后记录到日志文件,或根据自己的配置将日志保存到不同的文件中,以及转发给其他程序。
rsyslog 日志配置
rsyslog 服务配置
配置文件位置
- 主配置: /etc/rsyslog.conf。主配置文件中以下配置作用是引入从配置目录中配置文件。
- 从配置:/etc/rsyslog.d/*.conf。
日志记录规则
每一条日志消息都可以通过消息类型facility和priority分类,参考rsyslog.conf(5)。
日志记录规则格式: facility+连接符号+priority 处理方式
priority(优先级)
0 - EMERG(紧急)
含义:系统不可用,通常表示系统处于严重故障或崩溃状态,例如内核崩溃、硬件灾难性故障等。
示例:当服务器的硬盘突然损坏,导致系统无法正常读写数据,相关组件就可能产生EMERG
级别的日志,提示系统已经处于无法继续提供服务的严重状态。
应用场景:这类日志消息通常会触发系统的警报机制,比如通过短信、邮件等方式通知系统管理员立即处理,因为这可能导致整个系统停机。
1 - ALERT(警报)
含义:必须立即采取行动来解决的严重问题,虽然系统还未完全崩溃,但已经处于非常危险的状态 。
示例:当系统的根文件系统即将满额,且剩余空间已经不足以支撑系统正常运行时,相关文件系统监控组件会产生ALERT
级别的日志。
应用场景:系统管理员需要尽快响应并处理,通常会将此类日志记录到专门的紧急日志文件中,方便快速定位和解决问题。
2 - CRIT(严重)
含义:表示严重的错误情况,可能会影响系统的部分功能,但系统还能继续运行。
示例:数据库服务出现严重错误,无法正常处理某些关键业务的数据库请求,不过数据库服务器本身还在运行,就会产生CRIT
级别的日志。
应用场景:这类日志需要管理员及时关注并排查,一般也会被记录在重要的日志文件中。
3 - ERR(错误)
含义:表示一般性的错误,这些错误会影响系统或应用程序的某些功能,但不会导致系统崩溃或严重影响系统可用性。
示例:应用程序中某个函数调用失败,或者网络连接出现短暂中断等,就会产生ERR
级别的日志。
应用场景:开发人员或运维人员可以通过查看这类日志来排查应用程序的故障,通常会记录在应用程序或系统的常规错误日志文件中。
4 - WARNING(警告)
含义:表示潜在的问题或可能会导致问题的情况,目前系统或应用程序还能正常运行,但存在一些异常状况需要关注。
示例:服务器的 CPU 使用率持续过高,接近系统设置的阈值,虽然还未影响到系统的正常运行,但可能会引发性能问题,此时会产生WARNING
级别的日志。
应用场景:系统管理员可以通过定期查看此类日志,提前发现系统中的潜在风险,预防问题的发生。
5 - NOTICE(注意)
含义:用于记录正常但需要注意的事件,通常是一些比较特殊的情况,但并非错误或警告。
示例:用户在非常规时间(比如凌晨)登录系统,或者系统进行了一些重要的配置变更等,会产生NOTICE
级别的日志。
应用场景:帮助管理员了解系统的运行情况和用户行为,以便进行后续的分析和管理。
6 - INFO(信息)
含义:提供关于系统或应用程序正常运行的一般信息,用于记录系统或应用程序的常规操作和状态。
示例:系统启动时各个服务的加载情况,应用程序处理请求的数量等信息,会记录为INFO
级别的日志。
应用场景:有助于管理员了解系统的日常运行状态,在排查问题时可以作为参考,辅助判断系统是否按照预期工作。
7 - DEBUG(调试)
含义:主要用于开发和调试阶段,包含详细的调试信息,这些信息对于开发人员定位代码中的问题非常有用。
示例:程序中变量的值、函数的调用顺序等详细信息,会在调试模式下记录为DEBUG
级别的日志。
应用场景:开发人员在开发和测试过程中,通过查看DEBUG
级别的日志来排查程序中的逻辑错误、性能问题等。在生产环境中,通常会关闭或限制DEBUG
日志的输出,因为其会产生大量数据,影响系统性能。
配置文件内容
/etc/rsyslog.conf
故障模拟
故障1:配置文件丢失
[root@server ~]# mv /etc/ssh/sshd_config .
[root@server ~]# systemctl restart sshd
Job for sshd.service failed because the control process exited with error code. See "systemctl status sshd.service" and "journalctl -xe" for details.
[root@server ~]# tail -f /var/log/messages
Jul 28 14:57:38 server sshd: /etc/ssh/sshd_config: No such file or directory
Jul 28 14:57:38 server systemd: sshd.service: main process exited, code=exited, status=1/FAILURE
Jul 28 14:57:38 server systemd: Failed to start OpenSSH server daemon.
Jul 28 14:57:38 server systemd: Unit sshd.service entered failed state.
#解决
[root@server ~]# mv sshd_config /etc/ssh/sshd_config
[root@server ~]# systemctl restart sshd
自定义日志
[root@server ~]# systemctl restart sshd
[root@server ~]# vim /etc/rsyslog.d/local5.conf
[root@server ~]# systemctl restart rsyslog.service
#手动生成一个消息
[root@server ~]# logger -p local5.err "test local5 error messages"
[root@server ~]# cat /var/log/local5.log
Jul 28 15:03:17 server yy: test local5 error messages
-
虽然系统提供了日志服务,但并不会记录所有内容。
-
系统中的应用程序是否使用 rsyslog 服务记录日志,取决于应用程序设计。
systemd-journald 日志分析
查看所有日志条目----journalctl
态查看所有日志条目–journalctl -f
查看error级别日志—journalctl -p err
journalctl -p err | cat
查看特定unit日志----journalctl -u sshd.service
Linux 时间管理
系统时间设置
vim 使用技巧 批量注释多行
[root@server ~ 15:19:10]# vim /etc/chrony.conf
1. 定位到特定行开头
2. ctrl+v
3. 上下移动光标,选中多行开头部分
4. 大写的I,进行插入 #
5. esc 退出
自动对时-chronyd 服务
# 修改对时服务器
[root@server ~ 11:58:11]# vim /etc/chrony.conf
您在 /var/spool/mail/root 中有邮件
# 与单个服务器 ntp.aliyun.com 对时
server ntp.aliyun.com iburst
[root@server ~ 11:59:25]# systemctl restart chronyd
[root@server ~ 11:59:45]# systemctl stop ffirewalld.ser
vice
Failed to stop ffirewalld.service: Unit ffirewalld.service not loaded.
[root@server ~ 16:13:50]# systemctl stop firewalld.service
[root@client ~ 16:14:12]# vim /etc/chrony.conf
[root@client ~ 16:15:36]# systemctl restart chronyd
# 验证对时情况
[root@client ~ 16:15:50]# chronyc sources -v
^* server.laoma.cloud 3 6 17 5 +22
部署时间服务器
服务端
[root@server ~]# vim /etc/chrony.conf
# 最后添加两条记录
# 配置监听地址
bindaddress 10.1.8.10
# 配置允许哪些网段主机同步
allow 10.1.8.0/24
[root@server ~]# systemctl restart chronyd
# 停止防火墙服务
[root@server ~]# systemctl stop firewalld.service
客户端
# 修改对时服务器
[root@client ~]# vim /etc/chrony.conf
# 与单个服务器 10.1.8.10 对时
server 10.1.8.10 iburst
[root@client ~]# systemctl restart chronyd
[root@client ~]# chronyc sources -v
210 Number of sources = 1
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
#验证
^* server.laoma.cloud 3 6 7