5065 字
25 分钟

Linux监控和告警命令和技巧

2026-02-05
浏览量 加载中...

Linux监控和告警命令和技巧#

监控和告警概述#

监控和告警是系统管理的重要组成部分,它可以帮助系统管理员实时了解系统状态,及时发现和解决问题,提高系统的可靠性和可用性。Linux系统提供了丰富的监控和告警工具,本文将介绍Linux系统中常用的监控和告警命令和技巧,帮助系统管理员更高效地监控和管理系统。

系统监控基础#

监控目标#

  1. 系统资源:CPU、内存、磁盘、网络等系统资源的使用情况
  2. 系统服务:系统服务的运行状态
  3. 应用程序:应用程序的运行状态和性能
  4. 安全事件:系统安全事件,如登录尝试、权限变更等
  5. 业务指标:业务相关的指标,如网站访问量、数据库查询时间等

监控级别#

  1. 基础监控:监控系统基本状态,如CPU、内存、磁盘使用情况
  2. 深度监控:监控系统详细状态,如进程、网络连接、文件系统等
  3. 业务监控:监控业务相关的指标,如响应时间、吞吐量等

告警级别#

  1. 信息:一般信息,如系统启动、服务重启等
  2. 警告:需要关注的情况,如资源使用接近阈值
  3. 错误:错误情况,如服务故障、磁盘空间不足等
  4. 严重:严重错误,如系统崩溃、数据丢失等

系统资源监控命令#

CPU监控#

top命令#

top命令用于实时监控系统CPU和内存使用情况。

Terminal window
# 启动top
top
# 常用快捷键
# h: 显示帮助
# 1: 显示所有CPU核心
# M: 按内存使用排序
# P: 按CPU使用排序
# T: 按时间排序
# k: 终止进程
# q: 退出
# 批处理模式运行top
top -b -n 1
# 显示特定进程的CPU使用情况
top -p 1234
# 每5秒更新一次,显示10次
top -d 5 -n 10

mpstat命令#

mpstat命令用于监控多处理器系统的CPU使用情况。

Terminal window
# 安装mpstat(Debian/Ubuntu)
sudo apt install -y sysstat
# 安装mpstat(RHEL/CentOS)
sudo yum install -y sysstat
# 监控所有CPU核心,每2秒更新一次
mpstat -P ALL 2
# 监控特定CPU核心,每2秒更新一次
mpstat -P 0 2
# 显示平均CPU使用情况
mpstat -A

sar命令#

sar命令用于收集、报告和保存系统活动信息,包括CPU、内存、磁盘、网络等。

Terminal window
# 安装sar(Debian/Ubuntu)
sudo apt install -y sysstat
# 安装sar(RHEL/CentOS)
sudo yum install -y sysstat
# 监控CPU使用情况,每2秒更新一次,显示5次
sar -u 2 5
# 监控所有CPU核心
sar -P ALL 2 5
# 查看历史CPU使用情况
sar -u -f /var/log/sysstat/sa25

内存监控#

free命令#

free命令用于显示系统内存使用情况。

Terminal window
# 显示内存使用情况
free
# 以人类可读格式显示
free -h
# 以MB为单位显示
free -m
# 以GB为单位显示
free -g
# 显示详细内存使用情况
free -v

vmstat命令#

vmstat命令用于显示虚拟内存统计信息。

Terminal window
# 显示虚拟内存统计信息
vmstat
# 每2秒更新一次,显示5次
vmstat 2 5
# 显示详细信息
vmstat -a
# 显示磁盘I/O统计信息
vmstat -d
# 显示内存页面统计信息
vmstat -p /dev/sda1

slabtop命令#

slabtop命令用于实时显示内核slab分配器的使用情况。

Terminal window
# 启动slabtop
slabtop
# 常用快捷键
# h: 显示帮助
# s: 按大小排序
# c: 按缓存数量排序
# a: 按活跃对象数量排序
# q: 退出
# 批处理模式运行slabtop
slabtop -s c -o

磁盘监控#

df命令#

df命令用于显示文件系统磁盘空间使用情况。

