日志管理
systemd-journald
服务
记录的是本次启动之后的日志,是二进制文件,只能通过日志来看
rsyslog
服务
该服务对 syslog
消息进行排序,写入到 /var/log/
文件夹下,重启后依然保存
系统日志文件
/etc/rsyslog.conf
专门管理日志的配置文件,配置了什么类型的日志记录在哪个文件中
在 /var/log/
文件夹下
-
/var/log/messages 大多数系统日志消息记录在此,包括记录服务信息,系统报错信息等
-
/var/log/secure 与安全性和身份验证相关的日志
-
/var/log/cron 与定时任务和执行相关的日志
-
/var/log/maillog 与系统中邮件服务日志
-
/var/log/boot.log 与系统启动相关的日志,用
dmesg
命令查看
查看追加的日志中,err
、warn
、fail
的前后10行的内容。
tail -f /var/log/messages | grep -iE -C10 'err|warn|fail'
rsyslog 服务管理
rsyslog 服务使用日志消息的类型和优先级来确定如何处理
配置文件:/etc/rsyslog.conf
和 /etc/rsyslog.d/*.conf
帮助信息参考 rsyslog.conf(5) 和 syslog(3) 帮助章节
日志消息的类型
支持 syslog
协议的应用程序在配置文件中都可以按照标准配置日志消息
手动发送 syslog 日志
logger
命令可以发送消息到 rsyslog 服务,默认情况下的优先级为 notice。
-p: 指定输入消息的优先级,格式为 facility.level
-t: 指定标记记录
-i: 在每行都记录进程ID
例:
1 | logger -i -t mail -p mail.info "message" |
实现日志服务器收集日志
服务器集群,日志会分布在各个系统。可以做一个日志服务器,将所有的日志都发送到该服务器上
-
rsyslog 是一个 C/S 架构,可以基于TCP和UDP工作,默认监听端口是514
-
服务端配置
- 修改服务端配置
vim /etc/rsyslog.conf
,打开服务监听端口
- 重启服务
1
systemctl restart rsyslog.service
- 关闭防火墙
1
2systemctl stop firewalld.service
systectl disable firewalld.service此时 514 端口已处于监听状态
1
2
3
4
5[root@example log]# netstat -tulnp | grep 514
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 4306/rsyslogd
tcp6 0 0 :::514 :::* LISTEN 4306/rsyslogd
udp 0 0 0.0.0.0:514 0.0.0.0:* 4306/rsyslogd
udp6 0 0 :::514 :::* 4306/rsyslogd - 修改服务端配置
-
客户端配置
- 修改配置文件
/etc/rsyslog.conf
@
表示 UDP 转发日志消息;@@
表示通过 TCP 转发日志消息 - 重启服务
1
systemctl restart rsyslog.service
- 测试
1
logger "message from node2"
- 修改配置文件
日志轮询
日志最多只会保存4份
-
logrotate 工具会轮询日志文件,防止日志文件占用过多的系统空间
-
轮询日志文件时,会使用日期作为文件的扩展名对其重命名
-
配置文件为
/etc/logrotate.conf
和/etc/logrotate.d/*
-
帮助信息参考 logrotate(8) 帮助章节
检索系统日志消息
systemd-journald
服务将收集到的日志消息存储在 /run/log/
下面,重启后将被清除。(/run
下面放的是内存里的数据)
journalctl
命令突出显示重要的日志消息,优先级为 notice 或 warning 的消息显示为粗体文本,优先级为 error 或以上的消息则显示为红色文本
常用选项
-n:指定显示末尾几条消息,默认是最后10条日志消息
-f:与 tail -f
命令类似
-p:指定显示某个优先级以上的日志
–since, --until: 限制特定的时间段
-o verbose:查看日志的详细信息
举例:
1 | journalctl -p warning --since 14:00 --until 16:00 |
根据日志的关键字段查询
_PID:进程的PID
_UID:运行该进程的用户ID
_SYSTEMD_UNIT:启动该进程的systemd单元
_COMM:指定命令的名称
_EXE:进程的可执行文件的路径
举例:
查看 named 服务的错误日志
1 | journalctl _SYSTEMD_UNIT=named.service -p err |
永久保存系统日志
/etc/systemd/journald.conf
中的storage参数决定系统日志是易失性还是持久性,该参数可以设置为 persistent, volatile 或 auto。
persistent:将日志存储在 /var/log/journal/
(注意区分 /run/log
)
volatile:将日志存储在 /run/log/
auto:如果 /var/log/journal/
存在,则持久存储,否则易失存储。
-
修改配置文件
/etc/systemd/journald.conf
,Storage
设置为persistent
。 -
重启服务
1
systemctl restart systemd-journald
-
验证
1
ls /var/log/journal/
时间管理
timedatectl
命令简要显示当前的时间信息
-
硬件时钟(RTC):
主板上的硬件提供,用
hwclock
命令可查看 -
系统时间:
用date
命令可看,
date -s
可修改系统时间 -
网络时间:
联网向时间服务器同步
1 | hwclock -s 系统时间向硬件时间进行同步 |
本机作为客户端,向时间服务器同步时间:
-
配置文件
/etc/chrony.conf
1
2
3
4root@example student]# cat /etc/chrony.conf | grep server
These servers were defined in the installation:
server ntp1.aliyun.com iburst
Use public servers from the pool.ntp.org project. -
重启时间服务,并验证。
*
代表已经同步成功1
2
3
4
5
6[root@example student]# systemctl restart chronyd
[root@example student]# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 120.25.115.20 2 6 77 7 +400us[ +588us] +/- 19ms
服务器集群,如果每台服务器都向外网的时间服务器做同步,公网ip会暴露,不安全。可以仅设置一台能上外网的服务器,其他服务器与它做同步,这时候要把 /etc/chrony.conf
设置中的 allow 192.xxx.x.xx/xx
打开,时间服务器的监听端口号是 123
内核监控和配置
内核的功能
- 系统初始化:检测硬件资源并启动系统
- 进程调度:决定进程什么时候运行以及运行多久
- 内存管理:给运行的进程分配内存
- 安全:支持权限,selinux 和防火墙规则
- 提供 buffers 和 cache 加速硬件访问
- 支持标准网络协议和文件系统
tips: cache 加速的是读过程,buffer 加速的是写的过程
内核的组成
-
多个内核版本可以共存
-
内核的组成如下:
/boot/vmlinuz-version
启动时用到的内核
/boot/initramfs-version.img
启动时提供必要的内核模块
/lib/modules/version
内核模块
虚拟文件系统 /proc
-
进程信息
/proc/PID
-
CPU信息
/proc/cpuinfo
-
内存资源
/proc/meminfo
-
磁盘信息
/proc/partition
查看:
cat /proc/meminfo
磁盘管理
------------------------------to be continued------------------------------