第69集:实时监控工具

教学目标

  • 了解Linux系统中实时监控的重要性
  • 掌握常用的命令行实时监控工具
  • 了解图形化实时监控工具
  • 学会配置和使用实时监控工具
  • 能够根据监控结果进行系统分析和优化
  • 了解实时监控的最佳实践

主要知识点

1. 实时监控概述

  • 实时监控的重要性

    • 实时了解系统运行状态
    • 及时发现和解决系统问题
    • 预防系统故障
    • 优化系统性能
    • 确保服务可用性
  • 实时监控的主要内容

    • CPU使用率和负载
    • 内存使用情况
    • 磁盘I/O性能
    • 网络流量和连接
    • 进程状态和资源使用
    • 系统服务状态
    • 应用程序运行状态
  • 实时监控工具的分类

    • 命令行监控工具:适合在终端中使用,轻量级
    • 图形化监控工具:提供直观的界面,功能丰富
    • 网络监控工具:通过网络远程监控系统
    • 专用监控工具:针对特定资源或服务的监控

2. 命令行实时监控工具

2.1 top 命令

top命令是最常用的实时进程监控工具,可以实时显示系统的CPU、内存使用情况和进程状态。

基本语法

top [选项]

常用选项

  • -d:指定刷新间隔(秒)
  • -p:显示指定PID的进程
  • -u:显示指定用户的进程
  • -c:显示完整的命令行
  • -b:以批处理模式运行
  • -n:指定刷新次数

交互式命令

  • k:终止指定PID的进程
  • r:修改指定PID的进程优先级
  • f:自定义显示字段
  • o:按指定字段排序
  • P:按CPU使用率排序
  • M:按内存使用率排序
  • T:按运行时间排序
  • q:退出top

使用示例

# 启动top并实时监控系统
top

# 每2秒刷新一次
top -d 2

# 监控指定用户的进程
top -u nginx

# 按内存使用率排序
top -o %MEM

2.2 htop 命令

htop命令是top命令的增强版,提供了更友好的界面和更多的功能。

基本语法

htop [选项]

常用选项

  • -d:指定刷新间隔(秒)
  • -p:显示指定PID的进程
  • -u:显示指定用户的进程
  • -s:指定排序字段

交互式命令

  • F1:显示帮助信息
  • F2:进入设置界面
  • F3:搜索进程
  • F4:过滤进程
  • F5:切换树状视图
  • F6:选择排序字段
  • F7:降低进程优先级
  • F8:提高进程优先级
  • F9:终止进程
  • F10:退出htop

使用示例

# 安装htop
sudo apt install htop  # Debian/Ubuntu
sudo yum install htop  # CentOS/RHEL

# 启动htop并实时监控系统
htop

# 监控指定PID的进程
htop -p 1234

# 按CPU使用率排序
htop -s CPU

2.3 atop 命令

atop命令是一个高级的系统和进程监控工具,可以实时显示系统的各项资源使用情况,并可以记录历史数据。

基本语法

atop [选项]

常用选项

  • -a:显示所有进程
  • -d:指定刷新间隔(秒)
  • -n:指定刷新次数
  • -w:将数据写入文件
  • -r:从文件中读取数据

交互式命令

  • h:显示帮助信息
  • t:显示下一个时间点的数据
  • T:显示上一个时间点的数据
  • k:终止指定PID的进程
  • u:只显示指定用户的进程
  • P:按CPU使用率排序
  • M:按内存使用率排序
  • D:按磁盘I/O使用率排序
  • N:按网络使用率排序
  • q:退出atop

使用示例

# 安装atop
sudo apt install atop  # Debian/Ubuntu
sudo yum install atop  # CentOS/RHEL

# 启动atop并实时监控系统
atop

# 每3秒刷新一次
atop -d 3

# 将数据写入文件
atop -w /var/log/atop.log 60

2.4 vmstat 命令

vmstat命令可以实时显示系统的虚拟内存、进程、CPU和磁盘I/O状态。

基本语法

vmstat [选项] [时间间隔] [次数]