Terminal window
# 显示磁盘空间使用情况
df
# 以人类可读格式显示
df -h
# 显示所有文件系统
df -a
# 显示文件系统类型
df -T
# 显示inode使用情况
df -i

du命令#

du命令用于显示目录或文件的磁盘使用情况。

Terminal window
# 显示当前目录的磁盘使用情况
du
# 以人类可读格式显示
du -h
# 显示指定目录的磁盘使用情况
du -h /path/to/directory
# 显示指定目录的总磁盘使用情况
du -sh /path/to/directory
# 显示目录中前10个最大的文件或子目录
du -h --max-depth=1 /path/to/directory | sort -hr | head -10

iostat命令#

iostat命令用于监控磁盘I/O统计信息。

Terminal window
# 安装iostat(Debian/Ubuntu)
sudo apt install -y sysstat
# 安装iostat(RHEL/CentOS)
sudo yum install -y sysstat
# 显示磁盘I/O统计信息
iostat
# 以人类可读格式显示
iostat -h
# 每2秒更新一次,显示5次
iostat 2 5
# 显示详细信息
iostat -x
# 显示指定磁盘的I/O统计信息
iostat -x /dev/sda

网络监控#

ifconfig命令#

ifconfig命令用于显示网络接口配置和状态。

Terminal window
# 显示所有网络接口
ifconfig
# 显示特定网络接口
ifconfig eth0
# 启动网络接口
ifconfig eth0 up
# 关闭网络接口
ifconfig eth0 down
# 配置网络接口IP地址
ifconfig eth0 192.168.1.100 netmask 255.255.255.0

ip命令#

ip命令是新一代的网络配置工具,用于显示和配置网络接口。

Terminal window
# 显示所有网络接口
ip addr
# 显示特定网络接口
ip addr show eth0
# 显示路由表
ip route
# 显示网络连接
ip link
# 启动网络接口
ip link set eth0 up
# 关闭网络接口
ip link set eth0 down
# 配置网络接口IP地址
ip addr add 192.168.1.100/24 dev eth0

netstat命令#

netstat命令用于显示网络连接、路由表、接口统计等信息。

Terminal window
# 显示所有网络连接
netstat -a
# 显示TCP连接
netstat -t
# 显示UDP连接
netstat -u
# 显示监听状态的连接
netstat -l
# 显示进程信息
netstat -p
# 显示路由表
netstat -r
# 显示接口统计信息
netstat -i
# 显示网络统计信息
netstat -s
# 以数字形式显示
netstat -n

ss命令#

ss命令是netstat的替代品,用于显示网络连接信息,速度更快。

Terminal window
# 显示所有网络连接
ss -a
# 显示TCP连接
ss -t
# 显示UDP连接
ss -u
# 显示监听状态的连接
ss -l
# 显示进程信息
ss -p
# 显示路由表
ss -r
# 以数字形式显示
ss -n
# 显示特定端口的连接
ss -tulnp 'sport = :80'
# 显示特定IP的连接
ss -tulnp 'src = 192.168.1.100'

ping命令#

ping命令用于测试网络连接。

Terminal window
# 测试网络连接
ping example.com
# 测试网络连接(指定次数)
ping -c 5 example.com
# 测试网络连接(指定间隔)
ping -i 2 example.com
# 测试网络连接(指定数据包大小)
ping -s 1000 example.com
# 测试网络连接(禁用DNS解析)
ping -n example.com

traceroute命令#

traceroute命令用于追踪网络数据包的路由路径。

Terminal window
# 安装traceroute(Debian/Ubuntu)
sudo apt install -y traceroute
# 安装traceroute(RHEL/CentOS)
sudo yum install -y traceroute
# 追踪网络数据包的路由路径
traceroute example.com
# 追踪网络数据包的路由路径(使用ICMP)
traceroute -I example.com
# 追踪网络数据包的路由路径(使用TCP)
traceroute -T example.com
# 追踪网络数据包的路由路径(指定端口)
traceroute -T -p 80 example.com

进程监控命令#

ps命令#

ps命令用于显示进程状态。

