类型挑战:Datadog日志预览
生成一个带过滤器的日志链接,用于Datadog,并包含TypeScript类型定义
在Slash,我们热衷于探索如何利用TypeScript的类型系统让代码更具类型安全性和可维护性。虽然并非所有类型安全应用都具有实际实用价值,但我们发现它们充满趣味且富有创意。当这些设计不影响代码维护时,我们偶尔会将其作为"彩蛋"保留在代码库中。
若您有解决方案,请发送至我们: engineering@slash.com.
概述
我们在代码中定义"结构化"日志,并基于这些日志定义相应的指标,从而能够构建仪表板并设置自动化警报。在Datadog平台上,基于日志定义指标的行为被称为 日志指标日志指标通过过滤器和聚合规则创建,用于确定如何从日志中推导出该指标。
在我们的代码库中,我们提供了一组简单的强类型辅助工具,以便更轻松地定义新日志及其对应的指标(即右侧所示代码)。 此外还提供"预览"辅助工具以提升开发体验。当开发者配置指标过滤器时,可实时预览TypeScript生成的URL,并在浏览器中查看结果,从而确保过滤器应用正确。
挑战
实现该类型 获取DataDog日志预览响应 因此当我们调用时,系统会通过类型推导生成正确的Datadog URL。 度量标准预览现有代码中的URL是正确的,因此你需要"修复"类型错误。
这些是Datadog的 文档 关于日志搜索语法的运作方式。任何可搜索的日志都可编码为URL格式,该功能已对外开放。以下是URL编码日志过滤器的一般工作原理:
- 基础URL是
https://app.datadoghq.com/logs - 存在一个查询参数
查询该参数支持整个搜索查询的URL编码字符串。
以下列举了输入→输出的示例。这些示例均以非URI编码字符串形式列出过滤器:
- 目标:"应用持续时间等于100" -> 输出:
查询=@持续时间:100 - 目标:"应用持续时间大于100" -> 输出:
查询条件:@持续时间大于100 - 目标:"apply http.status_code 不是 200" -> 输出:
query=-@http.status_code:200 - 目标:"应用 http.status_code 为 200 或 400" -> 输出:
查询条件为:@http.status_code:200 或 @http.status_code:400 - 目标:"应用 http.route 类似于 /api/v1/_" -> 输出:
query=@http.route:/api/v1/_