常用选项

  • -a:显示活动和非活动内存
  • -f:显示启动以来的fork次数
  • -m:显示内存 slab 信息
  • -n:不显示表头
  • -s:显示内存统计摘要
  • -t:显示时间戳

使用示例

# 查看系统整体状态
vmstat

# 每1秒刷新一次,共10次
vmstat 1 10

# 显示活动和非活动内存
vmstat -a 1 5

2.5 iostat 命令

iostat命令可以实时显示系统的CPU和磁盘I/O使用情况。

基本语法

iostat [选项] [时间间隔] [次数]

常用选项

  • -c:仅显示CPU统计信息
  • -d:仅显示磁盘统计信息
  • -k:以KB为单位显示
  • -m:以MB为单位显示
  • -x:显示详细的扩展统计信息

使用示例

# 查看CPU和磁盘I/O使用情况
iostat

# 每1秒刷新一次,共10次,显示详细信息
iostat -dx 1 10

# 仅显示磁盘统计信息
iostat -d 1 5

2.6 mpstat 命令

mpstat命令可以实时显示每个CPU核心的使用情况。

基本语法

mpstat [选项] [时间间隔] [次数]

常用选项

  • -P:指定CPU核心,ALL表示所有核心

使用示例

# 查看所有CPU核心的使用情况
mpstat -P ALL 1 10

# 查看指定CPU核心的使用情况
mpstat -P 0 1 5

2.7 pidstat 命令

pidstat命令可以实时显示进程级别的CPU、内存、磁盘I/O和网络使用情况。

基本语法

pidstat [选项] [时间间隔] [次数]

常用选项

  • -u:显示CPU使用情况(默认)
  • -r:显示内存使用情况
  • -d:显示磁盘I/O使用情况
  • -w:显示上下文切换情况
  • -t:显示线程级别的统计信息
  • -p:显示指定PID的进程

使用示例

# 查看所有进程的CPU使用情况
pidstat 1 10

# 查看指定PID的进程的内存使用情况
pidstat -r -p 1234 1 5

# 查看所有进程的磁盘I/O使用情况
pidstat -d 1 5

2.8 netstat/ss 命令

netstatss命令可以实时显示网络连接、路由表和网络接口状态。

基本语法

netstat [选项]
ss [选项]

常用选项

  • -a:显示所有连接和监听端口
  • -t:仅显示TCP连接
  • -u:仅显示UDP连接
  • -n:以数字形式显示地址和端口
  • -l:仅显示监听状态的连接
  • -p:显示进程ID和进程名称

使用示例

# 查看所有TCP连接
netstat -atn
ss -atn

# 查看所有UDP连接
netstat -aun
ss -aun

# 查看监听状态的端口
netstat -tlnp
ss -tlnp

2.9 free 命令

free命令可以实时显示系统的内存使用情况。

基本语法

free [选项]

常用选项

  • -h:以人类可读的格式显示
  • -m:以MB为单位显示
  • -g:以GB为单位显示
  • -s:指定刷新间隔(秒)

使用示例

# 查看内存使用情况
free -h

# 每2秒刷新一次
free -h -s 2

2.10 df 命令

df命令可以实时显示文件系统的磁盘空间使用情况。

基本语法

df [选项] [文件或目录]

常用选项

  • -h:以人类可读的格式显示
  • -T:显示文件系统类型
  • -i:显示inode使用情况

使用示例

# 查看所有文件系统的磁盘空间使用情况
df -h

# 查看指定文件系统的磁盘空间使用情况
df -h /dev/sda1

3. 图形化实时监控工具

3.1 Glances 命令

Glances是一个跨平台的实时系统监控工具,提供了丰富的监控信息和直观的界面。

基本语法

glances [选项]

常用选项

  • -d:禁用磁盘I/O监控
  • -n:禁用网络监控
  • -t:指定刷新间隔(秒)
  • -w:以Web模式运行
  • -s:以服务器模式运行
  • -c:以客户端模式连接服务器