Terminal window
# 显示所有进程
ps aux
# 显示所有进程(树形结构)
ps axjf
# 显示特定用户的进程
ps -u username
# 显示特定进程
ps -p 1234
# 按CPU使用排序
ps aux --sort=-%cpu | head -10
# 按内存使用排序
ps aux --sort=-%mem | head -10
# 显示进程详细信息
ps -ef | grep process_name

pstree命令#

pstree命令用于以树形结构显示进程。

Terminal window
# 安装pstree(Debian/Ubuntu)
sudo apt install -y psmisc
# 安装pstree(RHEL/CentOS)
sudo yum install -y psmisc
# 显示进程树形结构
pstree
# 显示进程ID
pstree -p
# 显示用户名称
pstree -u
# 显示特定进程的子进程
pstree -p 1234

pgrep命令#

pgrep命令用于根据进程名称或其他属性查找进程。

Terminal window
# 根据进程名称查找进程
pgrep process_name
# 根据进程名称查找进程(忽略大小写)
pgrep -i process_name
# 显示进程名称和ID
pgrep -l process_name
# 显示进程组ID
pgrep -g group_id
# 显示会话ID
pgrep -s session_id
# 显示父进程ID
pgrep -P parent_id

pidof命令#

pidof命令用于根据进程名称查找进程ID。

Terminal window
# 根据进程名称查找进程ID
pidof process_name
# 根据进程名称查找进程ID(忽略大小写)
pidof -i process_name
# 显示所有匹配的进程ID
pidof -s process_name

lsof命令#

lsof命令用于显示进程打开的文件。

Terminal window
# 安装lsof(Debian/Ubuntu)
sudo apt install -y lsof
# 安装lsof(RHEL/CentOS)
sudo yum install -y lsof
# 显示所有打开的文件
lsof
# 显示特定进程打开的文件
lsof -p 1234
# 显示特定用户打开的文件
lsof -u username
# 显示特定文件被哪些进程打开
lsof /path/to/file
# 显示特定目录下被打开的文件
lsof +D /path/to/directory
# 显示网络连接
lsof -i
# 显示特定端口的网络连接
lsof -i :80
# 显示特定协议的网络连接
lsof -i tcp

系统服务监控命令#

systemctl命令#

systemctl命令用于管理systemd服务。

Terminal window
# 显示所有服务的状态
systemctl list-units --type=service
# 显示运行中的服务
systemctl list-units --type=service --state=running
# 显示失败的服务
systemctl list-units --type=service --state=failed
# 显示特定服务的状态
systemctl status service_name
# 启动服务
systemctl start service_name
# 停止服务
systemctl stop service_name
# 重启服务
systemctl restart service_name
# 重新加载服务配置
systemctl reload service_name
# 启用服务(开机自启)
systemctl enable service_name
# 禁用服务(禁止开机自启)
systemctl disable service_name
# 查看服务依赖关系
systemctl list-dependencies service_name

service命令#

service命令是传统的服务管理命令,在使用systemd的系统中仍然可用。

Terminal window
# 显示特定服务的状态
service service_name status
# 启动服务
service service_name start
# 停止服务
service service_name stop
# 重启服务
service service_name restart
# 重新加载服务配置
service service_name reload

日志监控命令#

journalctl命令#

journalctl命令用于查看和管理systemd日志。

Terminal window
# 查看所有日志
journalctl
# 查看最近的日志
journalctl -n 100
# 实时查看日志
journalctl -f
# 查看特定服务的日志
journalctl -u service_name
# 查看特定优先级的日志
journalctl -p err..emerg
# 查看启动日志
journalctl -b
# 查看特定时间段的日志
journalctl --since "2026-02-05 00:00:00" --until "2026-02-05 23:59:59"
# 查看认证日志
journalctl SYSLOG_FACILITY=10

logwatch命令#

logwatch命令用于分析系统日志并生成报告。

Terminal window
# 安装logwatch(Debian/Ubuntu)
sudo apt install -y logwatch
# 安装logwatch(RHEL/CentOS)
sudo yum install -y logwatch
# 生成日志报告
logwatch
# 生成特定服务的日志报告
logwatch --service sshd
# 生成特定时间段的日志报告
logwatch --range today
logwatch --range yesterday
logwatch --range "last 7 days"
# 生成详细的日志报告
logwatch --detail high
# 将日志报告发送到邮箱
logwatch --mailto user@example.com

