angularfire监控告警:Firebase应用异常实时通知方案
【免费下载链接】angularfire angular/angularfire: 是 Angular 的一个 Firebase 集成库,可以方便地在 Angular 应用中集成 Firebase 服务。适合对 Angular、Firebase 和想要实现 Angular 与 Firebase 集成的开发者。 项目地址: https://gitcode.***/gh_mirrors/an/angularfire
你是否还在为Angular应用线上异常难以察觉而烦恼?用户反馈延迟、错误堆积导致体验下降?本文将介绍如何利用AngularFire构建完整的监控告警体系,通过Firebase Performance Monitoring捕获性能异常,结合Cloud Messaging实现实时通知,让你在问题发生时第一时间响应。
监控告警体系架构
AngularFire与Firebase的集成提供了从异常捕获到通知分发的全链路能力。通过性能监控模块跟踪应用健康状态,使用云函数实现告警规则判断,最终通过消息推送将异常信息实时送达开发团队。
核心组件分工
- 性能监控:Performance Monitoring 负责前端性能指标采集与异常检测
- 消息推送:Cloud Messaging 处理告警通知的分发
- 云函数:Functions 实现告警规则判断与通知触发
- 数据存储:Firestore 存储告警历史与设备令牌
性能异常监控实现
1. 基础配置
首先通过Angular依赖注入配置性能监控模块,在app.config.ts中添加:
import { provideFirebaseApp, initializeApp } from '@angular/fire/app';
import { providePerformance, getPerformance } from '@angular/fire/performance';
export const appConfig: ApplicationConfig = {
providers: [
provideFirebaseApp(() => initializeApp({
apiKey: "YOUR_API_KEY",
authDomain: "YOUR_PROJECT_ID.firebaseapp.***",
projectId: "YOUR_PROJECT_ID"
})),
providePerformance(() => getPerformance()),
]
};
2. 自定义性能指标
在需要监控的组件中注入Performance服务,追踪关键业务流程:
import { ***ponent, inject } from '@angular/core';
import { Performance, trace } from '@angular/fire/performance';
@***ponent({ /* ... */ })
export class Checkout***ponent {
private performance = inject(Performance);
async ***pletePurchase() {
const purchaseTrace = trace(this.performance, 'checkout_process');
purchaseTrace.start();
try {
// 实际购买逻辑
await this.paymentService.processPayment();
purchaseTrace.putAttribute('su***ess', 'true');
} catch (error) {
purchaseTrace.putAttribute('su***ess', 'false');
purchaseTrace.putAttribute('error', error.message);
this.errorService.report(error); // 异常上报
} finally {
purchaseTrace.stop();
}
}
}
3. 异常捕获与上报
结合Angular的错误处理机制,全局捕获应用异常:
import { ErrorHandler, Injectable } from '@angular/core';
import { Performance } from '@angular/fire/performance';
@Injectable()
export class MonitoringErrorHandler implements ErrorHandler {
constructor(private performance: Performance) {}
handleError(error: any) {
// 记录错误到性能监控
const errorTrace = trace(this.performance, 'application_error');
errorTrace.start();
errorTrace.putAttribute('message', error.message);
errorTrace.putAttribute('stack', error.stack || 'No stack trace');
errorTrace.stop();
// 调用Firebase函数发送告警
this.functionsService.triggerAlert({
type: 'application_error',
message: error.message,
timestamp: new Date().toISOString()
});
}
}
实时通知系统搭建
1. 消息推送配置
首先创建消息服务 worker 文件src/assets/firebase-messaging-sw.js:
import { initializeApp } from "https://www.gstatic.***/firebasejs/9.22.0/firebase-app.js";
import { getMessaging } from "https://www.gstatic.***/firebasejs/9.22.0/firebase-messaging-sw.js";
const firebaseApp = initializeApp({
apiKey: "YOUR_API_KEY",
authDomain: "YOUR_PROJECT_ID.firebaseapp.***",
projectId: "YOUR_PROJECT_ID",
messagingSenderId: "YOUR_SENDER_ID",
appId: "YOUR_APP_ID"
});
const messaging = getMessaging(firebaseApp);
2. 设备令牌管理
实现FCM服务管理设备令牌,用于定向推送:
import { Injectable } from "@angular/core";
import { Messaging, getToken, onMessage } from "@angular/fire/messaging";
import { Firestore, doc, setDoc } from "@angular/fire/firestore";
@Injectable({ providedIn: "root" })
export class FcmService {
constructor(private messaging: Messaging, private firestore: Firestore) {
this.initToken();
}
async initToken() {
const permission = await Notification.requestPermission();
if (permission === "granted") {
const token = await getToken(this.messaging, {
vapidKey: "YOUR_VAPID_KEY",
serviceWorkerRegistration: await navigator.serviceWorker.register("/assets/firebase-messaging-sw.js")
});
// 存储令牌到Firestore
if (token) {
await setDoc(doc(this.firestore, "adminDevices", "developer"), {
token,
lastActive: new Date()
});
}
}
}
}
告警触发与分发
1. 云函数告警逻辑
在Firebase云函数中实现告警规则判断,当异常指标超过阈值时触发通知:
import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
admin.initializeApp();
export const checkPerformanceAlerts = functions.pubsub.schedule('every 5 minutes').onRun(async () => {
const traces = await admin.performance().listTraces({ pageSize: 100 });
for (const trace of traces) {
if (trace.name === 'checkout_process' && trace.attributes.su***ess === 'false') {
// 查询最近5分钟错误率
const errorRate = await calculateErrorRate(trace.name, 5);
if (errorRate > 0.05) { // 错误率超过5%触发告警
await sendAlert({
title: "结算流程异常",
body: `错误率${(errorRate*100).toFixed(2)}%,请立即处理`,
severity: "high"
});
}
}
}
});
2. 多渠道通知分发
实现通知分发函数,支持多设备类型:
async function sendAlert(alert: {title: string, body: string, severity: string}) {
// 获取所有管理员设备令牌
const devicesSnapshot = await admin.firestore().collection('adminDevices').get();
const tokens = devicesSnapshot.docs.map(doc => doc.data().token);
if (tokens.length === 0) return;
// 构建通知内容
const message = {
notification: { title: alert.title, body: alert.body },
tokens,
data: { severity: alert.severity, timestamp: new Date().toISOString() }
};
// 发送批量通知
await admin.messaging().sendEachForMulticast(message);
// 记录告警历史
await admin.firestore().collection('alerts').add({
...alert,
createdAt: new Date(),
status: "pending"
});
}
告警效果展示与优化
告警通知样式
Cloud Messaging支持自定义通知展示样式,在服务 worker 中添加:
self.addEventListener('notificationclick', (event) => {
event.notification.close();
event.waitUntil(
clients.openWindow('/admin/monitoring?alertId=' + event.notification.data.alertId)
);
});
告警规则优化
通过Firestore动态调整告警阈值,避免频繁告警:
| 指标类型 | 默认阈值 | 可调范围 | 适用场景 |
|---|---|---|---|
| API错误率 | 5% | 1%-20% | 接口调用异常 |
| 页面加载时间 | 3s | 1s-10s | 首屏渲染性能 |
| 内存使用量 | 80% | 50%-95% | 资源泄漏检测 |
告警规则配置界面
总结与扩展
通过AngularFire构建的监控告警系统,实现了从异常捕获、规则判断到实时通知的完整闭环。该方案具有以下优势:
- 低侵入性:基于Angular依赖注入,无需大规模修改现有代码
- 实时性:Cloud Messaging确保告警在秒级送达
- 可扩展性:支持自定义指标与多维度告警规则
- 成本优化:Firebase免费配额足以覆盖中小规模应用需求
后续可扩展方向:
- 集成Remote Config动态调整监控参数
- 添加Analytics用户行为关联分析
- 构建告警大盘可视化界面
完整实现代码可参考示例项目,更多技术细节请查阅官方文档。
【免费下载链接】angularfire angular/angularfire: 是 Angular 的一个 Firebase 集成库,可以方便地在 Angular 应用中集成 Firebase 服务。适合对 Angular、Firebase 和想要实现 Angular 与 Firebase 集成的开发者。 项目地址: https://gitcode.***/gh_mirrors/an/angularfire