交互式命令

  • h:显示帮助信息
  • q:退出Glances
  • s:切换传感器显示
  • d:切换磁盘I/O显示
  • n:切换网络显示
  • m:切换内存显示
  • c:切换CPU显示
  • p:切换进程显示
  • f:显示文件系统
  • t:显示网络连接

使用示例

# 安装Glances
pip install glances  # 使用pip安装
sudo apt install glances  # Debian/Ubuntu

# 启动Glances并实时监控系统
glances

# 以Web模式运行
glances -w
# 然后在浏览器中访问 http://localhost:61208

# 以服务器模式运行
glances -s
# 以客户端模式连接服务器
glances -c 服务器地址

3.2 nmon 命令

nmon命令是一个功能强大的AIX和Linux性能监控工具,可以实时显示系统的各项资源使用情况,并可以生成报告。

基本语法

nmon [选项]

常用选项

  • -f:生成CSV格式的输出文件
  • -s:指定采样间隔(秒)
  • -c:指定采样次数
  • -t:在输出中包含_top进程

交互式命令

  • h:显示帮助信息
  • c:显示CPU使用情况
  • m:显示内存使用情况
  • d:显示磁盘I/O使用情况
  • n:显示网络使用情况
  • t:显示进程使用情况
  • k:显示内核统计信息
  • q:退出nmon

使用示例

# 安装nmon
sudo apt install nmon  # Debian/Ubuntu
sudo yum install nmon  # CentOS/RHEL

# 启动nmon并实时监控系统
nmon

# 生成CSV格式的输出文件
nmon -f -s 10 -c 60

3.3 KSysGuard 工具

KSysGuard是KDE桌面环境的系统监控工具,提供了直观的图形界面,可以实时显示系统的各项资源使用情况。

使用方法

  • 在KDE桌面环境中,通过应用程序菜单启动KSysGuard
  • 或者在终端中运行 ksysguard 命令

主要功能

  • 实时监控CPU、内存、磁盘和网络使用情况
  • 监控进程状态和资源使用
  • 显示系统负载和温度
  • 支持自定义监控面板
  • 支持远程监控

3.4 GNOME System Monitor 工具

GNOME System Monitor是GNOME桌面环境的系统监控工具,提供了直观的图形界面,可以实时显示系统的各项资源使用情况。

使用方法

  • 在GNOME桌面环境中,通过应用程序菜单启动系统监视器
  • 或者在终端中运行 gnome-system-monitor 命令

主要功能

  • 实时监控CPU、内存和网络使用情况
  • 监控进程状态和资源使用
  • 管理进程(终止、暂停、继续)
  • 查看文件系统使用情况
  • 支持远程监控

4. 网络实时监控工具

4.1 iftop 命令

iftop命令是一个实时的网络流量监控工具,可以实时显示网络接口的流量情况。

基本语法

iftop [选项] [接口]

常用选项

  • -i:指定网络接口
  • -B:以字节为单位显示
  • -b:以带宽为单位显示
  • -n:以数字形式显示地址
  • -P:显示端口号
  • -N:不解析主机名

交互式命令

  • h:显示帮助信息
  • n:切换显示主机名/IP地址
  • s:切换显示端口号
  • t:切换显示格式
  • q:退出iftop

使用示例

# 安装iftop
sudo apt install iftop  # Debian/Ubuntu
sudo yum install iftop  # CentOS/RHEL

# 监控指定网络接口的流量
iftop -i eth0

# 以数字形式显示地址和端口
iftop -nP -i eth0

4.2 nethogs 命令

nethogs命令是一个进程级的网络流量监控工具,可以实时显示每个进程的网络流量使用情况。

基本语法

nethogs [选项] [接口]

常用选项

  • -d:指定刷新间隔(秒)
  • -v:显示版本信息
  • -c:指定刷新次数

交互式命令

  • q:退出nethogs

使用示例

# 安装nethogs
sudo apt install nethogs  # Debian/Ubuntu
sudo yum install nethogs  # CentOS/RHEL

# 监控所有网络接口的流量
nethogs

# 监控指定网络接口的流量
nethogs eth0