高级监控工具#

Nagios#

Nagios是一个流行的开源监控工具,它可以监控主机、服务和网络设备。

安装Nagios#

Terminal window
# 安装Nagios Core(Debian/Ubuntu)
sudo apt install -y nagios3
# 安装Nagios Core(RHEL/CentOS)
sudo yum install -y nagios
# 安装Nagios插件
sudo apt install -y nagios-plugins* # Debian/Ubuntu
sudo yum install -y nagios-plugins* # RHEL/CentOS
# 访问Nagios
# http://server_ip/nagios3

Nagios插件#

Nagios使用插件来监控各种资源,常用的插件包括:

  • check_cpu:监控CPU使用情况
  • check_mem:监控内存使用情况
  • check_disk:监控磁盘使用情况
  • check_load:监控系统负载
  • check_http:监控HTTP服务
  • check_ssh:监控SSH服务
  • check_ping:监控网络连接
  • check_mysql:监控MySQL服务

Zabbix#

Zabbix是一个功能强大的开源监控工具,它可以监控主机、服务和网络设备。

安装Zabbix#

Terminal window
# 安装Zabbix Server(Debian/Ubuntu)
sudo apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent
# 安装Zabbix Server(RHEL/CentOS)
sudo yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent
# 访问Zabbix
# http://server_ip/zabbix

Zabbix监控项#

Zabbix使用监控项来收集数据,常用的监控项包括:

  • system.cpu.load:系统负载
  • vm.memory.size:内存使用情况
  • vfs.fs.size:磁盘使用情况
  • net.if.in:网络入流量
  • net.if.out:网络出流量
  • proc.num:进程数量
  • net.tcp.port:TCP端口状态

Prometheus#

Prometheus是一个开源的监控系统,它使用时序数据库存储监控数据。

安装Prometheus#

Terminal window
# 下载Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.30.0/prometheus-2.30.0.linux-amd64.tar.gz
tar xvfz prometheus-2.30.0.linux-amd64.tar.gz
cd prometheus-2.30.0.linux-amd64/
# 启动Prometheus
./prometheus --config.file=prometheus.yml
# 访问Prometheus
# http://server_ip:9090

Prometheus指标#

Prometheus使用指标来收集数据,常用的指标包括:

  • node_cpu_seconds_total:CPU使用时间
  • node_memory_MemTotal_bytes:总内存
  • node_memory_MemFree_bytes:空闲内存
  • node_filesystem_size_bytes:文件系统大小
  • node_filesystem_free_bytes:文件系统空闲空间
  • node_network_transmit_bytes_total:网络发送字节数
  • node_network_receive_bytes_total:网络接收字节数

Grafana#

Grafana是一个开源的可视化工具,它可以与Prometheus等监控工具集成,展示监控数据。

安装Grafana#

Terminal window
# 安装Grafana(Debian/Ubuntu)
sudo apt install -y grafana
# 安装Grafana(RHEL/CentOS)
sudo yum install -y grafana
# 启动Grafana
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
# 访问Grafana
# http://server_ip:3000

Grafana仪表板#

Grafana使用仪表板来展示监控数据,常用的仪表板包括:

  • Node Exporter Full:展示节点详细信息
  • Prometheus 2.0 Stats:展示Prometheus自身状态
  • NGINX:展示NGINX状态
  • MySQL:展示MySQL状态

告警工具#

Alertmanager#

Alertmanager是Prometheus的告警组件,用于处理和发送告警。

安装Alertmanager#

Terminal window
# 下载Alertmanager
wget https://github.com/prometheus/alertmanager/releases/download/v0.22.0/alertmanager-0.22.0.linux-amd64.tar.gz
tar xvfz alertmanager-0.22.0.linux-amd64.tar.gz
cd alertmanager-0.22.0.linux-amd64/
# 启动Alertmanager
./alertmanager --config.file=alertmanager.yml
# 访问Alertmanager
# http://server_ip:9093

Alertmanager配置#

