首页 / 文档 / 可观测性

可观测性

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_totalCountername, category, status
pa_scrape_duration_secondsHistogramname, category
pa_scrape_items_totalCountername, 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,展示:

  • 各平台抓取成功率
  • 平均响应时间
  • 缓存命中率
  • 熔断器状态
  • 数据条数趋势