從開發轉型運維,首要任務是建立覆蓋作業系統、中間件、資料庫的立體監控體系。本文設計一套基於 Shell/Python 的輕量級監控方案,涵蓋進程存活、資源佔用、業務指標、效能參數、壓力測試基線,為後續接入 Zabbix/Prometheus 打下基礎。
| 層級 | 組件 | 關鍵指標 | 採集頻率 | 告警閾值 |
|---|---|---|---|---|
| OS | 進程 | tomcat、apache、mysqld 存活、PID、CPU/MEM% | 1 分鐘 | 進程消失立即告警 |
| 資源 | Load Avg (1/5/15)、CPU 閒置%、MEM 可用%、磁碟使用%、Inode%、網卡流量、TCP 連接數 | 1 分鐘 | Load > CPU核心/2、磁碟 > 75%、MEM < 10% | |
| 日誌 | /var/log/messages、secure、dmesg 關鍵字(OOM、kill、error) | 實時 | 關鍵字匹配告警 | |
| MySQL | 效能參數 | 見下表「MySQL 核心參數清單」 | 5 分鐘 | 參數偏離基線告警 |
| 狀態指標 | QPS、TPS、InnoDB 緩衝池命中率、慢查詢數、Table Cache 命中、鎖等待、臨時表磁碟化、Binlog Cache、Slave 延遲 | 1 分鐘 | QPS 突變、命中率 < 95%、Slave 延遲 > 30s | |
| 中間件 | Tomcat | 執行緒池 (current/max/busy)、堆記憶體 (used/max)、GC 頻率/耗時、請求數/錯誤率、Session 數 | 1 分鐘 | 執行緒 > 80% max、Old GC > 5s、錯誤率 > 1% |
| Apache/Nginx | 並發連接、請求 QPS、響應時間 (P99)、帶寬、錯誤碼分布 (4xx/5xx) | 1 分鐘 | 響應 P99 > 3s、5xx > 0.5% |
# InnoDB 核心 innodb_buffer_pool_size # 物理記憶體 50~80% innodb_max_dirty_pages_pct # < 50% innodb_log_buffer_size # 32M~64M innodb_log_file_size # 512M~1G innodb_flush_log_at_trx_commit # 1 (最高安全) sync_binlog # 1 innodb_file_per_table # ON # 日誌與複製 log_bin # ON expire_logs_days # 7~30 binlog_format # ROW / MIXED # 連接與緩存 max_connections # 1000~5000 thread_cache_size # 50~100 table_open_cache # 2000~5000 table_definition_cache # 2000~5000 # 查詢緩存 (5.7+ 建議關閉) query_cache_size # 0 query_cache_type # 0 # 慢查詢 slow_query_log # ON long_query_time # 0.05~1 log_queries_not_using_indexes # ON min_examined_row_limit # 100 # 字符集與大小寫 character_set_server # utf8mb4 lower_case_table_names # 1 (Linux 建議) # SQL 模式 sql_mode # STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION...
monitor_master.sh,crontab 每分鐘執行,調用各子模組。check_process.sh、collect_os.sh、collect_mysql.sh、collect_tomcat.sh (JMX/Jolokia)、collect_apache.sh (mod_status/server-status)。# 檢測 Load Avg
load1=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | sed 's/,//')
core=$(nproc)
threshold=$(echo "$core / 2" | bc -l)
if (( $(echo "$load1 > $threshold" | bc -l) )); then
# 進入高頻採集模式:每 10 秒採集一次,持續 5 分鐘
for i in {1..30}; do
top -bn1 | head -20 >> /var/log/highload_top_$(date +%s).log
ps aux --sort=-%cpu | head -11 >> /var/log/highload_ps_$(date +%s).log
sleep 10
done
# 發送告警(含 Top10 進程快照)
fi
sysbench (OLTP)、tpcc-mysql。innodb_buffer_pool_size 分別設 2/4/6/8/10/12G,倉庫數 5/10/15/20/50/60/80/100,記錄 TPS 曲線。監控即代碼,指標即文檔。從腳本起步,漸進演進至平台化,構建可觀測的基礎設施。