# 每2秒刷新一次
nethogs -d 2 eth0

4.3 tcpdump 命令

tcpdump命令是一个网络数据包捕获工具,可以实时捕获和分析网络数据包。

基本语法

tcpdump [选项] [过滤表达式]

常用选项

  • -i:指定网络接口
  • -s:指定捕获数据包的大小
  • -w:将捕获的数据包写入文件
  • -r:从文件中读取数据包
  • -n:以数字形式显示地址和端口
  • -v:显示详细信息
  • -c:指定捕获数据包的数量

使用示例

# 安装tcpdump
sudo apt install tcpdump  # Debian/Ubuntu
sudo yum install tcpdump  # CentOS/RHEL

# 捕获指定网络接口的数据包
sudo tcpdump -i eth0

# 捕获指定端口的数据包
sudo tcpdump -i eth0 port 80

# 捕获指定IP地址的数据包
sudo tcpdump -i eth0 host 192.168.1.100

# 将捕获的数据包写入文件
sudo tcpdump -i eth0 -w capture.pcap

5. 专用实时监控工具

5.1 磁盘监控工具

  • iotop:实时显示进程的I/O使用情况
  • iostat:实时显示磁盘I/O统计信息
  • df:显示文件系统的磁盘空间使用情况
  • du:显示目录或文件的磁盘使用空间

使用示例

# 安装iotop
sudo apt install iotop  # Debian/Ubuntu
sudo yum install iotop  # CentOS/RHEL

# 启动iotop并实时监控进程的I/O使用情况
sudo iotop

# 查看文件系统的磁盘空间使用情况
df -h

# 查看指定目录的磁盘使用空间
du -h --max-depth=1 /home

5.2 网络监控工具

  • ping:测试网络连通性
  • traceroute:跟踪网络路径
  • mtr:实时显示网络路径的质量
  • iperf3:测量网络带宽

使用示例

# 测试网络连通性
ping www.baidu.com

# 跟踪网络路径
traceroute www.baidu.com

# 实时显示网络路径的质量
mtr www.baidu.com

# 测量网络带宽
iperf3 -s  # 服务器端
iperf3 -c 服务器地址  # 客户端

5.3 系统服务监控工具

  • systemctl:管理和监控系统服务
  • service:管理和监控系统服务(传统命令)
  • chkconfig:管理系统服务的启动状态(传统命令)

使用示例

# 查看系统服务状态
systemctl status

# 查看指定服务的状态
systemctl status nginx

# 启动指定服务
systemctl start nginx

# 停止指定服务
systemctl stop nginx

# 重启指定服务
systemctl restart nginx

# 查看服务是否开机自启
systemctl is-enabled nginx

# 设置服务开机自启
systemctl enable nginx

# 禁止服务开机自启
systemctl disable nginx

6. 实时监控工具的配置和使用

6.1 配置实时监控工具

  • 配置刷新间隔:根据需要设置合适的刷新间隔,避免过于频繁的刷新占用系统资源
  • 配置监控项:根据需要选择要监控的项目,避免监控不必要的内容
  • 配置告警阈值:设置合理的告警阈值,当监控项超过阈值时发送告警
  • 配置输出格式:根据需要配置监控工具的输出格式,使其更易于阅读和分析
  • 配置数据存储:对于需要历史数据的监控工具,配置合适的数据存储方式

6.2 实时监控的最佳实践

  • 选择合适的监控工具:根据监控需求和系统环境选择合适的监控工具
  • 组合使用多种监控工具:不同的监控工具各有优缺点,组合使用可以获得更全面的信息
  • 设置合理的监控频率:根据监控对象的变化速度设置合理的监控频率
  • 关注关键指标:重点监控对系统性能和服务可用性影响较大的指标
  • 建立监控基线:了解正常情况下的监控指标范围,以便及时发现异常
  • 设置告警机制:当监控指标超过阈值时,及时发送告警
  • 定期分析监控数据:定期分析监控数据,发现潜在问题并进行优化
  • 文档化监控配置:记录监控工具的配置和使用方法,方便团队成员参考

