1 日志基本路径和基础查看方法

在 Ubuntu 或 Debian 11 系统中,可以通过不同的日志文件来获取系统日志和内核日志。日志常见路径如下:

  • /var/log/syslog:包含系统的整体日志,包括各种系统事件和服务日志。
  • /var/log/auth.log:记录用户认证和授权相关的日志,如登录、sudo 使用等。
  • /var/log/kern.log:内核相关的日志,包括硬件和驱动程序问题。
  • /var/log/dmesg:包含内核环缓冲区的消息,可以用来查看系统启动期间的信息。

说明:这些日志一般都是有多个,这里以kern.log为例,一般从下到上的时间顺序,如下所示:

-rw-r-----   1 syslog            adm               1662 2月  6 06:58 kern.log
-rw-r-----   1 syslog            adm             366757 2月  3 00:00 kern.log.1
-rw-r-----   1 syslog            adm               6504 1月 25 12:24 kern.log.2.gz
-rw-r-----   1 syslog            adm              16436 1月 17 21:31 kern.log.3.gz
-rw-r-----   1 syslog            adm              51381 1月 11 23:25 kern.log.4.gz

这里可以使用以下命令查看这些日志文件的内容,如下所示:

$cat /var/log/syslog
$cat /var/log/auth.log
$cat /var/log/kern.log
$cat /var/log/dmesg

如果想实时监视日志文件的更新,可以使用 tail 命令加上 -f 参数如下:

$tail -f /var/log/syslog
$tail -f /var/log/auth.log
$tail -f /var/log/kern.log
$tail -f /var/log/dmesg

2 日志查看和过滤工具

除了直接查看日志文件之外,还有一些常用的工具可以帮助你抓取和分析系统日志和内核日志。以下是一些常见的工具:

2.1 journalctl

journalctl是 systemd 系统日志记录器的命令行工具,用于查看和分析系统日志。它可以以可读的格式显示日志,并支持按时间、单元(服务)、PID 等进行过滤和搜索。它提供了许多参数和选项,用于过滤、搜索和格式化日志输出。以下是 journalctl 常见的参数和使用示例:

@1 基本用法总结如下:

#查看最新的系统日志:
$journalctl
#查看指定单位(服务)的日志:
$journalctl -u unit-name.service
#查看指定用户的日志:
$journalctl -u user-name
#查看指定时间范围内的日志:
$journalctl --since "2023-12-01 00:00:00" --until "2023-12-02 23:59:59"

@2 过滤和搜索总结如下:

#根据优先级过滤日志。其中,priority 可以是数字(0 至 7)或对应的名称(如 emerg、alert、crit、err、warning、notice、info、debug):
$journalctl -p priority
#根据日志来源过滤日志:
$journalctl -b SYSLOG_IDENTIFIER=source-name
#搜索特定关键字的日志,这将搜索包含关键字的日志消息:
$journalctl -t keyword

@3 输出格式:

#以可读的格式显示日志:
$journalctl -o short
#以 JSON 格式显示日志:
$journalctl -o json
#以详细格式显示日志:
$journalctl -o verbose
#以特定字段的格式显示日志:
$journalctl -o field --field=FIELD_NAME

2.2 dmesg

dmesg 是一个用于读取和打印内核环缓冲区消息的命令。它可以查看系统启动信息、硬件设备和内核模块相关的日志。以下是 dmesg 常见的参数和使用示例总结:

#查看系统启动信息:
$dmesg
#以逆序方式查看最新的内核日志:
$dmesg -r
#仅显示指定级别的内核日志(可用级别:emerg, alert, crit, err, warning, notice, info, debug):
$dmesg --level=LEVEL
#过滤显示包含指定关键字的内核日志:
$dmesg --grep=KEYWORD
#限制输出的行数:
$dmesg -n NUM_LINES

2.3 syslog-ng

syslog-ng是一个高度可配置的系统日志守护进程,它可以收集、过滤和转发系统日志。它支持多种日志源和目标,并提供灵活的日志处理和存储功能。

以下是一个简单的使用案例:

#安装 syslog-ng
$sudo apt-get install syslog-ng
#创建一个自定义的 syslog-ng 配置文件
$sudo vim /etc/syslog-ng/conf.d/myconfig.conf

在 myconfig.conf 文件中,可以定义日志源、过滤规则和目标。以下是一个简单的demo示例:

# 定义日志源为本地系统日志
source s_local {
    system();
};

# 过滤规则:仅保留来自特定设备的日志
filter f_myfilter {
    host("192.168.1.100");
};

# 定义目标为远程日志服务器
destination d_remote {
    syslog("192.168.2.200" port(514));
};

# 配置日志源、过滤规则和目标的关联
log {
    source(s_local);
    filter(f_myfilter);
    destination(d_remote);
};

保存并关闭文件后,重新启动 syslog-ng 服务:

$sudo systemctl restart syslog-ng

这个示例配置将从本地系统收集日志,然后根据过滤规则将特定设备的日志转发到远程日志服务器。

2.4 rsyslog

类似于 syslog-ng,rsyslog也是一个常见的系统日志守护进程。它可以收集、转发和处理系统日志,并支持各种配置选项和插件。

以下是一个简单的使用案例:

#安装 rsyslog
$sudo apt-get install rsyslog
#创建一个自定义的 rsyslog 配置文件
$sudo vim /etc/rsyslog.d/myconfig.conf

在 myconfig.conf 文件中,你可以定义日志源、过滤规则和目标。以下是一个简单的demo示例:

# 过滤规则:仅保留来自特定设备的日志
if $fromhost-ip == '192.168.1.100' then {
    action(type="omfwd" target="192.168.2.200" port="514" protocol="udp");
}

保存并关闭文件后,重新启动 rsyslog 服务:

$sudo systemctl restart rsyslog

这个示例配置将根据过滤规则将来自特定设备的日志转发到远程日志服务器。

2.5 logrotate

logrotate是一个实用程序,用于管理日志文件的轮转。它可以自动压缩和归档旧的日志文件,以便节省磁盘空间并确保日志文件不会无限增长。

以下是一个简单的使用案例:

# 创建一个自定义的 logrotate 配置文件
$sudo vim /etc/logrotate.d/mylog

在 mylog 文件中,你可以指定要轮转的日志文件、轮转频率、保存的旧日志文件数量等。以下是一个简单的demo示例:

# 轮转 /var/log/mylog.log 文件,每天轮转一次,保留最近的 7 个旧日志文件
/var/log/mylog.log {
    daily
    rotate 7
    compress
}

保存并关闭文件后,logrotate 将根据配置文件的设置定期轮转日志文件。

2.6 总结

  • 这些工具提供了更灵活和高级的功能,能够更方便地查看、分析和管理系统日志和内核日志。可以根据自己的需求选择适合的工具来使用。
  • 注意,可能需要使用 sudo 或以 root 用户身份运行这些命令来访问一些日志文件,特别是位于 /var/log 目录下的文件。
12-07 11:34