# Mappings

> Source: https://www.ymotongpoo.com/works/otel-specs-ja/spec/profiles/mappings/


**ステータス**: [アルファ（Alpha）](/works/otel-specs-ja/spec/document-status/)

この文書は、[`Mapping`](/works/otel-specs-ja/spec/profiles/data-format/#message-mapping)メッセージの必須属性を定義します。

## 属性

`Mapping`を表すメッセージは、以下の[processに関する属性](https://opentelemetry.io/docs/specs/semconv/registry/attributes/process/#process-attributes)のうち少なくとも1つを持たなければなりません（MUST）。

- `process.executable.build_id.gnu`
- `process.executable.build_id.go`
- `process.executable.build_id.htlhash`

可能であれば、上記に挙げたすべての属性が`Mapping`に存在すべきです（SHOULD）。相互運用性を高めるため、すべての`Mapping`に`process.executable.build_id.htlhash`が存在することが推奨されます（RECOMMENDED）。`process.executable.build_id.go`の用途と目的については、[golang/go#68652](https://github.com/golang/go/issues/68652#issuecomment-2274452424)を参照してください。

### `process.executable.build_id.htlhash`のアルゴリズム

GNUやGoのbuild_idの値が取り除かれている、あるいは利用できない環境があります。例えば、Dockerのベースとしてよく使われるAlpine Linuxなどです。そのため、また相互運用性を高めるため、ファイルの先頭と末尾のページをそのファイルの長さと合わせてハッシュ化する、決定的なbuild_id生成アルゴリズムが以下のように定義されています。

```
Input   ← Concat(File[:4096], File[-4096:], BigEndianUInt64(Len(File)))
Digest  ← SHA256(Input)
BuildID ← Digest[:16]
```

ここで`Input`は、ファイルの最初と最後の4096バイト（重複してもよく、パディングはしない）と、ファイル長のビッグエンディアン8バイトシリアライズを連結したものです。得られる`BuildID`は、そのハッシュダイジェストを16バイト（128ビット）に切り詰めた16進文字列の形式です。