6.3 实时监控的注意事项

  • 避免过度监控:过度监控会占用系统资源,影响系统性能
  • 注意监控工具的资源占用:选择资源占用较小的监控工具,尤其是在资源有限的系统上
  • 保护监控数据:监控数据可能包含敏感信息,应注意保护
  • 确保监控工具的可靠性:监控工具本身应保持稳定运行,避免监控工具故障导致监控中断
  • 考虑监控的扩展性:对于大型系统,应考虑监控的扩展性,避免监控系统成为瓶颈

7. 高级实时监控技术

7.1 分布式实时监控

  • 分布式监控的优势

    • 可以监控大规模的系统集群
    • 可以分散监控负载
    • 可以提供更全面的监控视角
  • 分布式监控的实现

    1. 在每个被监控节点上部署监控代理
    2. 中央监控服务器收集和分析监控数据
    3. 通过网络传输监控数据
    4. 提供统一的监控界面
  • 分布式监控工具

    • Prometheus + Grafana
    • Zabbix
    • Nagios
    • Icinga

7.2 实时监控与告警集成

  • 监控与告警集成的重要性

    • 及时发现和解决系统问题
    • 减少人工监控的工作量
    • 提高系统的可用性和可靠性
  • 告警集成的实现

    1. 设置监控指标的告警阈值
    2. 配置告警触发条件
    3. 选择合适的告警通知方式
    4. 测试告警功能
    5. 优化告警规则
  • 告警通知方式

    • 邮件告警
    • 短信告警
    • 即时消息告警(如 Slack、Telegram)
    • 语音告警
    • Webhook 告警

7.3 实时监控与自动化响应

  • 自动化响应的优势

    • 减少人工干预
    • 提高问题解决速度
    • 避免人为错误
  • 自动化响应的实现

    1. 定义监控事件与响应动作的映射关系
    2. 配置自动化响应脚本
    3. 测试自动化响应功能
    4. 监控自动化响应的执行结果
  • 自动化响应的应用场景

    • 服务自动重启
    • 资源自动扩容
    • 负载均衡自动调整
    • 安全事件自动处理

实用案例分析

案例1:系统性能问题排查

场景:系统运行缓慢,需要实时监控找出性能瓶颈。

排查步骤

  1. 使用top/htop监控系统整体状态

    top
    htop

    查看CPU使用率、内存使用情况和进程状态,找出占用资源最多的进程。

  2. 使用vmstat监控系统的虚拟内存和I/O状态

    vmstat 1

    查看系统的进程、内存、分页、块I/O和CPU状态。

  3. 使用iostat监控磁盘I/O性能

    iostat -dx 1

    查看磁盘的使用率、吞吐量、响应时间等指标。

  4. 使用mpstat监控每个CPU核心的使用情况

    mpstat -P ALL 1

    查看每个CPU核心的使用率,找出是否存在CPU核心不均衡的情况。

  5. 使用pidstat监控进程级别的资源使用情况

    pidstat -u 1
    pidstat -r 1
    pidstat -d 1

    查看进程的CPU、内存和磁盘I/O使用情况。

  6. 使用netstat/ss监控网络连接

    netstat -ant
    ss -ant

    查看网络连接状态,找出是否存在网络连接过多的情况。

  7. 分析监控结果,找出性能瓶颈

    • 如果CPU使用率高,分析占用CPU最多的进程
    • 如果内存使用高,分析占用内存最多的进程
    • 如果磁盘I/O高,分析产生I/O最多的进程
    • 如果网络连接多,分析产生连接最多的进程
  8. 采取相应的优化措施

    • 优化应用程序代码
    • 调整系统配置
    • 增加系统资源
    • 优化数据库查询
    • 配置缓存

案例2:网络问题排查

场景:网络连接缓慢,需要实时监控找出网络问题。

