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