You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Node.js+Skywalking按API Key拆分的端点统计仪表盘构建咨询

按API Key拆分端点使用统计的实现方案

1. 在Node.js服务中注入API Key到Skywalking追踪

在你的Node.js应用里,利用Skywalking Node.js SDK的自定义标签功能,在请求入口处提取x-api-key并关联到追踪链路:

const agent = require('skywalking-nodejs');
const express = require('express');
const app = express();

// 初始化Skywalking agent(按现有配置调整参数)
agent.start({
  serviceName: 'your-service-name',
  collectorAddress: 'your-skywalking-oap:11800',
});

// 添加请求拦截中间件,注入API Key标签
app.use((req, res, next) => {
  const apiKey = req.headers['x-api-key'];
  if (apiKey) {
    // 将API Key设为Skywalking追踪的自定义标签
    agent.setCustomTag('x-api-key', apiKey);
  }
  next();
});

// 业务路由示例
app.get('/some-endpoint', (req, res) => {
  res.send('OK');
});

app.listen(3000);

2. 配置Skywalking OAP存储自定义标签

修改Skywalking OAP Server的application.yml,确保自定义标签x-api-key被纳入追踪数据的存储维度(以Elasticsearch存储为例,其他存储类型配置逻辑类似):

core:
  default:
    traceSegmentStorage:
      elasticsearch:
        customTags:
          - key: x-api-key
            value: string

重启OAP Server使配置生效。

3. 统计数据查询

方式一:通过Skywalking查询API获取

调用Skywalking的Metrics查询接口,按endpoint和x-api-key维度聚合请求数:

# 替换你的OAP地址、服务ID等参数
curl "http://your-skywalking-oap:12800/graphql" -H "Content-Type: application/json" -d '{
  "query": "query queryEndpointMetrics($serviceId: ID!, $duration: Duration!) {
    endpointMetrics(
      serviceId: $serviceId,
      duration: $duration,
      metrics: [\"endpoint_cpm\"],
      groupBy: [\"endpoint\", \"x-api-key\"]
    ) {
      values {
        labels { endpoint, x-api-key }
        value
      }
    }
  }",
  "variables": {
    "serviceId": "your-service-id",
    "duration": {
      "start": "2024-05-01 00:00:00",
      "end": "2024-05-01 23:59:59",
      "step": "HOUR"
    }
  }
}'

方式二:从Postgres直接查询(若请求日志落地到PG)

如果应用已将请求日志(包含endpoint、api_key字段)写入Postgres,直接执行SQL统计:

SELECT 
  endpoint, 
  api_key, 
  COUNT(*) AS request_count
FROM request_logs
WHERE request_time BETWEEN '2024-05-01 00:00:00' AND '2024-05-01 23:59:59'
GROUP BY endpoint, api_key
ORDER BY request_count DESC;

4. 仪表盘展示

  • Skywalking自带仪表盘:进入Skywalking UI,创建自定义仪表盘,添加折线图或柱状图,选择指标为Endpoint CPM(请求数),分组维度勾选endpoint和x-api-key,即可按API Key拆分展示端点请求统计。
  • 自定义前端仪表盘:通过React/Vue等前端框架调用上述查询接口或PG查询结果,渲染成目标格式:
    • /some-endpoint (apiKey_1) 3
    • /some-endpoint (apiKey_2) 1

内容的提问来源于stack exchange,提问作者Артемий Кудрявцев

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:16:03