feat(phase31): Log 異常摘要觸發點 — 告警後 NemoTron 發 log summary
Some checks failed
CD Pipeline / build-and-deploy (push) Failing after 2m44s
Some checks failed
CD Pipeline / build-and-deploy (push) Failing after 2m44s
_send_log_summary: 取 Pod log → deepseek-r1:14b 分析 → NemoTron 發到群組 觸發點: _push_decision_to_telegram 送完審批卡後異步執行 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -41,6 +41,41 @@ logger = structlog.get_logger(__name__)
|
||||
PLAYBOOK_SIMILARITY_THRESHOLD = 0.85 # 相似度 >= 85% 直接使用 Playbook
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# Phase 31 (ADR-067 2026-04-10): Log 異常摘要 — NemoTron deepseek-r1:14b
|
||||
# =============================================================================
|
||||
|
||||
async def _send_log_summary(incident: "Incident") -> None:
|
||||
"""
|
||||
非同步取得 Pod log 異常摘要,用 NemoTron bot 發到 SRE 群組
|
||||
觸發點:_push_decision_to_telegram 發完審批卡後
|
||||
"""
|
||||
try:
|
||||
target = incident.affected_services[0] if incident.affected_services else None
|
||||
if not target:
|
||||
return
|
||||
namespace = "awoooi-prod"
|
||||
if incident.signals:
|
||||
namespace = incident.signals[0].labels.get("namespace", "awoooi-prod")
|
||||
|
||||
from src.services.log_summary_service import get_log_summary_service
|
||||
svc = get_log_summary_service()
|
||||
summary = await svc.summarize_with_soft_timeout(pod_name=target, namespace=namespace)
|
||||
if not summary:
|
||||
return
|
||||
|
||||
from src.services.telegram_gateway import get_telegram_gateway
|
||||
tg = get_telegram_gateway()
|
||||
await tg.send_as_nemotron(
|
||||
f"📋 <b>Log 異常摘要</b> — <code>{target}</code>\n{summary}"
|
||||
)
|
||||
import structlog as _sl
|
||||
_sl.get_logger(__name__).info("log_summary_sent", target=target, incident_id=incident.incident_id)
|
||||
except Exception as e:
|
||||
import structlog as _sl
|
||||
_sl.get_logger(__name__).warning("log_summary_failed", error=str(e))
|
||||
|
||||
|
||||
# =============================================================================
|
||||
# Telegram 推送 (Phase 6.5: 決策就緒通知)
|
||||
# =============================================================================
|
||||
@@ -200,6 +235,10 @@ async def _push_decision_to_telegram(
|
||||
except Exception as _e:
|
||||
logger.warning("telegram_message_id_db_save_failed", incident_id=incident.incident_id, error=str(_e))
|
||||
|
||||
# Phase 31 (ADR-067 2026-04-10): Log 異常摘要 — NemoTron deepseek-r1:14b
|
||||
# 非同步執行,不阻塞主流程
|
||||
asyncio.create_task(_send_log_summary(incident))
|
||||
|
||||
# 🔴 發送成功後設置去重 key (TTL 10 分鐘)
|
||||
await redis.setex(dedup_key, 600, "1")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user