この記事は英語の原文を日本語に翻訳したものです。原文: https://opentelemetry.io/docs/specs/semconv/non-normative/k8s-attributes/
翻訳元: open-telemetry/semantic-conventions v1.44.0(コミット e10a930)
Kubernetesアノテーションによるリソース属性の指定
resource.opentelemetry.io/という接頭辞を持つすべてのアノテーションは、対応するリソース属性へ変換すべきです(SHOULD)。
例えば、アノテーションresource.opentelemetry.io/service.nameはservice.name属性へ変換すべきです(SHOULD)。
サービス属性
Kubernetesのサービスに対しては、以下のサービスリソース属性を推奨します。
サービス属性の計算方法には、いくつかの種類があります。
- Well-Known Labels
- このページで説明している
resource.opentelemetry.io/接頭辞を持つ、Podテンプレート上のアノテーション - 上記で定義したKubernetesリソース属性の関数
この変換は通常、Kubernetes Attribute ProcessorのようなOpenTelemetry Collectorコンポーネントによって行えます。
この機能を提供するツールは、well-known labelsの使用に対するオプトインフラグを用意すべきです。ユーザーが自分のラベルがこの目的で使われていることに気づいていない場合があるためです。
それぞれの属性には、以下で説明するように、どのように計算すべきかについての優先順位があります。
service.namespaceの計算方法
見つかった最初の値を選択します。
pod.annotation[resource.opentelemetry.io/service.namespace]k8s.namespace.name
service.nameの計算方法
見つかった最初の値を選択します。
pod.annotation[resource.opentelemetry.io/service.name]pod.label[app.kubernetes.io/instance](well-known labelの app.kubernetes.io/instance)pod.label[app.kubernetes.io/name](well-known labelの app.kubernetes.io/name)k8s.deployment.namek8s.replicaset.namek8s.statefulset.namek8s.daemonset.namek8s.cronjob.namek8s.job.namek8s.pod.namek8s.container.name
この優先順位の考え方は、Kubernetesのリソース階層において祖先から子孫へ、例えばdeploymentからpodへと辿ることです。Kubernetes Object Hierarchyを参照してください。
service.versionの計算方法
見つかった最初の値を選択します。
pod.annotation[resource.opentelemetry.io/service.version]pod.label[app.kubernetes.io/version](well-known labelの app.kubernetes.io/version)- 以下で説明するアルゴリズムを使ってバージョンを計算する
- reference libraryで説明されているアルゴリズムを使ってタグとダイジェストを計算する
- 見つかった最初の値を選択する
<tag>@<digest><digest><tag>
service.instance.idの計算方法
見つかった最初の値を選択します。
pod.annotation[resource.opentelemetry.io/service.instance.id]concat([k8s.namespace.name, k8s.pod.name, k8s.container.name], '.')
なお、コンテナの再起動回数はservice.instance.idの計算には含まれません。クラッシュループのように再起動ごとにIDが変わってしまうと、トラブルシューティングが難しくなるためです。