我们在代码设计阶段,就必须考虑和确定系统在生产环境运行时需要达到的目标。比如说,定义好服务水平目标 SLO,为了提供预期的服务质量,你需要什么程度的可观测性?你的用户关心什么?他们会注意到什么?试图找出可能出错的地方,以及提前发现错误的方法。在明确了目标之后,我们应该将插码视为重要的责任,并视为将其交付生产的要求。插码主要包括下面几种类型。
- 第一种类型,日志推荐,它是以 JSON 方式输出的。这个方式最重要的是在日志输出过程中能够添加与业务分割相关的标签(即我们常说的 tag),以便后续的日志分析统计。
- 第二种类型是链路追踪。一般情况下,我们可以通过无埋点的方式进行追踪,但是如果开发工程师针对部分业务可以进行深入的埋点,或者集成更多业务相关的标签,那会更有意义。
- 第三种类型是用户体验监测,即 RUM(Real User Monitoring)。如果前端或者 App 端开发工程能够将用户体验也纳入到整体的可观测性范围内,那么就可以进一步地保障用户的服务质量,更有效地发现和定位问题了。前端或者 App 端团队要对用户体验进行集成,可以采用插码或集成更多业务相关标签等方式。
- 第四种类型是建立统一的数据规范。例如,相同的指标命名规范、相同的日志格式、相同的链路系统(即使都遵循 OpenTelemetry 标准,仍会出现不同),定义串联整个系统的统一标签规范(如,所有错误都是 Status: Error)。
良好的插码可以帮助组织更广泛地传播可观测性文化,减轻团队的负担,因为如果插码提供了足够的上下文,运维或技术支持团队就能够解决更多问题,不需要频繁地寻呼开发了。
此文章为3月Day10 学习笔记,内容来源于极客时间《深入浅出可观测性》,推荐该课程。