Linux监控和告警命令和技巧
Linux监控和告警命令和技巧
监控和告警概述
监控和告警是系统管理的重要组成部分,它可以帮助系统管理员实时了解系统状态,及时发现和解决问题,提高系统的可靠性和可用性。Linux系统提供了丰富的监控和告警工具,本文将介绍Linux系统中常用的监控和告警命令和技巧,帮助系统管理员更高效地监控和管理系统。
系统监控基础
监控目标
- 系统资源:CPU、内存、磁盘、网络等系统资源的使用情况
- 系统服务:系统服务的运行状态
- 应用程序:应用程序的运行状态和性能
- 安全事件:系统安全事件,如登录尝试、权限变更等
- 业务指标:业务相关的指标,如网站访问量、数据库查询时间等
监控级别
- 基础监控:监控系统基本状态,如CPU、内存、磁盘使用情况
- 深度监控:监控系统详细状态,如进程、网络连接、文件系统等
- 业务监控:监控业务相关的指标,如响应时间、吞吐量等
告警级别
- 信息:一般信息,如系统启动、服务重启等
- 警告:需要关注的情况,如资源使用接近阈值
- 错误:错误情况,如服务故障、磁盘空间不足等
- 严重:严重错误,如系统崩溃、数据丢失等
系统资源监控命令
CPU监控
top命令
top命令用于实时监控系统CPU和内存使用情况。
# 启动toptop
# 常用快捷键# h: 显示帮助# 1: 显示所有CPU核心# M: 按内存使用排序# P: 按CPU使用排序# T: 按时间排序# k: 终止进程# q: 退出
# 批处理模式运行toptop -b -n 1
# 显示特定进程的CPU使用情况top -p 1234
# 每5秒更新一次,显示10次top -d 5 -n 10mpstat命令
mpstat命令用于监控多处理器系统的CPU使用情况。
# 安装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 -Asar命令
sar命令用于收集、报告和保存系统活动信息,包括CPU、内存、磁盘、网络等。
# 安装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命令用于显示系统内存使用情况。
# 显示内存使用情况free
# 以人类可读格式显示free -h
# 以MB为单位显示free -m
# 以GB为单位显示free -g
# 显示详细内存使用情况free -vvmstat命令
vmstat命令用于显示虚拟内存统计信息。
# 显示虚拟内存统计信息vmstat
# 每2秒更新一次,显示5次vmstat 2 5
# 显示详细信息vmstat -a
# 显示磁盘I/O统计信息vmstat -d
# 显示内存页面统计信息vmstat -p /dev/sda1slabtop命令
slabtop命令用于实时显示内核slab分配器的使用情况。
# 启动slabtopslabtop
# 常用快捷键# h: 显示帮助# s: 按大小排序# c: 按缓存数量排序# a: 按活跃对象数量排序# q: 退出
# 批处理模式运行slabtopslabtop -s c -o磁盘监控
df命令
df命令用于显示文件系统磁盘空间使用情况。
# 显示磁盘空间使用情况df
# 以人类可读格式显示df -h
# 显示所有文件系统df -a
# 显示文件系统类型df -T
# 显示inode使用情况df -idu命令
du命令用于显示目录或文件的磁盘使用情况。
# 显示当前目录的磁盘使用情况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 -10iostat命令
iostat命令用于监控磁盘I/O统计信息。
# 安装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命令用于显示网络接口配置和状态。
# 显示所有网络接口ifconfig
# 显示特定网络接口ifconfig eth0
# 启动网络接口ifconfig eth0 up
# 关闭网络接口ifconfig eth0 down
# 配置网络接口IP地址ifconfig eth0 192.168.1.100 netmask 255.255.255.0ip命令
ip命令是新一代的网络配置工具,用于显示和配置网络接口。
# 显示所有网络接口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 eth0netstat命令
netstat命令用于显示网络连接、路由表、接口统计等信息。
# 显示所有网络连接netstat -a
# 显示TCP连接netstat -t
# 显示UDP连接netstat -u
# 显示监听状态的连接netstat -l
# 显示进程信息netstat -p
# 显示路由表netstat -r
# 显示接口统计信息netstat -i
# 显示网络统计信息netstat -s
# 以数字形式显示netstat -nss命令
ss命令是netstat的替代品,用于显示网络连接信息,速度更快。
# 显示所有网络连接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命令用于测试网络连接。
# 测试网络连接ping example.com
# 测试网络连接(指定次数)ping -c 5 example.com
# 测试网络连接(指定间隔)ping -i 2 example.com
# 测试网络连接(指定数据包大小)ping -s 1000 example.com
# 测试网络连接(禁用DNS解析)ping -n example.comtraceroute命令
traceroute命令用于追踪网络数据包的路由路径。
# 安装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命令用于显示进程状态。
# 显示所有进程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_namepstree命令
pstree命令用于以树形结构显示进程。
# 安装pstree(Debian/Ubuntu)sudo apt install -y psmisc
# 安装pstree(RHEL/CentOS)sudo yum install -y psmisc
# 显示进程树形结构pstree
# 显示进程IDpstree -p
# 显示用户名称pstree -u
# 显示特定进程的子进程pstree -p 1234pgrep命令
pgrep命令用于根据进程名称或其他属性查找进程。
# 根据进程名称查找进程pgrep process_name
# 根据进程名称查找进程(忽略大小写)pgrep -i process_name
# 显示进程名称和IDpgrep -l process_name
# 显示进程组IDpgrep -g group_id
# 显示会话IDpgrep -s session_id
# 显示父进程IDpgrep -P parent_idpidof命令
pidof命令用于根据进程名称查找进程ID。
# 根据进程名称查找进程IDpidof process_name
# 根据进程名称查找进程ID(忽略大小写)pidof -i process_name
# 显示所有匹配的进程IDpidof -s process_namelsof命令
lsof命令用于显示进程打开的文件。
# 安装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服务。
# 显示所有服务的状态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_nameservice命令
service命令是传统的服务管理命令,在使用systemd的系统中仍然可用。
# 显示特定服务的状态service service_name status
# 启动服务service service_name start
# 停止服务service service_name stop
# 重启服务service service_name restart
# 重新加载服务配置service service_name reload日志监控命令
journalctl命令
journalctl命令用于查看和管理systemd日志。
# 查看所有日志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=10logwatch命令
logwatch命令用于分析系统日志并生成报告。
# 安装logwatch(Debian/Ubuntu)sudo apt install -y logwatch
# 安装logwatch(RHEL/CentOS)sudo yum install -y logwatch
# 生成日志报告logwatch
# 生成特定服务的日志报告logwatch --service sshd
# 生成特定时间段的日志报告logwatch --range todaylogwatch --range yesterdaylogwatch --range "last 7 days"
# 生成详细的日志报告logwatch --detail high
# 将日志报告发送到邮箱logwatch --mailto user@example.com高级监控工具
Nagios
Nagios是一个流行的开源监控工具,它可以监控主机、服务和网络设备。
安装Nagios
# 安装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/Ubuntusudo yum install -y nagios-plugins* # RHEL/CentOS
# 访问Nagios# http://server_ip/nagios3Nagios插件
Nagios使用插件来监控各种资源,常用的插件包括:
check_cpu:监控CPU使用情况check_mem:监控内存使用情况check_disk:监控磁盘使用情况check_load:监控系统负载check_http:监控HTTP服务check_ssh:监控SSH服务check_ping:监控网络连接check_mysql:监控MySQL服务
Zabbix
Zabbix是一个功能强大的开源监控工具,它可以监控主机、服务和网络设备。
安装Zabbix
# 安装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/zabbixZabbix监控项
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
# 下载Prometheuswget 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.gzcd prometheus-2.30.0.linux-amd64/
# 启动Prometheus./prometheus --config.file=prometheus.yml
# 访问Prometheus# http://server_ip:9090Prometheus指标
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
# 安装Grafana(Debian/Ubuntu)sudo apt install -y grafana
# 安装Grafana(RHEL/CentOS)sudo yum install -y grafana
# 启动Grafanasudo systemctl start grafana-serversudo systemctl enable grafana-server
# 访问Grafana# http://server_ip:3000Grafana仪表板
Grafana使用仪表板来展示监控数据,常用的仪表板包括:
Node Exporter Full:展示节点详细信息Prometheus 2.0 Stats:展示Prometheus自身状态NGINX:展示NGINX状态MySQL:展示MySQL状态
告警工具
Alertmanager
Alertmanager是Prometheus的告警组件,用于处理和发送告警。
安装Alertmanager
# 下载Alertmanagerwget 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.gzcd alertmanager-0.22.0.linux-amd64/
# 启动Alertmanager./alertmanager --config.file=alertmanager.yml
# 访问Alertmanager# http://server_ip:9093Alertmanager配置
# 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告警配置
# 编辑Nagios联系人配置sudo nano /etc/nagios3/conf.d/contacts_nagios2.cfg # Debian/Ubuntusudo 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告警配置
- 创建媒介:配置邮件服务器、短信网关等
- 创建用户:配置用户信息和媒介
- 创建动作:配置告警触发条件和通知方式
- 创建触发器:配置告警触发条件
监控脚本编写
基础监控脚本
#!/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.comfi
if (( $(echo "$MEMORY_USAGE > 80" | bc -l) )); then echo "告警: 内存使用率超过80%" # 发送告警邮件 # echo "内存使用率超过80%" | mail -s "系统告警" admin@example.comfi
if (( $DISK_USAGE > 80 )); then echo "告警: 磁盘使用率超过80%" # 发送告警邮件 # echo "磁盘使用率超过80%" | mail -s "系统告警" admin@example.comfi服务监控脚本
#!/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 fidone网络监控脚本
#!/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 fidone监控和告警最佳实践
监控最佳实践
- 制定监控策略:根据业务需求制定合理的监控策略
- 选择合适的监控工具:根据系统规模和需求选择合适的监控工具
- 设置合理的监控阈值:根据系统实际情况设置合理的监控阈值
- 监控所有关键组件:监控系统所有关键组件,包括硬件、软件和网络
- 定期审查监控配置:定期审查监控配置,确保监控覆盖所有关键指标
- 备份监控配置:备份监控配置,防止配置丢失
- 文档化监控:记录监控策略、配置和流程,便于团队成员理解
- 培训团队成员:培训团队成员使用监控工具,提高监控效率
告警最佳实践
- 设置合理的告警阈值:根据系统实际情况设置合理的告警阈值,避免误报
- 分级告警:根据告警级别设置不同的处理流程
- 告警聚合:聚合相关的告警,避免告警风暴
- 告警抑制:在维护期间抑制告警,避免误报
- 告警升级:设置告警升级机制,确保告警得到及时处理
- 告警验证:验证告警的真实性,避免误报
- 告警统计:统计告警情况,分析系统问题
- 告警自动化:自动化处理常见告警,提高处理效率
常见问题及解决方案
监控数据不准确
症状:监控工具显示的数据与实际情况不符。
解决方案:
- 检查监控工具配置
- 检查监控插件是否正常工作
- 检查系统时间是否同步
- 检查网络连接是否正常
告警过多
症状:系统产生过多告警,导致告警疲劳。
解决方案:
- 调整告警阈值
- 聚合相关告警
- 优化监控配置
- 自动化处理常见告警
告警延迟
症状:告警产生后,通知延迟。
解决方案:
- 检查告警工具配置
- 检查邮件服务器、短信网关等是否正常
- 优化告警处理流程
监控工具性能问题
症状:监控工具占用过多系统资源,影响系统性能。
解决方案:
- 调整监控工具配置
- 减少监控频率
- 优化监控查询
- 升级监控服务器硬件
总结
本文介绍了Linux系统中常用的监控和告警命令和技巧,包括系统资源监控、系统服务监控、进程监控、日志监控等方面的内容。通过掌握这些命令和技巧,系统管理员可以更高效地监控和管理系统,及时发现和解决问题,提高系统的可靠性和可用性。
监控和告警是一个持续的过程,需要系统管理员不断学习和实践,根据系统的实际情况选择合适的监控工具和策略,建立完善的监控和告警体系。随着技术的不断发展,监控和告警工具也在不断演进,系统管理员需要保持学习的态度,及时更新知识,以适应新的挑战和机遇。
练习
- 使用
top命令监控系统CPU和内存使用情况。 - 使用
iostat命令监控磁盘I/O统计信息。 - 使用
ss命令监控网络连接。 - 使用
systemctl命令监控系统服务状态。 - 使用
journalctl命令监控系统日志。 - 安装并配置Nagios,监控系统基本状态。
- 安装并配置Prometheus和Grafana,监控系统详细状态。
- 编写一个系统资源监控脚本,实现自动告警功能。
- 编写一个服务监控脚本,实现服务自动重启功能。
- 制定一个完整的监控和告警策略,包括监控目标、告警级别和处理流程。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!