refactor(observable): 拆分监控告警为独立页面
- 侧边栏"监控/日志/告警"拆分为"监控"和"告警"两个导航项 - Monitor.vue 移除日志相关内容,保留 VictoriaMetrics 和 Zabbix 面板 - 新增 Alert.vue 告警页面,展示当前告警、告警通道、告警记录 - 路由新增 /alert 路径,meta.title 设为"告警"
This commit is contained in:
@@ -30,7 +30,10 @@
|
|||||||
<div class="nav-group">
|
<div class="nav-group">
|
||||||
<div class="nav-label">可观测性</div>
|
<div class="nav-label">可观测性</div>
|
||||||
<router-link to="/monitor" class="nav-item" active-class="active">
|
<router-link to="/monitor" class="nav-item" active-class="active">
|
||||||
<span class="ic">◎</span>监控 / 日志 / 告警
|
<span class="ic">◎</span>监控
|
||||||
|
</router-link>
|
||||||
|
<router-link to="/alert" class="nav-item" active-class="active">
|
||||||
|
<span class="ic">⚡</span>告警
|
||||||
</router-link>
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-group">
|
<div class="nav-group">
|
||||||
|
|||||||
@@ -110,7 +110,13 @@ const router = createRouter({
|
|||||||
path: 'monitor',
|
path: 'monitor',
|
||||||
name: 'Monitor',
|
name: 'Monitor',
|
||||||
component: () => import('@/views/monitor/Monitor.vue'),
|
component: () => import('@/views/monitor/Monitor.vue'),
|
||||||
meta: { title: '监控 / 日志 / 告警' },
|
meta: { title: '监控' },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'alert',
|
||||||
|
name: 'Alert',
|
||||||
|
component: () => import('@/views/monitor/Alert.vue'),
|
||||||
|
meta: { title: '告警' },
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -0,0 +1,85 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div class="page-head">
|
||||||
|
<div>
|
||||||
|
<h1>告警</h1>
|
||||||
|
<p>夜莺(Nightingale)统一告警引擎 · qpass 推送</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="cols-2-equal">
|
||||||
|
<div class="panel">
|
||||||
|
<div class="panel-head">
|
||||||
|
<h3>当前告警</h3>
|
||||||
|
<span class="meta">实时</span>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<table>
|
||||||
|
<tbody>
|
||||||
|
<tr class="tr-hover">
|
||||||
|
<td>硬件告警</td>
|
||||||
|
<td class="status-text warn">● 2 条</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="tr-hover">
|
||||||
|
<td>业务告警</td>
|
||||||
|
<td class="status-text ok">● 0 条</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="tr-hover">
|
||||||
|
<td>今日已推送</td>
|
||||||
|
<td class="mono strong">5</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel">
|
||||||
|
<div class="panel-head">
|
||||||
|
<h3>告警通道</h3>
|
||||||
|
<span class="meta">qpass</span>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<table>
|
||||||
|
<tbody>
|
||||||
|
<tr class="tr-hover">
|
||||||
|
<td>推送状态</td>
|
||||||
|
<td class="status-text ok">● 正常</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="tr-hover">
|
||||||
|
<td>通道类型</td>
|
||||||
|
<td>企业微信 · 钉钉 · 短信</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="panel">
|
||||||
|
<div class="panel-head">
|
||||||
|
<h3>告警记录</h3>
|
||||||
|
<span class="meta">近 24h</span>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body log-stream">
|
||||||
|
<div v-for="(alert, index) in alerts" :key="index" :class="['task-log-line', alert.class]">
|
||||||
|
<span class="t">{{ alert.time }}</span>{{ alert.message }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
|
const alerts = ref([
|
||||||
|
{ time: '07:38:55', message: '[Zabbix] yzh-las-014 风扇转速低于阈值(FAN_6: 1920 RPM)', class: '' },
|
||||||
|
{ time: '07:38:55', message: '[Zabbix] yzh-las-014 风扇转速低于阈值(FAN_5: 1880 RPM)', class: '' },
|
||||||
|
{ time: '07:30:00', message: '[qpass] 告警已合并推送:1 条硬件告警 + 0 条业务告警', class: '' },
|
||||||
|
{ time: '06:15:22', message: '[Nightingale] sg-las-007 CPU 使用率恢复(当前 42%)', class: 'ok' },
|
||||||
|
{ time: '05:48:10', message: '[Nightingale] sg-las-007 CPU 使用率超过 90% 持续 5 分钟', class: '' },
|
||||||
|
])
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
</style>
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
<div>
|
<div>
|
||||||
<div class="page-head">
|
<div class="page-head">
|
||||||
<div>
|
<div>
|
||||||
<h1>监控 / 日志 / 告警</h1>
|
<h1>监控</h1>
|
||||||
<p>VictoriaMetrics 指标 · Zabbix 硬件状态 · ELK 日志中心 · 夜莺(Nightingale)统一告警引擎对接 qpass</p>
|
<p>VictoriaMetrics 指标 · Zabbix 硬件状态</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -67,32 +67,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="panel">
|
|
||||||
<div class="panel-head">
|
|
||||||
<h3>日志 + 统一告警</h3>
|
|
||||||
<span class="meta">Filebeat → Kafka → ES → Kibana · VM + Zabbix → qpass</span>
|
|
||||||
</div>
|
|
||||||
<div class="panel-body log-stream">
|
|
||||||
<div v-for="(log, index) in logs" :key="index" :class="['task-log-line', log.class]">
|
|
||||||
<span class="t">{{ log.time }}</span>{{ log.message }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue'
|
|
||||||
|
|
||||||
const logs = ref([
|
|
||||||
{ time: '07:39:10', message: 'CMDB 采集器同步完成:xs291 · 华东-杭州下沙机房', class: '' },
|
|
||||||
{ time: '07:38:55', message: '[Zabbix] 告警:yzh-las-014 风扇转速低于阈值(FAN_6: 1920 RPM)', class: '' },
|
|
||||||
{ time: '07:38:02', message: '[VictoriaMetrics] 七机房抓取任务全部正常', class: 'ok' },
|
|
||||||
{ time: '07:35:41', message: '[ELK] sg-las-007 应用日志接入 Kafka topic:las-sg-app', class: '' },
|
|
||||||
{ time: '07:30:00', message: '[qpass] 告警已合并推送:1 条硬件告警 + 0 条业务告警', class: '' },
|
|
||||||
])
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
/* .page-head, .cols-2-equal, .panel, table, .status-text, .log-stream, .task-log-line 已在 global.css 中定义 */
|
/* .page-head, .cols-2-equal, .panel, table, .status-text 已在 global.css 中定义 */
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user