Honeycomb 日志程序是一个简单的库,可以非常容易地导出您的运行时间信息 云花岗工人 输入 蜂窝。 。 。 . Honeycomb是一个可观察性平台,它允许您在您数据中的任何(个数)维度之间查询和图表。 因此,例如,您可以将200个响应代码的图形请求持续时间,用于GET请求,到特定的URL,用于特定的客户.
或者你可以钻入一个错误请求的全部痕迹,包括所有子请求.
目录
先决条件
这个剧本还没有为预定的工人工作. 它支持工人在以下两个方面: addEventListener 和模块语法,包括持久对象。 关于持久对象支持的更多信息,见下文.
开始
安装通过通常方式进行 npm install @cloudflare/workers-honeycomb-logger 或者说 yarn add @cloudflare/workers-honeycomb-logger。 。 。 .
接下来需要的两件事是Honeycomb API密钥和数据集名. 您可以选择您喜欢的任何数据集名称, Honeycomb 如果看到新名称, 将会自动创建新数据集 .
下一步取决于你是否在使用 addEventListener 格式或新模块格式(持久对象需要)
您还需要启用 Automatically unpack nested JSON 数据集设置 https://ui.honeycomb.io (英语) 可以查询所有自动包含的数据.
添加事件收听器配置
要配置软件包,您需要用蜂窝记录器来包装您的收听器 。 所以,如果你目前的代码 看起来像这样:
addEventListener('fetch', (event) => {
event.respondWith(handleRequest(event.request))
})
function handleRequest(request) {
//your worker code.
}
你可以把它改为:
import { hc } from '@cloudflare/workers-honeycomb-logger'
const hc_config = {
apiKey: '<api_key>',
dataset: '<my-first-dataset>',
}
const listener = hc(hc_config, (event) => {
event.respondWith(handleRequest(event.request))
})
addEventListener('fetch', listener)
function handleRequest(request) {
//your worker code.
}
你现在可以走了。 通过配置部分读取以查看您还能配置什么 . 如果你遇到任何问题,这里有一个 添加EventListener配置工人的全部示例
模块语法配置
如果使用模块语法,设置略有不同. 但你还是得把工人包起来.
如果你的密码是这样的
export default {
async fetch(request, env, ctx) {
return new Response('Hello world!', { status: 200 })
},
}
你会改变为类似的东西:
const worker = {
async fetch(request, env, ctx) {
return new Response('Hello world!', { status: 200 })
},
}
const config = {
apiKey: '__HONEYCOMB_API_KEY__', // can also be provided by setting env var HONEYCOMB_API_KEY
dataset: 'my-first-dataset', // can also be provided by setting env var HONEYCOMB_DATASET
}
export default wrapModule(config, worker)
你现在可以走了。 通过配置部分读取以查看您还能配置什么 . 如果你遇到任何问题,这里有一个 模块语法配置工人的全部示例
如果您不想手动硬化 API 密钥, 您也可以设置环境变量 HONEYCOMB_API_KEY 财务报告和审定财务报表 HONEYCOMB_DATASET 他们将制服插入其中的东西 wrapModule。 。 。 .
持久对象配置
如果你在使用持久物体,我们支持在你的工人和持久物体中自动分布式追踪. 你需要用密码包裹你的工人密码 模块系统配置 上方,然后将永久对象也包起来.
你可以这样做:
import { Counter as counter_do } from './counter.mjs'
const worker = {
async fetch(request, env) {
// handleRequest
},
}
const config = {
apiKey: '__HONEYCOMB_API_KEY__', // can also be provided by setting env var HONEYCOMB_API_KEY
dataset: 'my-first-dataset', // can also be provided by setting env var HONEYCOMB_DATASET
}
const Counter = wrapDurableObject(config, counter_do)
export default wrapModule(config, worker)
export { Counter }
如果你遇到任何问题,这里有一个 长对象配置工人的完整示例
配置
配置对象可以占用几个额外的参数来给发送给Honeycomb的事件添加更多细节或者配置其他方面.
interface Config {
apiKey?: string //The honeycomb API Key, can be specified as env var HONEYCOMB_API_KEY
dataset?: string //The name of the dataset, can be specified as env var HONEYCOMB_DATASET
acceptTraceContext?: boolean //Do you want to accept automatic TraceContext information from clients? Defaults to 'false'
data?: any //Any data you want to add to every request. Things like service name, version info etc.
redactRequestHeaders?: string[] //Array of headers to redact. Will replace value with `REDACTED`. default is ['authorization', 'cookie', 'referer'].
redactResponseHeaders?: string[] //Array of headers to redact. Will replace value with `REDACTED`. default is ['set-cookie'].
sampleRates?: SampleRates | SampleRateFn //Either an object or function that configured sampling ([See below](#dynamic-sampling))
sendTraceContext?: boolean | RegExp //set this to true to send a TraceContext with all fetch requests. With a Regex, we will check the URL against the regex first. Defaults to 'false'
serviceName?: string //The serviceName you want to see in Honeycomb. Defaults to 'worker'
debugLog?: boolean // console.log response info for Honeycomb requests. Defaults to false
}
注:在以前的版本中,有分析请求和答复的方法,但在阅读请求或答复的正文时,这便成为一个问题,因此已删除。 如果您想要添加任何信息, 您可以使用 tracer.addData 方法说明如下.
添加日志和其他数据
如果您想要将其它数据或日志添加到当前请求中, 您可以使用 tracer.addData(data: object) 财务报告和审定财务报表 tracer.log(message: string) 方法。 。 .
您可以在请求对象上或者在听者中获取对追踪器的引用,或者获取第二个参数.
async function handleRequest(request: TracerRequest) {
request.tracer.log('handling request')
const customer = parseCustomer(request)
request.tracer.addData({customer: customer.name})
return ...
}
追踪
Honeycomb有一个追踪的概念,它是多个相关事件的分级代表. Cloudflare Worker Honeycomb 日志支持子请求的微量事件(正在运行的 HTTP 获取您员工的请求) :
要将子请求与收到的正确请求联系起来, 您必须使用上述跟踪器上定义的获取 。 追踪器上的方法将所有参数都代表常规获取方法,所以 tracer.fetch 函数是所有 fetch 函数调用.
示例
async function handleRequest(request: Request) {
return request.tracer.fetch('https://docs.honeycomb.io/api/events/')
}
如果您想要启用从客户端到后端的自动分布的痕迹, 您可以启用 acceptTrace 属性,用于参与客户端启动的跟踪 sendTraceContext 自动发送到 跟踪背景 转到你的后端.
这只管用 fetch 定义方法 tracer 对象,并与Honeycomb beeline 框架相容.
记住,你必须使用同样的 dataset 让所有系统都能在Honeycomb组装你的踪迹.
动态抽样
每个请求中存储所有这些信息的挑战之一是,当你将信息扩大到每月超过上千万个请求时,信息变得越来越昂贵。 但与此同时,你几乎肯定对绝大多数事件不甚感兴趣。 这就是为什么Honeycomb支持采样。 在那里只发送了部分事件. 做简单的取样(例如每10个请求中只发送1个)的问题是,你损失了很多很少发生的事件. 所以Honeycomb和这个库支持动态采样. 通过响应代码可以配置最简单的样本. 这样您就可以配置在10个响应码中只保留1个,并保留全部5xx.
从技术上讲,这个号码代表了多少个请求。 一个更容易记住的方法是,一个请求有1/x的机会被采样.
export interface SampleRates {
'1xx': number
'2xx': number
'3xx': number
'4xx': number
'5xx': number
exception: number
}
举例来说:
const hc_config = {
api_key: 'abcd',
dataset: 'my-first-dataset',
sampleRates: {
'1xx': 20,
'2xx': 10,
'3xx': 5,
'4xx': 2,
'5xx': 1,
exception: 1,
},
}
此配置库仅发送每10个请求中的1个,在200s中有一个响应代码,但保留所有错误;包括500s和例外.
如果想要对样本进行更精细的谷物控制,您可以提供一个能带走全部的函数 data 对象.
这是将发送到Honeycomb的确切对象,这样你就可以看到那里有什么值.
这包括您添加的所有信息 request.tracer.addData()
请注意: Headers 请求对象和响应对象均改为a Record<string, string>所以,如果你想检查 content-type 在回复中头,你可以 data.response.headers['content-type']。 。 。 .
实例
function sampleRates(data: any): number {
if (data.request.url.contains('/healthcheck')) {
return 0
} else if (data.customer.plan === 'enterprise') {
return 5
} else if (data.response.ok === true) {
return 20
} else {
return 1
}
}
关于取样和分布式追踪的一个告诫是,如果在两个/所有系统中分别进行取样,则 可能会得到部分的痕迹.