Service
服务
状态:
类型: service
描述: 服务实例。
标识属性
| 键 | Stability | 需求级别 | Value Type | 描述 | Example Values |
|---|---|---|---|---|---|
service.name | 必需 | 字符串 | 服务的逻辑名称。 | shoppingcart | |
service.instance.id | 推荐 | 字符串 | 服务实例的字符串 ID。 | 627cc493-f310-47de-96bd-71410b7dec09 | |
service.namespace | 推荐 | 字符串 | service.name 的命名空间。[3] | Shop |
[1] service.name: 对于水平缩放服务的多个实例,此值 MUST 相同。如果未指定该值,SDK MUST 回退为 unknown_service: 加上 process.executable.name,例如 unknown_service:bash。如果 process.executable.name 不可用,该值 MUST 设置为 unknown_service。
[2] service.instance.id: 对于同一 service.namespace,service.name 对的每个实例,此 ID MUST 是唯一的(换句话说,service.namespace,service.name,service.instance.id 三元组 MUST 在全球范围内是唯一的)。此 ID 有助于区分同一时间存在的同一服务的实例(例如,水平缩放服务的实例)。
建议实现(例如 SDK)生成随机的 V1 或 V4 RFC 4122 UUID,但如果稳定性是可取的,可以自由使用固有的唯一 ID 作为此值的来源。在这种情况下,ID 应该用作 UUID V5 的来源,并应使用以下 UUID 作为命名空间:4d63009a-8d0f-11ee-aad7-4c796ed8e320。
通常建议使用 UUID,因为只需要一个不透明的值来识别服务实例。与 /etc/machine-id 文件手册页中可以看到的类似,底层数据(如 pod 名称和命名空间)应被视为机密,用户可以选择是否通过另一个资源属性公开它。
对于在应用程序服务器(如 unicorn)后面运行的应用程序,我们不建议为参与应用程序的所有进程使用单个标识符。相反,建议每个分区(例如 unicorn 中的工作线程)拥有自己的 instance.id。
不建议 Collector 设置 service.instance.id,如果它无法明确确定生成该遥测数据的服务实例。例如,基于 pod.name 创建 UUID 可能会出错,因为 Collector 可能不知道遥测数据来自该 pod 中的哪个容器。但是,Collector 如果能够明确确定该遥测数据的服务实例,则可以设置 service.instance.id。这通常是抓取接收器的情况,因为它们知道目标地址和端口。
[3] service.namespace: 一个字符串值,其含义有助于区分服务组,例如拥有服务组的团队名称。在同一命名空间内,service.name 应该具有唯一性。如果在 Resource 中未指定 service.namespace,则 service.name 应该对于所有没有明确定义命名空间的服务是唯一的(因此空/未指定的命名空间只是另一个有效的命名空间)。零长度命名空间字符串假定等于未指定的命名空间。
描述性属性
| 键 | Stability | 需求级别 | Value Type | 描述 | Example Values |
|---|---|---|---|---|---|
service.version | 推荐 | 字符串 | 服务 API 或实现的字符串版本。格式不由这些约定定义。 | 2.0.0; a01dbef8a |