排查步骤

  1. 使用ping测试网络连通性

    ping www.baidu.com

    查看网络延迟和丢包率。

  2. 使用traceroute/mtr跟踪网络路径

    traceroute www.baidu.com
    mtr www.baidu.com

    查看网络路径中的每个节点的响应时间,找出网络瓶颈。

  3. 使用iftop监控网络流量

    sudo iftop -i eth0

    查看网络接口的流量情况,找出占用带宽最多的连接。

  4. 使用nethogs监控进程级别的网络流量

    sudo nethogs

    查看每个进程的网络流量使用情况,找出占用带宽最多的进程。

  5. 使用netstat/ss监控网络连接

    netstat -ant | grep ESTABLISHED | wc -l
    ss -ant state established | wc -l

    查看网络连接数,找出是否存在连接过多的情况。

  6. 使用tcpdump捕获和分析网络数据包

    sudo tcpdump -i eth0 -w capture.pcap

    捕获网络数据包,然后使用Wireshark等工具分析数据包内容。

  7. 分析监控结果,找出网络问题

    • 如果网络延迟高,分析网络路径中的瓶颈节点
    • 如果网络丢包率高,检查网络链路质量
    • 如果网络带宽占用高,分析占用带宽最多的进程或连接
    • 如果网络连接数多,分析产生连接最多的进程
  8. 采取相应的解决措施

    • 优化网络路径
    • 升级网络设备
    • 限制进程的网络带宽使用
    • 优化应用程序的网络通信
    • 配置QoS(服务质量)

案例3:服务状态监控

场景:需要实时监控系统服务的运行状态,确保服务正常运行。

监控步骤

  1. 使用systemctl监控系统服务状态

    systemctl status nginx

    查看指定服务的运行状态。

  2. 使用监控工具设置服务状态监控

    • 使用Prometheus + Grafana监控服务状态
    • 使用Zabbix监控服务状态
    • 使用Nagios监控服务状态
  3. 设置服务状态告警

    • 当服务停止时发送告警
    • 当服务响应时间过长时发送告警
    • 当服务错误率过高时发送告警
  4. 配置自动化响应

    • 当服务停止时自动重启服务
    • 当服务负载过高时自动扩容
  5. 定期分析服务状态监控数据

    • 分析服务的可用性
    • 分析服务的响应时间
    • 分析服务的错误率
    • 分析服务的资源使用情况
  6. 根据分析结果优化服务

    • 优化服务配置
    • 调整服务资源分配
    • 改进服务架构
    • 升级服务版本

课后练习

  1. 基础练习

    • 使用top和htop监控系统状态
    • 使用vmstat监控系统的虚拟内存和I/O状态
    • 使用iostat监控磁盘I/O性能
    • 使用netstat/ss监控网络连接
    • 使用free监控内存使用情况
  2. 进阶练习

    • 部署Glances并使用其Web界面监控系统
    • 配置iftop监控网络流量
    • 使用pidstat分析进程的资源使用情况
    • 部署Prometheus + Grafana监控系统
    • 设置监控告警
  3. 综合练习

    • 设计一个完整的实时监控方案
    • 实施监控方案并验证效果
    • 分析监控数据,找出系统问题并解决
    • 配置自动化响应机制

总结

本集教程详细介绍了Linux系统中的实时监控工具,包括:

  • 命令行实时监控工具:top、htop、atop、vmstat、iostat、mpstat、pidstat、netstat/ss、free、df等
  • 图形化实时监控工具:Glances、nmon、KSysGuard、GNOME System Monitor等
  • 网络实时监控工具:iftop、nethogs、tcpdump、ping、traceroute、mtr、iperf3等
  • 专用实时监控工具:iotop、df、du、ping、traceroute、mtr、iperf3、systemctl等

通过掌握这些工具,系统管理员可以实时了解系统的运行状态,及时发现和解决系统问题,优化系统性能,确保服务的可用性和可靠性。

实时监控是系统管理的重要组成部分,通过选择合适的监控工具,配置合理的监控参数,设置有效的告警机制,可以大大提高系统管理的效率和质量。在实际应用中,应根据系统的具体情况,选择合适的监控工具和方法,并不断优化监控策略,以适应系统的变化和需求的增长。

« 上一篇 系统日志监控 下一篇 » 监控告警配置