全部文章

监控与日志

服务器监控工具、日志管理、Uptime 监控与告警配置

目录 21 节

监控与日志

监控和日志的目标不是“装更多面板”,而是让你在出问题时能更快回答三个问题:哪里坏了、什么时候开始坏、影响范围有多大。

推荐落地顺序

  1. 先有最基础的 uptime 监控
  2. 再补关键服务日志查看方式
  3. 再看进程守护、重启和告警
  4. 最后才是仪表盘、聚合和更复杂的可观测性栈

系统监控

htop / btop

# 安装
apt install htop -y
# 或更现代的 btop
apt install btop -y

# 运行
htop
btop

Glances

跨平台系统监控,支持 Web 界面。

pip install glances

# 终端模式
glances

# Web 模式
glances -w
# 访问 http://localhost:61208

Uptime 监控

Uptime Kuma

自托管的监控工具,支持 HTTP、TCP、Ping 等多种监控方式。

# docker-compose.yml
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    restart: unless-stopped
    ports:
      - "3001:3001"
    volumes:
      - ./data:/app/data
docker compose up -d
# 访问 http://localhost:3001

功能:

  • HTTP/HTTPS、TCP、Ping、DNS 监控
  • 通知:Telegram、Discord、邮件、Webhook
  • 状态页面
  • 多语言支持

日志管理

journalctl(systemd)

# 查看服务日志
journalctl -u nginx -f          # 实时跟踪
journalctl -u nginx --since today
journalctl -u nginx --since "2026-02-01" --until "2026-02-27"

# 查看系统日志
journalctl -p err               # 只看错误
journalctl --disk-usage         # 日志占用空间
journalctl --vacuum-size=500M   # 清理到 500M

日志文件常用操作

# 实时查看
tail -f /var/log/nginx/access.log

# 搜索错误
grep -i error /var/log/syslog

# 统计访问 IP
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head 20

# 按时间过滤
awk '/27\/Feb\/2026/' /var/log/nginx/access.log

Loki + Grafana

轻量级日志聚合方案。

# docker-compose.yml
services:
  loki:
    image: grafana/loki:latest
    ports:
      - "3100:3100"
    volumes:
      - ./loki-data:/loki

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin

进程管理

PM2(Node.js)

npm install -g pm2

pm2 start app.js --name myapp
pm2 list                        # 查看进程
pm2 logs myapp                  # 查看日志
pm2 monit                       # 监控面板
pm2 restart myapp               # 重启
pm2 stop myapp                  # 停止
pm2 delete myapp                # 删除

# 开机自启
pm2 startup
pm2 save

Supervisor(Python/通用)

apt install supervisor -y
; /etc/supervisor/conf.d/myapp.conf
[program:myapp]
command=/usr/bin/python3 /opt/app/main.py
directory=/opt/app
user=www-data
autostart=true
autorestart=true
stdout_logfile=/var/log/myapp.log
stderr_logfile=/var/log/myapp-error.log
supervisorctl reread
supervisorctl update
supervisorctl status

告警

简单脚本告警

#!/bin/bash
# check-disk.sh
THRESHOLD=90
USAGE=$(df / | tail -1 | awk '{print $5}' | tr -d '%')

if [ "$USAGE" -gt "$THRESHOLD" ]; then
  curl -s -X POST "https://api.telegram.org/bot<TOKEN>/sendMessage" \
    -d "chat_id=<CHAT_ID>&text=⚠️ 磁盘使用率 ${USAGE}%"
fi

配合 cron 定时执行:

# 每小时检查一次
0 * * * * /opt/scripts/check-disk.sh

参考链接

建议优先监控的内容

  • 站点是否可访问
  • 磁盘空间
  • CPU / 内存异常
  • 关键进程是否退出
  • 证书有效期

常见问题

有日志,但不知道从哪看起

先看时间点,再看对应服务,再看错误级别。不要一上来全量翻几十万行日志。

服务偶尔挂掉,但平时看不出来

这正是 uptime 监控和告警的价值。没有外部监控时,很多间歇性故障会被错过。

要不要一开始就上完整 ELK / Loki 栈

不建议。先把最小可用监控做起来,再看是否真的有聚合需求。

阅读建议
  • - 先读标题和摘要,再结合目录决定从哪个章节开始精读。
  • - 看到具体命令、配置或步骤时,尽量在自己的环境里同步验证。
  • - 如果你只是快速查资料,可先看目录和相关文档,再决定是否深入全文。
适合谁看
  • - 希望把零散经验整理成长期可复用工作流的人
  • - 想先建立认知,再决定是否深入实践的人
  • - 希望阅读时顺手建立自己的操作清单或收藏体系的人
执行前检查
  • - 先浏览标题、摘要和目录,带着问题阅读会更高效
  • - 顺手记录真正对你有用的命令、链接和注意事项,避免重复搜索
  • - 如果页面里提到相关文档,尽量一起打开对照,效果通常更完整
同类内容
← 上一篇环境变量管理