84 lines
2.8 KiB
Bash
Executable File
84 lines
2.8 KiB
Bash
Executable File
#!/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"
|