可观测性
Aneiang.Pa 自动产生结构化日志、Metrics 和 Tracing,可直接对接 Grafana + Prometheus + Jaeger。
日志
使用标准 ILogger<> 接口,不注入则为空日志(无副作用)。
// 用户代码
var data = await Pa.Source("WeiBo").GetAsync();
// 框架自动输出:
// [Pa] Start WeiBo
// [Pa] OK WeiBo Items=50 Elapsed=842ms
// [Pa] Cache HIT WeiBo (from cache)
对接 Serilog
builder.Services.AddLogging(b => b
.AddSerilog(new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("logs/pa-.log", rollingInterval: RollingInterval.Day)
.CreateLogger()));
指标 (Metrics)
使用 System.Diagnostics.Metrics,兼容 Prometheus。
| 指标 | 类型 | 标签 |
|---|---|---|
pa_scrape_total | Counter | name, category, status |
pa_scrape_duration_seconds | Histogram | name, category |
pa_scrape_items_total | Counter | name, category |
对接 Prometheus
builder.Services.AddPa();
// 添加 Prometheus 端点
builder.Services.AddPrometheusExporter();
app.UsePrometheusScrapingEndpoint("/metrics");
访问 /metrics 即可获取 Prometheus 格式的指标数据:
# HELP pa_scrape_total Total scrape count
# TYPE pa_scrape_total counter
pa_scrape_total{name="WeiBo",category="News",status="ok"} 42
pa_scrape_total{name="BaiDu",category="News",status="ok"} 38
# HELP pa_scrape_duration_seconds Scrape duration
# TYPE pa_scrape_duration_seconds histogram
pa_scrape_duration_seconds_bucket{name="WeiBo",le="0.5"} 40
pa_scrape_duration_seconds_bucket{name="WeiBo",le="1.0"} 42
pa_scrape_duration_seconds_bucket{name="WeiBo",le="+Inf"} 42
关闭指标
Pa.Configure(c => c.Options.EnableMetrics = false);
追踪 (Tracing)
使用 ActivitySource,兼容 OpenTelemetry。
// 用户代码
var data = await Pa.Source("WeiBo").GetAsync();
// 框架自动创建 Activity "Pa WeiBo":
// - Duration: 842ms
// - Tags: source=WeiBo, category=News, items=50, fromCache=false
对接 OpenTelemetry
builder.Services.AddOpenTelemetry()
.WithTracing(t => t
.AddSource("Aneiang.Pa")
.AddOtlpExporter(o => o.Endpoint = new Uri("http://localhost:4317")));
关闭追踪
Pa.Configure(c => c.Options.EnableTracing = false);
完整可观测性栈
Aneiang.Pa
├── Logging → Serilog → Elasticsearch / Loki
├── Metrics → Prometheus → Grafana
└── Tracing → OpenTelemetry → Jaeger / Tempo
Grafana Dashboard
推荐在 Grafana 中创建 Dashboard,展示:
- 各平台抓取成功率
- 平均响应时间
- 缓存命中率
- 熔断器状态
- 数据条数趋势