# alertmanager.yml 示例
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.example.com:587'
smtp_from: 'alertmanager@example.com'
smtp_auth_username: 'alertmanager'
smtp_auth_password: 'password'
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: 'admin@example.com'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']

Nagios告警#

Nagios使用通知机制发送告警,可以通过邮件、短信等方式发送。

Nagios告警配置#

Terminal window
# 编辑Nagios联系人配置
sudo nano /etc/nagios3/conf.d/contacts_nagios2.cfg # Debian/Ubuntu
sudo nano /etc/nagios/objects/contacts.cfg # RHEL/CentOS
# 联系人配置示例
# define contact {
# contact_name admin
# alias Administrator
# email admin@example.com
# service_notification_period 24x7
# host_notification_period 24x7
# service_notification_options w,u,c,r
# host_notification_options d,u,r
# service_notification_commands notify-service-by-email
# host_notification_commands notify-host-by-email
# }

Zabbix告警#

Zabbix使用动作机制发送告警,可以通过邮件、短信、微信等方式发送。

Zabbix告警配置#

  1. 创建媒介:配置邮件服务器、短信网关等
  2. 创建用户:配置用户信息和媒介
  3. 创建动作:配置告警触发条件和通知方式
  4. 创建触发器:配置告警触发条件

监控脚本编写#

基础监控脚本#

#!/bin/bash
# 系统资源监控脚本
# 获取当前时间
TIME=$(date +"%Y-%m-%d %H:%M:%S")
# 获取CPU使用率
CPU_USAGE=$(top -b -n 1 | grep "Cpu(s)" | awk '{print $2 + $4}')
# 获取内存使用率
MEMORY_TOTAL=$(free -m | grep "Mem:" | awk '{print $2}')
MEMORY_USED=$(free -m | grep "Mem:" | awk '{print $3}')
MEMORY_USAGE=$(echo "scale=2; $MEMORY_USED / $MEMORY_TOTAL * 100" | bc)
# 获取磁盘使用率
DISK_USAGE=$(df -h | grep "/dev/sda1" | awk '{print $5}' | sed 's/%//')
# 获取系统负载
LOAD_AVERAGE=$(uptime | awk '{print $10 $11 $12}')
# 输出监控结果
echo "[$TIME] CPU使用率: $CPU_USAGE% 内存使用率: $MEMORY_USAGE% 磁盘使用率: $DISK_USAGE% 系统负载: $LOAD_AVERAGE"
# 检查是否需要发送告警
if (( $(echo "$CPU_USAGE > 80" | bc -l) )); then
echo "告警: CPU使用率超过80%"
# 发送告警邮件
# echo "CPU使用率超过80%" | mail -s "系统告警" admin@example.com
fi
if (( $(echo "$MEMORY_USAGE > 80" | bc -l) )); then
echo "告警: 内存使用率超过80%"
# 发送告警邮件
# echo "内存使用率超过80%" | mail -s "系统告警" admin@example.com
fi
if (( $DISK_USAGE > 80 )); then
echo "告警: 磁盘使用率超过80%"
# 发送告警邮件
# echo "磁盘使用率超过80%" | mail -s "系统告警" admin@example.com
fi

服务监控脚本#

#!/bin/bash
# 服务监控脚本
# 服务列表
SERVICES=("ssh" "nginx" "mysql")
# 获取当前时间
TIME=$(date +"%Y-%m-%d %H:%M:%S")
# 检查服务状态
for SERVICE in "${SERVICES[@]}"; do
STATUS=$(systemctl status $SERVICE 2>/dev/null | grep "Active:" | awk '{print $2}')
if [ "$STATUS" = "active" ]; then
echo "[$TIME] 服务 $SERVICE 运行正常"
else
echo "[$TIME] 告警: 服务 $SERVICE 异常"
# 发送告警邮件
# echo "服务 $SERVICE 异常" | mail -s "服务告警" admin@example.com
# 尝试重启服务
# systemctl restart $SERVICE
fi
done

网络监控脚本#

