#!/bin/bash # # 故障趋势分析脚本 # 用途: 分析历史故障数据,识别趋势 # ALERT_LOG="/var/log/openclaw-monitor/alerts.log" REPORT_FILE="/var/log/openclaw/trend-analysis.log" echo "========================================" >> "$REPORT_FILE" echo "故障趋势分析报告" >> "$REPORT_FILE" echo "生成时间: $(date '+%Y-%m-%d %H:%M:%S')" >> "$REPORT_FILE" echo "========================================" >> "$REPORT_FILE" echo "" >> "$REPORT_FILE" # 1. 最近7天统计 echo "【最近7天统计】" >> "$REPORT_FILE" echo "---------------------------" >> "$REPORT_FILE" for i in {0..6}; do DATE=$(date -d "-$i days" +%Y-%m-%d) COUNT=$(grep -c "$DATE" "$ALERT_LOG" 2>/dev/null || echo 0) echo "$DATE: $COUNT 条" >> "$REPORT_FILE" done echo "" >> "$REPORT_FILE" # 2. 故障类型分布 echo "【故障类型分布】" >> "$REPORT_FILE" echo "---------------------------" >> "$REPORT_FILE" CRITICAL=$(grep -c "CRITICAL" "$ALERT_LOG" 2>/dev/null || echo 0) ALERT=$(grep -c "ALERT" "$ALERT_LOG" 2>/dev/null || echo 0) AUTO=$(grep -c "AUTO" "$ALERT_LOG" 2>/dev/null || echo 0) TOTAL=$((CRITICAL + ALERT + AUTO)) echo "CRITICAL: $CRITICAL ($((CRITICAL * 100 / TOTAL))%)" >> "$REPORT_FILE" echo "ALERT: $ALERT ($((ALERT * 100 / TOTAL))%)" >> "$REPORT_FILE" echo "AUTO: $AUTO ($((AUTO * 100 / TOTAL))%)" >> "$REPORT_FILE" echo "" >> "$REPORT_FILE" # 3. 趋势判断 echo "【趋势分析】" >> "$REPORT_FILE" echo "---------------------------" >> "$REPORT_FILE" # 计算最近3天平均 RECENT_AVG=$(tail -3 "$REPORT_FILE" | grep "条" | awk '{sum+=$2} END {if (NR>0) print sum/NR; else print 0}') if [ -n "$RECENT_AVG" ]; then echo "最近3天平均: $RECENT_AVG 条/天" >> "$REPORT_FILE" fi # 趋势判断 LAST_DAY=$(tail -1 "$REPORT_FILE" | grep "条" | awk '{print $2}') PREV_DAY=$(tail -2 "$REPORT_FILE" | grep "条" | tail -1 | awk '{print $2}') if [ -n "$LAST_DAY" ] && [ -n "$PREV_DAY" ]; then DIFF=$((LAST_DAY - PREV_DAY)) if [ "$DIFF" -gt 0 ]; then echo "趋势: 📈 上升 ($DIFF 条)" >> "$REPORT_FILE" elif [ "$DIFF" -lt 0 ]; then echo "趋势: 📉 下降 ($((-DIFF)) 条)" >> "$REPORT_FILE" else echo "趋势: ➡️ 持平" >> "$REPORT_FILE" fi fi echo "" >> "$REPORT_FILE" # 4. 建议 echo "【建议】" >> "$REPORT_FILE" echo "---------------------------" >> "$REPORT_FILE" # 基于分析给出建议 if [ "$CRITICAL" -gt 100 ]; then echo "⚠️ CRITICAL 告警较多,建议检查系统稳定性" >> "$REPORT_FILE" fi if [ "$AUTO" -gt 500 ]; then echo "ℹ️ AUTO 告警较多,可能是自动恢复机制触发" >> "$REPORT_FILE" fi if [ "$LAST_DAY" -gt 100 ]; then echo "📊 今日告警较多,建议关注" >> "$REPORT_FILE" fi echo "" >> "$REPORT_FILE" echo "趋势分析完成: $REPORT_FILE"