监控是保障系统稳定运行的关键。本文将介绍Linux环境下常用的监控工具和最佳实践。
1. 系统性能监控
top/htop
# top - 实时监控
top
# htop - 增强版(需安装)
htop
# 关键指标
# %CPU - CPU使用率
# %MEM - 内存使用率
# TIME+ - CPU时间
# COMMAND - 进程名
vmstat
# 虚拟内存统计
vmstat 2 10
# 输出说明
# r: 运行队列长度
# b: 阻塞进程数
# swpd: 交换内存使用
# free: 空闲内存
# buff: 缓冲区内存
# cache: 缓存内存
# si/so: 交换入/出速率
iostat
# 磁盘IO统计
iostat -x 2
# 关键指标
# %util: 磁盘使用率
# await: IO等待时间
# r/s, w/s: 读写速率
free
# 内存使用
free -h
# 输出说明
# total: 总内存
# used: 已使用
# free: 空闲
# shared: 共享内存
# buff/cache: 缓冲/缓存
# available: 可用内存
2. 网络监控
iftop
# 实时网络流量
sudo iftop -i eth0
# 按端口监控
sudo iftop -F 192.168.1.0/24
nethogs
# 按进程监控网络
sudo nethogs
ss
# Socket统计
ss -tlnp
ss -s
nload
# 网络带宽监控
nload
3. 进程监控
ps
# 查看进程
ps aux
ps -ef | grep nginx
pidstat
# 进程统计
pidstat 2
pidstat -u 2 # CPU
pidstat -r 2 # 内存
pidstat -d 2 # IO
strace
# 跟踪系统调用
strace -p 1234
strace -e trace=file ls
4. 日志分析
grep/awk/sed
# 搜索错误
grep "ERROR" /var/log/syslog
# 统计IP访问
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
# 提取时间
grep "2025-01-15" /var/log/syslog | wc -l
日志轮转
# logrotate配置
sudo nano /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
日志聚合
# ELK Stack
# Elasticsearch + Logstash + Kibana
# LAMP Stack
# Loki + Promtail + Grafana
5. 监控系统
Prometheus + Grafana
# Prometheus配置
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
# Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
tar xvfz node_exporter-*.tar.gz
./node_exporter
Zabbix
# 安装Zabbix
# 1. 安装Zabbix Server
# 2. 安装Zabbix Agent
# 3. Web界面配置
# 监控项
- CPU使用率
- 内存使用率
- 磁盘使用率
- 网络流量
- 进程状态
Nagios
# 安装Nagios
# 1. 安装核心
# 2. 安装插件
# 3. 配置监控主机
# 检查命令
define command{
command_name check_ssh
command_line $USER1$/check_ssh $HOSTADDRESS$
}
6. 告警配置
邮件告警
# 配置mailx
sudo nano /etc/mail.rc
set [email protected]
set smtp=smtp://smtp.example.com:587
set smtp-auth=login
set [email protected]
set smtp-auth-password=password
钉钉/企业微信
# 钉钉机器人
curl 'https://oapi.dingtalk.com/robot/send?access_token=TOKEN' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text", "text": {"content": "告警信息"}}'
Prometheus告警
# alertmanager配置
route:
group_by: ['alertname']
receiver: 'webhook'
receivers:
- name: 'webhook'
webhook_configs:
- url: 'http://alert-webhook:5000/'
7. 性能分析
perf
# CPU性能分析
perf top
perf record -g ./program
perf report
systemtap
# 系统跟踪
stap -e 'probe process("/usr/bin/python3").function("main") { printf("Python started\n") }'
8. 容器监控
Docker监控
# 查看容器资源
docker stats
# cAdvisor
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--publish=8080:8080 \
google/cadvisor
Kubernetes监控
# 部署Prometheus Stack
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack
9. 日志管理
journalctl
# 查看系统日志
journalctl -u nginx
journalctl -f
journalctl --since "2025-01-15" --until "2025-01-16"
10. 监控检查清单
- [ ] CPU使用率监控
- [ ] 内存使用率监控
- [ ] 磁盘空间监控
- [ ] 网络流量监控
- [ ] 进程存活监控
- [ ] 日志错误监控
- [ ] 告警通知配置
- [ ] 历史数据保留
- [ ] 监控面板可视化
- [ ] 定期性能分析
总结
监控体系是运维工作的基础。关键要点:
- 选择合适的工具:根据场景选择轻量或企业级方案
- 定义关键指标:CPU、内存、磁盘、网络
- 及时告警:异常情况第一时间通知
- 历史数据:保留数据用于趋势分析
📖 进阶工具:学习使用eBPF进行高级性能分析,使用Pixie进行分布式追踪,以及OpenTelemetry统一可观测性标准。