监控与告警 #
一、监控概述 #
1.1 监控指标 #
text
关键监控指标:
├── 请求量
│ ├── 读请求数
│ └── 写请求数
├── 延迟
│ ├── 查询延迟
│ └── 连接延迟
├── 错误率
│ ├── 错误数量
│ └── 错误类型
├── 存储
│ ├── 数据大小
│ └── 索引大小
└── 并发
├── 活跃连接
└── 并发查询
1.2 监控工具 #
text
监控工具:
├── Fauna Dashboard
├── 自定义监控
├── 日志分析
└── 第三方集成
二、Dashboard监控 #
2.1 Dashboard功能 #
text
Dashboard提供:
├── 实时指标
├── 历史数据
├── 图表展示
├── 数据库概览
└── 成本分析
2.2 访问Dashboard #
text
访问步骤:
├── 1. 登录Fauna账户
├── 2. 选择数据库
├── 3. 点击"Metrics"选项卡
└── 4. 查看监控数据
2.3 关键指标解读 #
text
指标说明:
├── Read Ops
│ └── 读取操作次数
├── Write Ops
│ └── 写入操作次数
├── Storage
│ └── 存储使用量
├── Latency
│ └── 查询延迟
└── Errors
└── 错误数量
三、自定义监控 #
3.1 创建监控集合 #
javascript
// 创建监控数据集合
CreateCollection({
name: "monitoring_metrics",
history_days: 7
})
// 创建索引
CreateIndex({
name: "metrics_by_type_time",
source: Collection("monitoring_metrics"),
terms: [
{ field: ["data", "type"] }
],
values: [
{ field: ["data", "timestamp"], order: "desc" },
{ field: ["ref"] }
]
})
3.2 记录性能指标 #
javascript
// 创建性能记录函数
CreateFunction({
name: "record_metric",
body: Query(
Lambda(["type", "value", "metadata"],
Create(Collection("monitoring_metrics"), {
data: {
type: Var("type"),
value: Var("value"),
metadata: Var("metadata"),
timestamp: Now()
}
})
)
)
})
// 使用示例
Call(Function("record_metric"), [
"query_latency",
150,
{ query: "users_by_email", success: true }
])
3.3 查询监控数据 #
javascript
// 获取最近的监控数据
Paginate(
Match(Index("metrics_by_type_time"), "query_latency"),
{ size: 100 }
)
// 计算平均延迟
Let(
{
metrics: Map(
Paginate(
Match(Index("metrics_by_type_time"), "query_latency"),
{ size: 100 }
),
Lambda(["timestamp", "ref"],
Select(["data", "value"], Get(Var("ref")))
)
)
},
Divide(
Reduce(
Var("metrics"),
Lambda(["acc", "val"], Add(Var("acc"), Var("val"))),
0
),
Count(Var("metrics"))
)
)
四、日志管理 #
4.1 创建日志集合 #
javascript
// 创建日志集合
CreateCollection({
name: "application_logs",
history_days: 30
})
// 创建日志索引
CreateIndex({
name: "logs_by_level_time",
source: Collection("application_logs"),
terms: [
{ field: ["data", "level"] }
],
values: [
{ field: ["data", "timestamp"], order: "desc" },
{ field: ["ref"] }
]
})
4.2 日志记录函数 #
javascript
// 创建日志函数
CreateFunction({
name: "log",
body: Query(
Lambda(["level", "message", "context"],
Create(Collection("application_logs"), {
data: {
level: Var("level"),
message: Var("message"),
context: Var("context"),
timestamp: Now()
}
})
)
)
})
// 使用示例
Call(Function("log"), [
"error",
"Query failed",
{
query: "users_by_email",
error: "Timeout",
duration: 5000
}
])
4.3 日志查询 #
javascript
// 查询错误日志
Map(
Paginate(
Match(Index("logs_by_level_time"), "error"),
{ size: 50 }
),
Lambda(["timestamp", "ref"], Get(Var("ref")))
)
// 按时间范围查询
Filter(
Paginate(Documents(Collection("application_logs"))),
Lambda("ref",
Let(
{ log: Get(Var("ref")) },
And(
GTE(Select(["data", "timestamp"], Var("log")), Time("2024-01-01T00:00:00Z")),
LTE(Select(["data", "timestamp"], Var("log")), Time("2024-01-31T23:59:59Z"))
)
)
)
)
五、告警配置 #
5.1 创建告警规则 #
javascript
// 创建告警规则集合
CreateCollection({
name: "alert_rules"
})
// 创建告警规则
Create(Collection("alert_rules"), {
data: {
name: "High Error Rate",
metric: "error_rate",
threshold: 5,
operator: "gt",
period: 300, // 5分钟
enabled: true,
actions: ["email", "webhook"]
}
})
5.2 告警检查函数 #
javascript
// 创建告警检查函数
CreateFunction({
name: "check_alerts",
body: Query(
Lambda([],
Let(
{
rules: Paginate(Documents(Collection("alert_rules"))),
results: Map(
Var("rules"),
Lambda("ruleRef",
Let(
{
rule: Get(Var("ruleRef")),
metric: Select(["data", "metric"], Var("rule")),
threshold: Select(["data", "threshold"], Var("rule")),
currentValue: Call(
Function("get_current_metric"),
Var("metric")
)
},
If(
GT(Var("currentValue"), Var("threshold")),
{
rule: Var("rule"),
triggered: true,
currentValue: Var("currentValue")
},
{
rule: Var("rule"),
triggered: false,
currentValue: Var("currentValue")
}
)
)
)
)
},
Filter(
Var("results"),
Lambda("result", Select("triggered", Var("result")))
)
)
)
)
})
5.3 告警通知 #
javascript
// 创建告警通知记录
Create(Collection("alert_notifications"), {
data: {
ruleId: "rule_001",
metric: "error_rate",
value: 8.5,
threshold: 5,
timestamp: Now(),
status: "sent"
}
})
六、健康检查 #
6.1 数据库健康检查 #
javascript
// 创建健康检查函数
CreateFunction({
name: "health_check",
body: Query(
Lambda([],
Let(
{
dbStatus: Now(),
collections: Count(Paginate(Collections())),
indexes: Count(Paginate(Indexes())),
functions: Count(Paginate(Functions()))
},
{
status: "healthy",
timestamp: Var("dbStatus"),
stats: {
collections: Var("collections"),
indexes: Var("indexes"),
functions: Var("functions")
}
}
)
)
)
})
6.2 连接检查 #
javascript
// 检查连接状态
Let(
{
startTime: Now(),
result: Paginate(Documents(Collection("users")), { size: 1 }),
endTime: Now(),
latency: TimeDiff(Var("startTime"), Var("endTime"), "milliseconds")
},
{
connected: true,
latency: Var("latency")
}
)
七、性能报告 #
7.1 生成性能报告 #
javascript
// 创建报告生成函数
CreateFunction({
name: "generate_performance_report",
body: Query(
Lambda(["startDate", "endDate"],
Let(
{
// 查询统计
queryMetrics: Map(
Paginate(
Range(
Match(Index("metrics_by_type_time"), "query_latency"),
[Var("startDate")],
[Var("endDate")]
)
),
Lambda(["timestamp", "ref"],
Select(["data", "value"], Get(Var("ref")))
)
),
// 错误统计
errorCount: Count(
Filter(
Paginate(
Range(
Match(Index("logs_by_level_time"), "error"),
[Var("startDate")],
[Var("endDate")]
)
),
Lambda(["timestamp", "ref"], true)
)
)
},
{
period: {
start: Var("startDate"),
end: Var("endDate")
},
queries: {
total: Count(Var("queryMetrics")),
avgLatency: If(
GT(Count(Var("queryMetrics")), 0),
Divide(
Reduce(
Var("queryMetrics"),
Lambda(["acc", "val"], Add(Var("acc"), Var("val"))),
0
),
Count(Var("queryMetrics"))
),
0
)
},
errors: {
total: Var("errorCount")
}
}
)
)
)
})
7.2 定期报告 #
javascript
// 创建报告记录
Create(Collection("performance_reports"), {
data: {
type: "daily",
period: {
start: Time("2024-01-01T00:00:00Z"),
end: Time("2024-01-01T23:59:59Z")
},
metrics: {
totalQueries: 10000,
avgLatency: 150,
errorRate: 0.5
},
generatedAt: Now()
}
})
八、最佳实践 #
8.1 监控策略 #
text
监控建议:
├── 监控关键指标
├── 设置合理阈值
├── 建立基线数据
├── 定期审查告警
└── 保留历史数据
8.2 告警策略 #
text
告警建议:
├── 避免告警疲劳
├── 设置优先级
├── 分级通知
├── 记录告警历史
└── 定期优化规则
8.3 日志策略 #
text
日志建议:
├── 结构化日志
├── 合理日志级别
├── 定期清理
├── 敏感信息脱敏
└── 集中存储
九、总结 #
监控与告警要点:
| 方面 | 说明 |
|---|---|
| Dashboard | 官方监控面板 |
| 自定义监控 | 应用层监控 |
| 日志管理 | 日志收集分析 |
| 告警配置 | 阈值告警 |
| 健康检查 | 系统健康状态 |
恭喜你完成了FaunaDB完全指南的学习!
最后更新:2026-03-27