@elsbrock/cf-worker-otel (英语)
将Cloudflare工人的度量衡推向普罗米修斯克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克.
- ~200行线,零运行时间依赖关系
- 柜台、仪表和直方图
- 具有三角时间性的OTLP/HTTP JSON
- 建造时间
waitUntil()永远不要阻止你的反应 - 无声无息的无声无声的无声无声的无声无声无相的无声无相无相的无相无相无相无相无相无相无相无相无相无相无相无相无相无相无相无相无相无相无相无相无相无相无相无相无相无相无相无相
安装
npm install @elsbrock/cf-worker-otel
发布至 GitHub 软件包添加
@elsbrock:registry=https://npm.pkg.github.com给您的.npmrc。 。 。 .
快速启动
import { createMetrics } from "@elsbrock/cf-worker-otel";
export default {
async fetch(request, env, ctx) {
const metrics = createMetrics({
serviceName: "my-worker",
endpoint: env.OTLP_ENDPOINT,
token: env.OTLP_AUTH_TOKEN,
});
const start = Date.now();
const response = await handleRequest(request);
metrics.counter("http_requests_total", 1, {
method: request.method,
status: String(response.status),
});
metrics.histogram("http_request_duration_ms", Date.now() - start);
ctx.waitUntil(metrics.flush());
return response;
},
};
云层上的斯维尔特基特
// src/hooks.server.ts
import { createMetrics } from "@elsbrock/cf-worker-otel";
import { sequence } from "@sveltejs/kit/hooks";
import type { Handle } from "@sveltejs/kit";
const metricsHandle: Handle = async ({ event, resolve }) => {
const env = event.platform?.env;
const metrics = createMetrics({
serviceName: "my-app",
endpoint: env?.OTLP_ENDPOINT,
token: env?.OTLP_AUTH_TOKEN,
});
const start = Date.now();
let status = "500";
try {
const response = await resolve(event);
status = String(response.status);
return response;
} finally {
metrics.counter("http_requests_total", 1, {
method: event.request.method,
status,
route: event.route.id ?? "unknown",
});
metrics.histogram("http_request_duration_ms", Date.now() - start);
event.platform?.context?.waitUntil(metrics.flush());
}
};
export const handle = sequence(metricsHandle, sessionHandle);
API 密码
createMetrics(config)
返回每个请求采集器。 每引用一次创建一个,最后冲出.
| 选项 | 类型 | 需求 | 说明 |
|---|---|---|---|
serviceName | string | 对 | 地图到 service.name 在OTLP内 |
endpoint | string | 没有 | OTLP HTTP 端点 URL |
token | string | 没有 | 手持者标志 Authorization 标题 |
defaultAttributes | Record<string, string> | 没有 | 合并到每个数据点 |
histogramBounds | number[] | 没有 | 自定义桶边框( 默认: HTTP 在 ms 中的恒度) |
若为 endpoint 或者说 token 失踪了, flush() 什么也没做.
metrics.counter(name, value, attributes?)
Monotonic 计数器。 同名+同名属性在请求中被汇总.
metrics.gauge(name, value, attributes?)
即时值相. 每个属性集最后写胜出 .
metrics.histogram(name, value, attributes?)
单一观察放入一桶. 默认界限 :
[5, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000] m.
metrics.flush()
串起所有的东西给OTLP JSON,然后PST它。 传到 ctx.waitUntil()。 。 。 .
Prometheus 设置
启用OTLP接收器(v2.47+):
--web.enable-otlp-receiver
对于三角洲时间性支持(v3+):
--enable-feature=otlp-deltatocumulative
接收器在听 POST /api/v1/otlp/v1/metrics 在普罗米修斯港.
如何运作
每个 createMetrics() 电话创建一个孤立的收集器。 量子在请求处理过程中被积累为内存,然后被序列化为单个OTLP/HTTP JSON有效载荷并装入 waitUntil()每个工人引用一次——不按要求进行分批,不坚持不变.
三角洲时间性意味着每个推力只包含发生在 这个 请求。 普罗米修斯将三角洲转换为累积计数器服务器侧.