Supabase监控与日志 #
一、Dashboard监控 #
1.1 项目概览 #
text
Dashboard > Home
概览信息
├── 数据库大小
├── 存储使用量
├── API请求数
├── 实时连接数
└── Edge Functions调用
1.2 报告页面 #
text
Dashboard > Reports
报告类型
├── API使用统计
├── 数据库性能
├── 存储使用
├── 实时订阅
└── 认证统计
二、日志查看 #
2.1 API日志 #
text
Dashboard > Logs > API
日志内容
├── 请求时间
├── 请求路径
├── 请求方法
├── 状态码
├── 响应时间
└── 错误信息
2.2 数据库日志 #
text
Dashboard > Logs > Database
日志内容
├── SQL查询
├── 执行时间
├── 错误信息
├── 连接信息
└── 事务日志
2.3 Auth日志 #
text
Dashboard > Logs > Auth
日志内容
├── 登录事件
├── 注册事件
├── 密码重置
├── Token刷新
└── 错误信息
2.4 函数日志 #
bash
# CLI查看函数日志
supabase functions logs my-function
# 实时日志
supabase functions logs my-function --follow
# 限制行数
supabase functions logs my-function --limit 100
三、性能监控 #
3.1 慢查询分析 #
sql
-- 查看慢查询
SELECT
query,
calls,
total_time,
mean_time,
max_time
FROM pg_stat_statements
ORDER BY mean_time DESC
LIMIT 10;
-- 需要先启用扩展
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
3.2 表统计 #
sql
-- 查看表大小
SELECT
schemaname,
tablename,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
-- 查看索引使用率
SELECT
schemaname,
tablename,
indexname,
idx_scan,
idx_tup_read,
idx_tup_fetch
FROM pg_stat_user_indexes
ORDER BY idx_scan DESC;
3.3 连接监控 #
sql
-- 查看当前连接
SELECT
pid,
usename,
application_name,
client_addr,
state,
query_start,
query
FROM pg_stat_activity
WHERE state = 'active';
-- 查看连接数
SELECT count(*) FROM pg_stat_activity;
四、告警配置 #
4.1 Dashboard告警 #
text
Dashboard > Settings > Alerts
告警类型
├── CPU使用率
├── 内存使用
├── 磁盘空间
├── 连接数
└── 错误率
4.2 自定义监控 #
typescript
// Edge Function: health-check
Deno.serve(async (req) => {
const supabase = createClient(
Deno.env.get('SUPABASE_URL')!,
Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!
)
// 检查数据库连接
const { error: dbError } = await supabase
.from('_health')
.select('id')
.limit(1)
// 检查存储
const { error: storageError } = await supabase
.storage
.from('health-check')
.list()
const health = {
database: !dbError,
storage: !storageError,
timestamp: new Date().toISOString(),
}
return new Response(JSON.stringify(health), {
headers: { 'Content-Type': 'application/json' },
})
})
五、日志分析 #
5.1 错误统计 #
sql
-- 创建错误日志表
CREATE TABLE error_logs (
id BIGSERIAL PRIMARY KEY,
error_type TEXT,
error_message TEXT,
stack_trace TEXT,
user_id UUID,
request_path TEXT,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- 错误统计
SELECT
error_type,
COUNT(*) as count,
MAX(created_at) as last_occurrence
FROM error_logs
WHERE created_at > NOW() - INTERVAL '24 hours'
GROUP BY error_type
ORDER BY count DESC;
5.2 用户活动分析 #
sql
-- 用户活动统计
SELECT
DATE(created_at) as date,
COUNT(DISTINCT user_id) as active_users,
COUNT(*) as total_requests
FROM api_logs
WHERE created_at > NOW() - INTERVAL '7 days'
GROUP BY DATE(created_at)
ORDER BY date;
六、性能优化 #
6.1 索引优化 #
sql
-- 查看缺失索引
SELECT
schemaname,
tablename,
attname,
n_distinct,
correlation
FROM pg_stats
WHERE schemaname = 'public'
AND n_distinct > 100
ORDER BY n_distinct DESC;
-- 创建索引
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_posts_created ON posts(created_at DESC);
6.2 查询优化 #
sql
-- 分析查询计划
EXPLAIN ANALYZE
SELECT * FROM posts WHERE author_id = 'user-uuid';
-- 使用索引扫描
EXPLAIN ANALYZE
SELECT * FROM posts WHERE author_id = 'user-uuid' ORDER BY created_at DESC;
七、监控最佳实践 #
7.1 监控清单 #
text
监控项目
├── API响应时间
├── 数据库查询性能
├── 错误率
├── 连接数
├── 存储使用
└── 实时连接数
7.2 告警阈值 #
text
建议阈值
├── API响应时间 > 1秒
├── 错误率 > 1%
├── 数据库连接 > 80%
├── 存储使用 > 80%
└── CPU使用 > 80%
八、总结 #
监控日志要点:
| 功能 | 位置 |
|---|---|
| API日志 | Dashboard > Logs > API |
| 数据库日志 | Dashboard > Logs > Database |
| 函数日志 | supabase functions logs |
| 性能报告 | Dashboard > Reports |
| 慢查询 | pg_stat_statements |
恭喜你完成了Supabase完全指南的学习!
最后更新:2026-03-28