日志管理

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 命令查看

查看追加的日志中,errwarnfail 的前后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

  • 服务端配置

    1. 修改服务端配置 vim /etc/rsyslog.conf,打开服务监听端口
    2. 重启服务
    1
    systemctl restart rsyslog.service
    1. 关闭防火墙
    1
    2
    systemctl 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
  • 客户端配置

    1. 修改配置文件 /etc/rsyslog.conf

      @ 表示 UDP 转发日志消息;@@ 表示通过 TCP 转发日志消息
    2. 重启服务
    1
    systemctl restart rsyslog.service
    1. 测试
    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.confStorage 设置为 persistent

  • 重启服务

    1
    systemctl restart systemd-journald
  • 验证

    1
    ls /var/log/journal/

时间管理

timedatectl 命令简要显示当前的时间信息

  • 硬件时钟(RTC):

    主板上的硬件提供,用 hwclock 命令可查看

  • 系统时间:
    date 命令可看,
    date -s 可修改系统时间

  • 网络时间:
    联网向时间服务器同步

1
2
hwclock -s    系统时间向硬件时间进行同步
hwclock -w 硬件时间向系统时间进行同步

本机作为客户端,向时间服务器同步时间:

  • 配置文件 /etc/chrony.conf

    1
    2
    3
    4
    root@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------------------------------