OpenShiftでTempo Operatorを使った分散トレーシングを実現する

# はじめに

OpenShift4.16の[What's New](https://speakerdeck.com/redhatlivestreaming/whats-new-in-openshift-4-dot-16?slide=33)にも登場したTempoを使って、分散トレーシングを実現したいと思います。

# 前提

**環境情報**

- OpenShift: 4.15.30
- Tempo Operator(Red Hat): 0.13.0-1+0.1730817419.p
    - 今回はTempoMonolithicで構成する
- Object Storage(s3/gcs/blob storage...)が構成済み
    - 今回は構成済みのIBM CloudのCloud Object Storage(ICOS)を使用する
※ICOSは本手順でS3互換として利用可能な為、ドキュメント内S3の手順に読み替えて実施する

# 今回の内容

1. Tempo Operatorのインストール 👈ここ
2. Tempo Monolithic Instanceの作成 👈ここ
3. サンプルアプリケーションの作成
4. 分散トレーシングの構成

**ドキュメント**

- Red Hat Documentation 
    - ホーム > 製品 > OpenShift Container Platform > 4.15 > 分散トレーシング > [第3章 distributed tracing platform (Tempo)](https://docs.redhat.com/ja/documentation/openshift_container_platform/4.15/html/distributed_tracing/distributed-tracing-platform-tempo)

**参考リンク**

- [OpenShift Service Mesh 3.x + Tempo Operator + Red Hat build of OpenTelemetryで分散トレーシングの設定をしてみた](https://qiita.com/t_sweetfish/items/bc738b32595a16cbe5fb)
    - 実施手順３「[3. 分散トレースデータ収集(OpenTelemetry)のインストール](https://qiita.com/t_sweetfish/items/bc738b32595a16cbe5fb#3-%E5%88%86%E6%95%A3%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B9%E3%83%87%E3%83%BC%E3%82%BF%E5%8F%8E%E9%9B%86opentelemetry%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)」から分散トレーシングの構成までの手順を参照できます

# 手順

## 1. Tempo Operatorのインストール

> https://docs.redhat.com/ja/documentation/openshift_container_platform/4.15/html/distributed_tracing/distributed-tracing-platform-tempo#distr-tracing-tempo-install-web-console_dist-tracing-tempo-installing

- OpenShiftコンソールにログイン

![スクリーンショット 2024-11-18 14.00.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/61d4c1f6-f81d-5ac6-47f2-99086ba49d77.png)

- Operator > OperatorHubに移動し`Tempo Operator`を検索、Red Hatが提供するTempo Operatorを選択する

![スクリーンショット 2024-11-18 14.01.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/d464cca2-1f9d-8513-e4d0-3d3f447ecf6b.png)

- 「インストール」を押下する

![スクリーンショット 2024-11-18 14.01.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/bcaf9a78-c71a-33c4-295e-163edb75ab67.png)

- 以下の設定で「インストール」を押下する
    - 更新チャネル: `stable`
    - バージョン: `0.13.0-1+0.1730817419.p`
    - インストールモード: `クラスターのすべてのnamespace(デフォルト)`
    - インストール済みのnamespace: `Operator推奨のnamespace: openshift-tempo-operator`
        - このnamespaceでOperatorで推奨されるクラスターモニタリングを有効化する: `未チェック`
    - 更新の承認: `手動`

![スクリーンショット 2024-11-18 14.03.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/bda19198-b6ec-0e42-95f2-67596d5dc358.png)

![スクリーンショット 2024-11-18 14.04.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/c8cfb913-5f30-8aa0-e5d2-4bed6dff547a.png)

- 承認アクションが表示されたら「承認」を押下する

![スクリーンショット 2024-11-18 14.05.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/bea684c2-eb95-8576-a6c1-364070bda352.png)

※以下作成されるリソースの一覧

![スクリーンショット 2024-11-18 14.05.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/d6fcca15-817d-68dd-e6b0-831995d444f6.png)

- しばらく経つとTempo Operatorのインストール処理が完了し、表示された「Operatorの表示」を押下する

![スクリーンショット 2024-11-18 14.06.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/1feb0305-e5cf-9e18-65a4-6ff423ad9f17.png)

- Tempo Operatorがインストールされていることを確認する

![スクリーンショット 2024-11-18 14.06.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/ed08a6f2-4e83-68a8-16da-e30bfa063cd1.png)

## 2. Tempo Monolithic Instanceの作成

> https://docs.redhat.com/ja/documentation/openshift_container_platform/4.15/html/distributed_tracing/distributed-tracing-platform-tempo#distr-tracing-tempo-install-tempomonolithic-web-console_dist-tracing-tempo-installing

- ホーム > プロジェクトから「プロジェクトの作成」を押下する
    - Tempo Monolithic Instance用のプロジェクトを作成する

プロジェクト名「sample-tempo-monolithic」(任意の名前)

![スクリーンショット 2024-11-18 15.53.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/25684b2f-5a3c-0137-7317-4bc313331f23.png)

![スクリーンショット 2024-11-18 15.54.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/8ce1de97-b4ac-75e7-b605-0c8db3855f2c.png)

- トレース情報の保存に使用されるObject Storage接続情報を定義する

以下のマニフェストファイル内容でリソースを作成

```yaml
apiVersion: v1
kind: Secret
metadata:
  name: sample-tempo-monolithic-cos-secret(任意の名前)
  namespace: sample-tempo-monolithic(上で作成したプロジェクト名)
type: Opaque
stringData:
  endpoint: http://<Cloud Object StorageバケットのPublicEndpoint>
  bucket: <Cloud Object Storageバケット名>
  access_key_id: <Cloud Object StorageインスタンスのアクセスキーID>
  access_key_secret: <Cloud Object Storageインスタンスのアクセスキーシークレット>
```

![スクリーンショット 2024-11-18 16.05.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/01dbd568-fe11-5c0e-f57d-42faf99aefa5.png)

- Operator > インストール済みのOperator > Tempo Operatorを選択し、Tempo Monolithicタブから「TempoMonolithicの作成」を押下する

以下のマニフェストファイル内容でリソースを作成

```yaml
apiVersion: tempo.grafana.com/v1alpha1
kind: TempoMonolithic
metadata:
  name: sample(任意の名前)
  namespace: sample-tempo-monolithic(上で作成したプロジェクト名)
spec:
  storage:
    traces:
      backend: s3
      size: 10Gi 
      s3: 
        secret: sample-tempo-monolithic-cos-secret(上で作成したSecret名)
  jaegerui:
    enabled: true 
    route:
      enabled: true 
```

![スクリーンショット 2024-11-18 17.08.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/04236278-2028-765b-2133-f98f9781c98d.png)

- ネットワーク > Routesを選択し、上の作業で作成されたRouteからURLを押下する

![スクリーンショット 2024-11-18 17.09.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/a5e9420b-c933-c05e-fa95-56815d635c03.png)

![スクリーンショット 2024-11-18 17.09.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/3ee7b52f-631d-16dd-dbba-c568c686db36.png)

![スクリーンショット 2024-11-18 17.09.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/f40ddb58-d0a0-6cc7-b7ba-8b38c9310958.png)

- Jaeger UIが使用できるようになっていることが確認できる

![スクリーンショット 2024-11-18 17.39.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908685/3c347a29-08ff-a670-c7af-22aa532ac953.png)

# さいごに

次回はサンプルアプリケーションを作成して、分散トレーシング情報を取得できるよう構成を行いたいと思います。