@@ -117,7 +117,7 @@ export function AgentRuleDialog({ open, onOpenChange, editingRule, onSuccess }:
setRuleForm({ ...ruleForm, name: e.target.value })}
- placeholder={i18n.t('agent.agentruledialog.s5a0f7e3e')}
+ placeholder={i18n.t('例如:CPU 使用率告警')}
className="h-9 dg-input"
/>
@@ -154,7 +154,7 @@ export function AgentRuleDialog({ open, onOpenChange, editingRule, onSuccess }:
{ruleForm.metric !== 'offline' && (
-
+
{/* 趋势图 */}
diff --git a/frontend/src/components/agent/agentAlertHelper.tsx b/frontend/src/components/agent/agentAlertHelper.tsx
index 6f7a467..0c635aa 100644
--- a/frontend/src/components/agent/agentAlertHelper.tsx
+++ b/frontend/src/components/agent/agentAlertHelper.tsx
@@ -10,23 +10,23 @@ import i18n from '@/i18n';
// 主机监控指标(与后端 alert_engine 对齐)// Logan.Li
export const METRIC_OPTIONS = [
{ value: 'cpu', label: i18n.t('kubernetes.cluster.cpuUsage'), icon: Cpu },
- { value: 'cpu_iowait', label: i18n.t('agent.agentalerthelpe.sc1eec3e5'), icon: Cpu },
+ { value: 'cpu_iowait', label: i18n.t('入网带宽'), icon: Cpu },
{ value: 'mem', label: i18n.t('kubernetes.cluster.memoryUsage'), icon: MemoryStick },
- { value: 'mem_available', label: i18n.t('monitor.hostmonitortsx.sa23fcda0'), icon: MemoryStick },
- { value: 'swap', label: i18n.t('agent.agentalerthelpe.sa2f9101c'), icon: MemoryStick },
- { value: 'load1', label: i18n.t('agent.agentalerthelpe.sf23ce82f'), icon: Gauge },
+ { value: 'mem_available', label: i18n.t('可用内存(GB)'), icon: MemoryStick },
+ { value: 'swap', label: i18n.t('Swap 使用率'), icon: MemoryStick },
+ { value: 'load1', label: i18n.t('1分钟负载'), icon: Gauge },
{ value: 'disk', label: i18n.t('monitor.hostDisk'), icon: HardDrive },
- { value: 'disk_inode', label: i18n.t('agent.agentalerthelpe.sf7eadeca'), icon: HardDrive },
- { value: 'disk_io_util', label: i18n.t('agent.agentalerthelpe.s565a0e4d'), icon: HardDrive },
- { value: 'tcp_established', label: i18n.t('agent.agentalerthelpe.s6d9639e8'), icon: Network },
+ { value: 'disk_inode', label: i18n.t('Inode 使用率'), icon: HardDrive },
+ { value: 'disk_io_util', label: i18n.t('磁盘 IO 利用率'), icon: HardDrive },
+ { value: 'tcp_established', label: i18n.t('TCP 已建立'), icon: Network },
{ value: 'tcp_time_wait', label: 'TCP TIME_WAIT', icon: Network },
{ value: 'tcp_close_wait', label: 'TCP CLOSE_WAIT', icon: Network },
{ value: 'net_rx_bps', label: i18n.t('monitor.hostNetIn'), icon: Network },
{ value: 'net_tx_bps', label: i18n.t('monitor.hostNetOut'), icon: Network },
- { value: 'net_rx_errors', label: i18n.t('agent.agentalerthelpe.s8d73bfe3'), icon: Network },
+ { value: 'net_rx_errors', label: i18n.t('入网错误'), icon: Network },
{ value: 'fd', label: i18n.t('monitor.hostFileDescriptor'), icon: Activity },
- { value: 'offline', label: i18n.t('agent.agentalerthelpe.s8ed49aa6'), icon: WifiOff },
- { value: 'port_down', label: i18n.t('agent.agentalerthelpe.sf62ce662'), icon: Network },
+ { value: 'offline', label: i18n.t('主机离线'), icon: WifiOff },
+ { value: 'port_down', label: i18n.t('端口不通'), icon: Network },
{ value: 'health_probe', label: i18n.t('kubernetes.container.probes'), icon: Timer },
];
diff --git a/frontend/src/components/aiops/AgentCLIMessages.tsx b/frontend/src/components/aiops/AgentCLIMessages.tsx
index 937ba95..1c2c85e 100644
--- a/frontend/src/components/aiops/AgentCLIMessages.tsx
+++ b/frontend/src/components/aiops/AgentCLIMessages.tsx
@@ -253,7 +253,7 @@ export function MessageView({ item, inRoundGroup = false }: { item: ChatItem; in
return (
-
{item.content || i18n.t('aiops.agentclimessage.s1fd995b8')}
+
{item.content || i18n.t('发生错误')}
);
}
@@ -309,10 +309,10 @@ function ToolBlock({ item, inRoundGroup }: { item: ChatItem; inRoundGroup?: bool
{item.duration &&
{i18n.t('aiops.durationLabel', { duration: item.duration })}
}
{(item.toolName === 'analyze_output' || looksLikeMarkdown(item.output)) ? (
) : (
-
{item.output || i18n.t('aiops.agentclimessage.s216caee5')}
+
{item.output || i18n.t('(无输出)')}
)}
>
)}
diff --git a/frontend/src/components/aiops/analyzerHelpers.ts b/frontend/src/components/aiops/analyzerHelpers.ts
index 1d21d43..87989c5 100644
--- a/frontend/src/components/aiops/analyzerHelpers.ts
+++ b/frontend/src/components/aiops/analyzerHelpers.ts
@@ -49,11 +49,11 @@ export function generateAIAnalysis(alert: AlertItem): AIAnalysis {
: `CPU 使用率偏高,可能导致部分请求处理变慢,建议及时排查避免进一步恶化。`,
recommendations: [
`登录 ${target} 执行 top/htop 定位高 CPU 进程`,
- i18n.t('aiops.analyzerhelpers.s63b2d4fb'),
+ i18n.t('检查是否有异常定时任务或批处理任务在运行'),
`考虑临时扩容或将部分流量调度到其他节点`,
- i18n.t('aiops.analyzerhelpers.sc8ee5079'),
+ i18n.t('检查是否有异常定时任务或批处理任务在运行'),
],
- autoFixScript: `#!/bin/bash\n# CPU 高负载诊断脚本 - ${target}\necho "${i18n.t('aiops.analyzerhelpers.sa0b9d055')}"\nps aux --sort=-%cpu | head -11\necho ""\necho "${i18n.t('aiops.analyzerhelpers.sc4e238d7')}"\nuptime\necho ""\necho "${i18n.t('aiops.analyzerhelpers.sfaca56f5')}"\nPID=$(ps aux --sort=-%cpu | sed -n '2p' | awk '{print $2}')\nif [ -n "$PID" ]; then\n echo "${i18n.t('aiops.analyzerhelpers.s303a9855')}"\n cat /proc/$PID/cmdline | tr '\\0' ' '\n echo ""\nfi\n`,
+ autoFixScript: `#!/bin/bash\n# CPU 高负载诊断脚本 - ${target}\necho "${i18n.t('最高 CPU 进程: PID=$PID')}"\nps aux --sort=-%cpu | head -11\necho ""\necho "${i18n.t('aiops.analyzerhelpers.sc4e238d7')}"\nuptime\necho ""\necho "${i18n.t('aiops.analyzerhelpers.sfaca56f5')}"\nPID=$(ps aux --sort=-%cpu | sed -n '2p' | awk '{print $2}')\nif [ -n "$PID" ]; then\n echo "${i18n.t('aiops.analyzerhelpers.s303a9855')}"\n cat /proc/$PID/cmdline | tr '\\0' ' '\n echo ""\nfi\n`,
similarCases: 0,
confidence: 0,
};
@@ -68,9 +68,9 @@ export function generateAIAnalysis(alert: AlertItem): AIAnalysis {
: `内存持续增长,长期可能导致 OOM,建议尽快排查内存使用情况。`,
recommendations: [
`检查 ${target} 上的内存占用最高的进程`,
- i18n.t('aiops.analyzerhelpers.s3166ba9e'),
- i18n.t('aiops.analyzerhelpers.sdc67cc47'),
- i18n.t('aiops.analyzerhelpers.s20eb7092'),
+ i18n.t('检查是否有异常定时任务或批处理任务在运行'),
+ i18n.t('检查是否有异常定时任务或批处理任务在运行'),
+ i18n.t('检查是否有异常定时任务或批处理任务在运行'),
],
similarCases: 0,
confidence: 0,
@@ -86,9 +86,9 @@ export function generateAIAnalysis(alert: AlertItem): AIAnalysis {
: `磁盘空间告警,如不及时清理可能导致服务异常。`,
recommendations: [
`清理 ${target} 上 30 天前的日志文件`,
- i18n.t('aiops.analyzerhelpers.s187f6268'),
- i18n.t('aiops.analyzerhelpers.sb9cbe0b9'),
- i18n.t('aiops.analyzerhelpers.s4438245e'),
+ i18n.t('检查是否有异常定时任务或批处理任务在运行'),
+ i18n.t('检查是否有异常定时任务或批处理任务在运行'),
+ i18n.t('检查是否有异常定时任务或批处理任务在运行'),
],
autoFixScript: `#!/bin/bash\n# 磁盘清理脚本 - ${target}\necho "${i18n.t('aiops.analyzerhelpers.s5b91c16b')}"\ndf -h /\necho ""\necho "${i18n.t('aiops.analyzerhelpers.s3b1993da')}"\nfind /var/log -name "*.log" -mtime +30 -delete 2>/dev/null\nfind /var/log -name "*.gz" -mtime +30 -delete 2>/dev/null\necho ""\necho "${i18n.t('aiops.analyzerhelpers.sb513e117')}"\njournalctl --vacuum-time=7d 2>/dev/null\necho ""\necho "${i18n.t('aiops.analyzerhelpers.s4c139c9f')}"\ndf -h /\n`,
similarCases: 0,
@@ -105,9 +105,9 @@ export function generateAIAnalysis(alert: AlertItem): AIAnalysis {
: `网络延迟偏高,可能影响用户体验,建议排查网络链路。`,
recommendations: [
`检查 ${target} 的网络连接和带宽使用情况`,
- i18n.t('aiops.analyzerhelpers.s2dcf7289'),
- i18n.t('aiops.analyzerhelpers.sb240d756'),
- i18n.t('aiops.analyzerhelpers.s1e860afd'),
+ i18n.t('检查是否有异常定时任务或批处理任务在运行'),
+ i18n.t('检查是否有异常定时任务或批处理任务在运行'),
+ i18n.t('检查是否有异常定时任务或批处理任务在运行'),
],
similarCases: 0,
confidence: 0,
@@ -123,9 +123,9 @@ export function generateAIAnalysis(alert: AlertItem): AIAnalysis {
: `服务可用性下降,部分功能可能受影响。`,
recommendations: [
`立即检查 ${target} 的服务状态: systemctl status
`,
- i18n.t('aiops.analyzerhelpers.sa9e9dc2f'),
- i18n.t('aiops.analyzerhelpers.s902739be'),
- i18n.t('aiops.analyzerhelpers.sdef735d5'),
+ i18n.t('检查是否有异常定时任务或批处理任务在运行'),
+ i18n.t('检查是否有异常定时任务或批处理任务在运行'),
+ i18n.t('检查是否有异常定时任务或批处理任务在运行'),
],
autoFixScript: `#!/bin/bash\n# 服务恢复脚本 - ${target}\necho "${i18n.t('aiops.analyzerhelpers.se59337b9')}"\nsystemctl list-units --state=failed\necho ""\necho "${i18n.t('aiops.analyzerhelpers.scdd631f0')}"\nss -tlnp | grep -E ':(80|443|8080|3306|6379|9090)'\necho ""\necho "${i18n.t('aiops.analyzerhelpers.sad3e7bba')}"\nsystemctl reset-failed\n`,
similarCases: 0,
@@ -141,9 +141,9 @@ export function generateAIAnalysis(alert: AlertItem): AIAnalysis {
: `该告警需要关注,持续恶化可能影响系统稳定性。`,
recommendations: [
`查看 ${target} 的监控仪表盘,确认指标趋势`,
- i18n.t('aiops.analyzerhelpers.s970501e5'),
- i18n.t('aiops.analyzerhelpers.s4a3f985d'),
- i18n.t('aiops.analyzerhelpers.s10441f9f'),
+ i18n.t('检查对应时间段的系统日志和应用日志'),
+ i18n.t('检查对应时间段的系统日志和应用日志'),
+ i18n.t('检查对应时间段的系统日志和应用日志'),
],
similarCases: 0,
confidence: 0,
@@ -173,10 +173,10 @@ export function mapAlertEvent(event: JsonData): AlertItem {
return {
id: String(event.id),
- name: event.rule_name || event.rule?.name || i18n.t('aiops.analyzerhelpers.sd7a5c3d9'),
+ name: event.rule_name || event.rule?.name || i18n.t('未知告警'),
severity: event.severity === 'critical' ? 'critical' : event.severity === 'warning' ? 'warning' : 'info',
status: event.status === 'firing' ? 'active' : 'resolved',
- source: event.target || i18n.t('aiops.analyzerhelpers.s1b9b6c32'),
+ source: event.target || i18n.t('未知目标'),
metric,
threshold,
currentValue,
diff --git a/frontend/src/components/aiops/capacity-predict.ts b/frontend/src/components/aiops/capacity-predict.ts
index 3169bf8..039b505 100644
--- a/frontend/src/components/aiops/capacity-predict.ts
+++ b/frontend/src/components/aiops/capacity-predict.ts
@@ -59,22 +59,22 @@ export function capacityRecommendation(metricKey: string, days: number): string
const level = days <= 7 ? 'urgent' : days <= 14 ? 'warning' : 'normal';
const recs: Record> = {
urgent: {
- cpu: i18n.t('aiops.predictutilsts.s4d0bd643'),
- memory: i18n.t('aiops.predictutilsts.sb4593f3a'),
- disk: i18n.t('aiops.predictutilsts.s6c25383f'),
+ cpu: i18n.t('CPU增长趋势明显,建议尽快扩容计算资源或优化高负载进程'),
+ memory: i18n.t('内存增长趋势明显,建议增加内存或排查内存泄漏'),
+ disk: i18n.t('磁盘空间即将耗尽,建议立即扩容或清理历史数据与日志'),
},
warning: {
- cpu: i18n.t('aiops.predictutilsts.s8ea826f4'),
- memory: i18n.t('aiops.predictutilsts.sb08bd5fc'),
- disk: i18n.t('aiops.predictutilsts.s4cdda5dc'),
+ cpu: i18n.t('CPU增长趋势明显,建议尽快扩容计算资源或优化高负载进程'),
+ memory: i18n.t('内存增长趋势明显,建议增加内存或排查内存泄漏'),
+ disk: i18n.t('磁盘空间即将耗尽,建议立即扩容或清理历史数据与日志'),
},
normal: {
- cpu: i18n.t('aiops.predictutilsts.sfa295c44'),
- memory: i18n.t('aiops.predictutilsts.s7156a4c0'),
- disk: i18n.t('aiops.predictutilsts.s0073f3a3'),
+ cpu: i18n.t('CPU增长趋势明显,建议尽快扩容计算资源或优化高负载进程'),
+ memory: i18n.t('内存增长趋势明显,建议增加内存或排查内存泄漏'),
+ disk: i18n.t('磁盘空间即将耗尽,建议立即扩容或清理历史数据与日志'),
},
};
- return recs[level]?.[metricKey] || i18n.t('aiops.predictutilsts.sfeb368e6');
+ return recs[level]?.[metricKey] || i18n.t('建议持续监控资源使用趋势');
}
// ============ 综合预测推算 ============
@@ -87,7 +87,7 @@ export function capacityRecommendation(metricKey: string, days: number): string
export function computePredictions(input: ComputePredictionsInput): ComputedPredictions {
const { rawMetrics, serverStats, selectedTimeRange } = input;
const horizonHours = TIME_RANGE_HOURS[selectedTimeRange] || 24;
- const timeRangeLabel = TIME_RANGE_LABELS[selectedTimeRange] || i18n.t('aiops.predictutilsts.sfc78646e');
+ const timeRangeLabel = TIME_RANGE_LABELS[selectedTimeRange] || i18n.t('24小时后');
// ---- 指标预测 ----
const predictions: PredictionMetric[] = METRIC_DEFS.map((def) => {
@@ -177,18 +177,18 @@ export function trendColorClass(trend: string): string {
export function buildCapacityInsightPrompt(forecasts: CapacityForecast[]): string {
if (forecasts.length === 0) return '';
const lines = forecasts.map((f) => {
- const risk = f.daysUntilThreshold >= 999 ? i18n.t('aiops.predictutilsts.s179fd5a9') : i18n.t('aiops.predictutilsts.daysUntilThreshold', { days: f.daysUntilThreshold });
+ const risk = f.daysUntilThreshold >= 999 ? i18n.t('增长平缓,暂无触顶风险') : i18n.t('aiops.predictutilsts.daysUntilThreshold', { days: f.daysUntilThreshold });
return `- ${f.resource}:当前 ${f.currentUsage}% → 7天后预测 ${f.predictedUsage}%(阈值 ${f.threshold}%),${risk}`;
});
return [
- i18n.t('aiops.predictutilsts.s3b46e5a0'),
+ i18n.t('你是 AIOps 容量规划专家。基于以下服务器资源容量预测数据,给出综合风险评估与可执行的运维建议:'),
'',
- i18n.t('aiops.predictutilsts.s586bac5d'),
+ i18n.t('你是 AIOps 容量规划专家。基于以下服务器资源容量预测数据,给出综合风险评估与可执行的运维建议:'),
...lines,
'',
- i18n.t('aiops.predictutilsts.sdf6ebee3'),
- i18n.t('aiops.predictutilsts.s534b6893'),
- i18n.t('aiops.predictutilsts.saf173e7a'),
- i18n.t('aiops.predictutilsts.s4ed1d035'),
+ i18n.t('你是 AIOps 容量规划专家。基于以下服务器资源容量预测数据,给出综合风险评估与可执行的运维建议:'),
+ i18n.t('你是 AIOps 容量规划专家。基于以下服务器资源容量预测数据,给出综合风险评估与可执行的运维建议:'),
+ i18n.t('你是 AIOps 容量规划专家。基于以下服务器资源容量预测数据,给出综合风险评估与可执行的运维建议:'),
+ i18n.t('你是 AIOps 容量规划专家。基于以下服务器资源容量预测数据,给出综合风险评估与可执行的运维建议:'),
].join('\n');
}
diff --git a/frontend/src/components/aiops/cost-predict.ts b/frontend/src/components/aiops/cost-predict.ts
index 23c9a2f..a5a052e 100644
--- a/frontend/src/components/aiops/cost-predict.ts
+++ b/frontend/src/components/aiops/cost-predict.ts
@@ -83,15 +83,15 @@ function costTrendFromSlope(slope: number): 'up' | 'down' | 'stable' {
/** 成本优化建议 */
export function costRecommendation(trend: 'up' | 'down' | 'stable', ratio: number): string {
if (trend === 'up' && ratio >= 0.85) {
- return i18n.t('aiops.predictutilsts.sa7d4e3c1');
+ return i18n.t('排查内存泄漏,优化进程内存配置,考虑增加节点');
}
if (trend === 'up') {
- return i18n.t('aiops.predictutilsts.sb3f5a2d8');
+ return i18n.t('排查内存泄漏,优化进程内存配置,考虑增加节点');
}
if (trend === 'down') {
- return i18n.t('aiops.predictutilsts.sc1a9b4e7');
+ return i18n.t('排查内存泄漏,优化进程内存配置,考虑增加节点');
}
- return i18n.t('aiops.predictutilsts.sd8c6f2a3');
+ return i18n.t('你是 AIOps 容量规划专家。基于以下服务器资源容量预测数据,给出综合风险评估与可执行的运维建议:');
}
/** 预算风险建议 */
@@ -256,7 +256,7 @@ export function computeCostPredictions(input: ComputeCostPredictionsInput): Comp
const allRatio =
summary.predictedMonthEnd > 0 ? summary.monthCost / summary.predictedMonthEnd : 0;
dimensionForecasts.push({
- dimension: i18n.t('aiops.predictutilsts.sa1b2c3d4'),
+ dimension: i18n.t('清理历史数据和日志,实施数据归档策略,扩容磁盘'),
currentMonth: summary.monthCost,
predictedMonthEnd: summary.predictedMonthEnd,
dailyAvg: summary.dailyAvg,
@@ -302,7 +302,7 @@ export function computeCostPredictions(input: ComputeCostPredictionsInput): Comp
const metric = (rule.metric === 'daily' ? 'daily' : 'monthly') as 'daily' | 'monthly';
const ruleProvider = String(rule.provider || '');
- const providerLabel = ruleProvider ? PROVIDER_LABELS[ruleProvider] || ruleProvider : i18n.t('aiops.predictutilsts.sb2c3d4e5');
+ const providerLabel = ruleProvider ? PROVIDER_LABELS[ruleProvider] || ruleProvider : i18n.t('24小时后');
let current = 0;
let predicted = 0;
@@ -339,7 +339,7 @@ export function computeCostPredictions(input: ComputeCostPredictionsInput): Comp
if (current >= threshold) probability += 25;
probability = Math.max(5, Math.min(92, probability));
- let timeframe = metric === 'daily' ? i18n.t('aiops.predictutilsts.sc3d4e5f6') : i18n.t('aiops.predictutilsts.sd4e5f6g7');
+ let timeframe = metric === 'daily' ? i18n.t('未来24小时') : i18n.t('aiops.predictutilsts.sd4e5f6g7');
if (slope > 0.01 && threshold > current) {
const days = (threshold - current) / slope;
if (days < 1) timeframe = metric === 'daily' ? i18n.t('aiops.predictutilsts.se5f6g7h8') : i18n.t('aiops.predictutilsts.sf6g7h8i9');
diff --git a/frontend/src/components/aiops/predict-types.ts b/frontend/src/components/aiops/predict-types.ts
index 96cf34f..dc2dc17 100644
--- a/frontend/src/components/aiops/predict-types.ts
+++ b/frontend/src/components/aiops/predict-types.ts
@@ -120,16 +120,16 @@ export interface ComputeCostPredictionsInput {
/** 指标定义:后端 metric name → 展示标签 / 告警表达式前缀 / 阈值 */
export const METRIC_DEFS = [
- { key: 'cpu', label: i18n.t('aiops.predictutilsts.s7054bc34'), exprKey: 'cpu_usage', threshold: 85 },
- { key: 'memory', label: i18n.t('aiops.predictutilsts.s82c0d1b0'), exprKey: 'memory_usage', threshold: 85 },
- { key: 'disk', label: i18n.t('aiops.predictutilsts.s4e2d8f91'), exprKey: 'disk_usage', threshold: 90 },
+ { key: 'cpu', label: i18n.t('CPU使用率'), exprKey: 'cpu_usage', threshold: 85 },
+ { key: 'memory', label: i18n.t('内存使用率'), exprKey: 'memory_usage', threshold: 85 },
+ { key: 'disk', label: i18n.t('磁盘使用率'), exprKey: 'disk_usage', threshold: 90 },
] as const;
export const TIME_RANGE_LABELS: Record = {
- '1h': i18n.t('aiops.predictutilsts.s75719bb8'),
- '24h': i18n.t('aiops.predictutilsts.sfc78646e'),
- '7d': i18n.t('aiops.predictutilsts.s5b5a820c'),
- '30d': i18n.t('aiops.predictutilsts.s933ab0a6'),
+ '1h': i18n.t('1小时后'),
+ '24h': i18n.t('24小时后'),
+ '7d': i18n.t('7天后'),
+ '30d': i18n.t('30天后'),
};
export const TIME_RANGE_HOURS: Record = {
diff --git a/frontend/src/components/cloud/BillingRecordDialog.tsx b/frontend/src/components/cloud/BillingRecordDialog.tsx
index 4a0ecaa..f9279ac 100644
--- a/frontend/src/components/cloud/BillingRecordDialog.tsx
+++ b/frontend/src/components/cloud/BillingRecordDialog.tsx
@@ -66,7 +66,7 @@ export function BillingRecordDialog({ open, onOpenChange, editingRecord, onSucce
const handleSave = async () => {
if (!form.provider || !form.billing_date || !form.cost) {
- toast.error(i18n.t('cloud.billingrecorddi.sd8a97c17'));
+ toast.error(i18n.t('请填写必填字段'));
return;
}
setSubmitting(true);
@@ -92,7 +92,7 @@ export function BillingRecordDialog({ open, onOpenChange, editingRecord, onSucce