#!/bin/bash
# 网络监控脚本
# 目标IP列表
TARGETS=("8.8.8.8" "1.1.1.1" "example.com")
# 获取当前时间
TIME=$(date +"%Y-%m-%d %H:%M:%S")
# 检查网络连接
for TARGET in "${TARGETS[@]}"; do
ping -c 1 -W 2 $TARGET > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "[$TIME] 网络连接 $TARGET 正常"
else
echo "[$TIME] 告警: 网络连接 $TARGET 异常"
# 发送告警邮件
# echo "网络连接 $TARGET 异常" | mail -s "网络告警" admin@example.com
fi
done

监控和告警最佳实践#

监控最佳实践#

  1. 制定监控策略:根据业务需求制定合理的监控策略
  2. 选择合适的监控工具:根据系统规模和需求选择合适的监控工具
  3. 设置合理的监控阈值:根据系统实际情况设置合理的监控阈值
  4. 监控所有关键组件:监控系统所有关键组件,包括硬件、软件和网络
  5. 定期审查监控配置:定期审查监控配置,确保监控覆盖所有关键指标
  6. 备份监控配置:备份监控配置,防止配置丢失
  7. 文档化监控:记录监控策略、配置和流程,便于团队成员理解
  8. 培训团队成员:培训团队成员使用监控工具,提高监控效率

告警最佳实践#

  1. 设置合理的告警阈值:根据系统实际情况设置合理的告警阈值,避免误报
  2. 分级告警:根据告警级别设置不同的处理流程
  3. 告警聚合:聚合相关的告警,避免告警风暴
  4. 告警抑制:在维护期间抑制告警,避免误报
  5. 告警升级:设置告警升级机制,确保告警得到及时处理
  6. 告警验证:验证告警的真实性,避免误报
  7. 告警统计:统计告警情况,分析系统问题
  8. 告警自动化:自动化处理常见告警,提高处理效率

常见问题及解决方案#

监控数据不准确#

症状:监控工具显示的数据与实际情况不符。

解决方案

  • 检查监控工具配置
  • 检查监控插件是否正常工作
  • 检查系统时间是否同步
  • 检查网络连接是否正常

告警过多#

症状:系统产生过多告警,导致告警疲劳。

解决方案

  • 调整告警阈值
  • 聚合相关告警
  • 优化监控配置
  • 自动化处理常见告警

告警延迟#

症状:告警产生后,通知延迟。

解决方案

  • 检查告警工具配置
  • 检查邮件服务器、短信网关等是否正常
  • 优化告警处理流程

监控工具性能问题#

症状:监控工具占用过多系统资源,影响系统性能。

解决方案

  • 调整监控工具配置
  • 减少监控频率
  • 优化监控查询
  • 升级监控服务器硬件

总结#

本文介绍了Linux系统中常用的监控和告警命令和技巧,包括系统资源监控、系统服务监控、进程监控、日志监控等方面的内容。通过掌握这些命令和技巧,系统管理员可以更高效地监控和管理系统,及时发现和解决问题,提高系统的可靠性和可用性。

监控和告警是一个持续的过程,需要系统管理员不断学习和实践,根据系统的实际情况选择合适的监控工具和策略,建立完善的监控和告警体系。随着技术的不断发展,监控和告警工具也在不断演进,系统管理员需要保持学习的态度,及时更新知识,以适应新的挑战和机遇。

练习#

  1. 使用top命令监控系统CPU和内存使用情况。
  2. 使用iostat命令监控磁盘I/O统计信息。
  3. 使用ss命令监控网络连接。
  4. 使用systemctl命令监控系统服务状态。
  5. 使用journalctl命令监控系统日志。
  6. 安装并配置Nagios,监控系统基本状态。
  7. 安装并配置Prometheus和Grafana,监控系统详细状态。
  8. 编写一个系统资源监控脚本,实现自动告警功能。
  9. 编写一个服务监控脚本,实现服务自动重启功能。
  10. 制定一个完整的监控和告警策略,包括监控目标、告警级别和处理流程。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
Linux监控和告警命令和技巧
https://blog.vanilla.net.cn/posts/2026-02-05-linux-monitoring-alerting/
作者
鹁鸪
发布于
2026-02-05
许可协议
CC BY-NC-SA 4.0

评论区

目录