4장. 분산 추적 플랫폼(Tempo)

4.1. 분산 추적 플랫폼(Tempo) 설치

중요

Tempo Operator는 기술 프리뷰 기능 전용입니다. Technology Preview 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

분산 추적 플랫폼(Tempo)을 설치하려면 다음 단계를 수행해야 합니다.

  1. 지원되는 오브젝트 스토리지를 설정합니다.
  2. Tempo Operator 설치.
  3. 오브젝트 스토리지 인증 정보에 대한 시크릿 생성.
  4. TempoStack 인스턴스에 대한 네임스페이스 생성.
  5. TempoStack 사용자 지정 리소스를 생성하여 TempoStack 인스턴스를 하나 이상 배포합니다.

4.1.1. 웹 콘솔에서 분산 추적 플랫폼(Tempo) 설치

웹 콘솔의 관리자 보기에서 임시(Distributed tracing platform)를 설치할 수 있습니다.

전제 조건

프로세스

  1. Tempo Operator를 설치합니다.

    1. OperatorsOperatorHub 로 이동하여 Tempo Operator 를 검색합니다.
    2. Tempo → Tempo → InstallInstallView OperatorTempo Operator 를 선택합니다.

      중요

      이렇게 하면 기본 사전 설정을 사용하여 Operator가 설치됩니다.

      • 채널 → stable업데이트
      • 설치 모드클러스터의 모든 네임스페이스
      • 설치된 네임스페이스openshift-tempo-operator
      • 승인 → 자동업데이트
    3. 설치된 Operator 페이지의 세부 정보 탭에서 ClusterServiceVersion 세부 정보 에서 설치 상태가 성공했는지 확인합니다.
  2. 후속 단계에서 생성할 TempoStack 인스턴스에 대해 선택한 프로젝트를 생성합니다. 프로젝트 → 프로젝트 생성.
  3. TempoStack 인스턴스에 대해 생성한 프로젝트에서 오브젝트 스토리지 버킷에 대한 시크릿을 생성합니다. 워크로드 → 시크릿 생성YAML에서.

    표 4.1. 필수 시크릿 매개변수

    스토리지 공급자

    시크릿 매개변수

    Red Hat OpenShift Data Foundation

    이름: tempostack-dev-odf # example

    버킷: <bucket_name> # requires an ObjectBucketClaim

    endpoint: https://s3.openshift-storage.svc

    access_key_id: <data_foundation_access_key_id>

    access_key_secret: <data_foundation_access_key_secret>

    MinIO

    MinIO Operator 를 참조하십시오.

    이름: tempostack-dev-minio # example

    bucket: <minio_bucket_name> # MinIO documentation

    endpoint: <minio_bucket_endpoint>

    access_key_id: <minio_access_key_id>

    access_key_secret: <minio_access_key_secret>

    Amazon S3

    이름: tempostack-dev-s3 # example

    버킷: <s3_bucket_name> # Amazon S3 문서

    endpoint: <s3_bucket_endpoint>

    access_key_id: <s3_access_key_id>

    access_key_secret: <s3_access_key_secret>

    Microsoft Azure Blob Storage

    이름: tempostack-dev-azure # example

    컨테이너: <azure_blob_storage_container_name> # Microsoft Azure 설명서

    account_name: <azure_blob_storage_account_name>

    account_key: <azure_blob_storage_account_key>

    GCP(Google Cloud Platform)의 Google Cloud Storage

    이름: tempostack-dev-gcs # example

    버킷 이름: {_cloud_storage_bucket_nam> # GCP 프로젝트에서 버킷 이 생성됨

    key.json: <path/to/key.json> # GCP 인증을 위해 버킷의 GCP 프로젝트에 서비스 계정이 필요합니다.

    Amazon S3 및 MinIO 스토리지의 시크릿 예

    apiVersion: v1
    kind: Secret
    metadata:
      name: minio-test
    stringData:
      endpoint: http://minio.minio.svc:9000
      bucket: tempo
      access_key_id: tempo
      access_key_secret: <secret>
    type: Opaque

  4. TempoStack 인스턴스를 생성합니다.

    참고

    동일한 클러스터의 별도의 프로젝트에서 여러 TempoStack 인스턴스를 생성할 수 있습니다.

    1. Operator → 설치된 Operator 로 이동합니다.
    2. TempoStackTempoStackYAML 보기를 선택합니다.
    3. YAML 보기에서 TempoStack 사용자 정의 리소스(CR)를 사용자 지정합니다.

      apiVersion: tempo.grafana.com/v1alpha1
      kind: TempoStack
      metadata:
        name: sample
        namespace: <project_of_tempostack_instance>
      spec:
        storageSize: 1Gi
        storage:
          secret:
            name: <secret-name> 1
            type: <secret-provider> 2
        template:
          queryFrontend:
            jaegerQuery:
              enabled: true
              ingress:
                route:
                  termination: edge
                type: route
      1
      시크릿 메타데이터에 있는 이름 값입니다.
      2
      허용되는 값은 Azure Blob Storage에 azure, Google Cloud Storage용 gcs, Amazon S3, MinIO 또는 Red Hat OpenShift Data Foundation의 경우 s3 입니다.

      AWS S3 및 MinIO 스토리지에 대한 TempoStack CR의 예

      apiVersion: tempo.grafana.com/v1alpha1
      kind: TempoStack
      metadata:
        name: simplest
        namespace: <project_of_tempostack_instance>
      spec:
        storageSize: 1Gi
        storage:
          secret:
            name: minio-test
            type: s3
        resources:
          total:
            limits:
              memory: 2Gi
              cpu: 2000m
        template:
          queryFrontend:
            jaegerQuery:
              enabled: true
              ingress:
                route:
                  termination: edge
                type: route

      이 예제에 배포된 스택은 Jaeger UI로 데이터를 시각화할 수 있는 HTTP 및 OpenTelemetry Protocol(OTLP)을 통해 Jaeger Thrift를 수신하도록 구성되어 있습니다.

    4. 생성을 선택합니다.

검증

  1. Project: 드롭다운 목록을 사용하여 TempoStack 인스턴스의 프로젝트를 선택합니다.
  2. Operator설치된 Operator로 이동하여 TempoStack 인스턴스의 상태가 Condition: Ready 인지 확인합니다.
  3. 워크로드Pod 로 이동하여 TempoStack 인스턴스의 모든 구성 요소 Pod가 실행 중인지 확인합니다.
  4. Tempo 콘솔에 액세스합니다.

    1. 네트워킹경로Ctrl+F 로 이동하여 tempo 를 검색합니다.
    2. Location 열에서 URL을 열어 Tempo 콘솔에 액세스합니다.
    3. 웹 콘솔의 클러스터 관리자 인증 정보를 사용하려면 OpenShift로 로그인을 선택합니다.

      참고

      Tempo 콘솔은 처음에 Tempo 콘솔 설치 후 추적 데이터를 표시하지 않습니다.

4.1.2. CLI를 사용하여 분산 추적 플랫폼(Tempo) 설치

명령줄에서 분산 추적 플랫폼(Tempo)을 설치할 수 있습니다.

전제 조건

  • cluster-admin 역할의 클러스터 관리자가 활성 OpenShift CLI(oc) 세션입니다.

    작은 정보
    • OpenShift CLI(oc) 버전이 최신 버전인지 확인하고 OpenShift Container Platform 버전과 일치하는지 확인합니다.
    • oc login 을 실행합니다.

      $ oc login --username=<your_username>
  • 오브젝트 스토리지 공급자( Red Hat OpenShift Data Foundation,MinIO,Amazon S3,Azure Blob Storage,Google Cloud Storage )를 사용하고 있습니다.

프로세스

  1. Tempo Operator를 설치합니다.

    1. 다음 명령을 실행하여 Tempo Operator에 대한 프로젝트를 생성합니다.

      $ oc apply -f - << EOF
      apiVersion: project.openshift.io/v1
      kind: Project
      metadata:
        labels:
          kubernetes.io/metadata.name: openshift-tempo-operator
          openshift.io/cluster-monitoring: "true"
        name: openshift-tempo-operator
      EOF
    2. 다음 명령을 실행하여 operator 그룹을 생성합니다.

      $ oc apply -f - << EOF
      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: openshift-tempo-operator
        namespace: openshift-tempo-operator
      spec:
        upgradeStrategy: Default
      EOF
    3. 다음 명령을 실행하여 서브스크립션을 생성합니다.

      $ oc apply -f - << EOF
      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: tempo-product
        namespace: openshift-tempo-operator
      spec:
        channel: stable
        installPlanApproval: Automatic
        name: tempo-product
        source: redhat-operators
        sourceNamespace: openshift-marketplace
      EOF
    4. 다음 명령을 실행하여 Operator 상태를 확인합니다.

      $ oc get csv -n openshift-tempo-operator
  2. 후속 단계에서 생성할 TempoStack 인스턴스에 대해 선택한 프로젝트를 생성합니다.

    • 메타데이터 없이 표준 입력에서 프로젝트를 생성하려면 다음을 수행합니다.

      $ oc new-project <project_of_tempostack_instance>
    • 메타데이터를 사용하여 표준 입력에서 프로젝트를 생성하려면 다음을 수행합니다.

      $ oc apply -f - << EOF
      apiVersion: project.openshift.io/v1
      kind: Project
      metadata:
        name: <project_of_tempostack_instance>
      EOF
  3. TempoStack 인스턴스에 대해 생성한 프로젝트에서 다음 명령 중 하나를 실행하여 오브젝트 스토리지 버킷에 대한 시크릿을 생성합니다.

    • YAML 파일에서 보안을 생성하려면 다음을 수행합니다.

      $ oc apply -f <secret_file>.yaml
    • 표준 입력에서 보안을 생성하려면 다음을 수행합니다.

      $ oc apply -f - << EOF
      <object_storage_secret>
      EOF

      표 4.2. 필수 시크릿 매개변수

      스토리지 공급자

      시크릿 매개변수

      Red Hat OpenShift Data Foundation

      이름: tempostack-dev-odf # example

      버킷: <bucket_name> # requires an ObjectBucketClaim

      endpoint: https://s3.openshift-storage.svc

      access_key_id: <data_foundation_access_key_id>

      access_key_secret: <data_foundation_access_key_secret>

      MinIO

      MinIO Operator 를 참조하십시오.

      이름: tempostack-dev-minio # example

      bucket: <minio_bucket_name> # MinIO documentation

      endpoint: <minio_bucket_endpoint>

      access_key_id: <minio_access_key_id>

      access_key_secret: <minio_access_key_secret>

      Amazon S3

      이름: tempostack-dev-s3 # example

      버킷: <s3_bucket_name> # Amazon S3 문서

      endpoint: <s3_bucket_endpoint>

      access_key_id: <s3_access_key_id>

      access_key_secret: <s3_access_key_secret>

      Microsoft Azure Blob Storage

      이름: tempostack-dev-azure # example

      컨테이너: <azure_blob_storage_container_name> # Microsoft Azure 설명서

      account_name: <azure_blob_storage_account_name>

      account_key: <azure_blob_storage_account_key>

      GCP(Google Cloud Platform)의 Google Cloud Storage

      이름: tempostack-dev-gcs # example

      버킷 이름: {_cloud_storage_bucket_nam> # GCP 프로젝트에서 버킷 이 생성됨

      key.json: <path/to/key.json> # GCP 인증을 위해 버킷의 GCP 프로젝트에 서비스 계정이 필요합니다.

      Amazon S3 및 MinIO 스토리지의 시크릿 예

      apiVersion: v1
      kind: Secret
      metadata:
        name: minio-test
      stringData:
        endpoint: http://minio.minio.svc:9000
        bucket: tempo
        access_key_id: tempo
        access_key_secret: <secret>
      type: Opaque

  4. TempoStack 인스턴스에 대해 생성한 프로젝트에서 TempoStack 인스턴스를 생성합니다.

    참고

    동일한 클러스터의 별도의 프로젝트에서 여러 TempoStack 인스턴스를 생성할 수 있습니다.

    1. TempoStack CR(사용자 정의 리소스)을 사용자 정의합니다.

      apiVersion: tempo.grafana.com/v1alpha1
      kind: TempoStack
      metadata:
        name: sample
        namespace: <project_of_tempostack_instance>
      spec:
        storageSize: 1Gi
        storage:
            secret:
                name: <secret-name> 1
                type: <secret-provider> 2
        template:
          queryFrontend:
            jaegerQuery:
              enabled: true
              ingress:
                route:
                  termination: edge
                type: route
      1
      시크릿 메타데이터에 있는 이름 값입니다.
      2
      허용되는 값은 Azure Blob Storage에 azure, Google Cloud Storage용 gcs, Amazon S3, MinIO 또는 Red Hat OpenShift Data Foundation의 경우 s3 입니다.

      AWS S3 및 MinIO 스토리지용 TempoStack CR

      apiVersion: tempo.grafana.com/v1alpha1
      kind: TempoStack
      metadata:
        name: simplest
        namespace: project_of_tempostack_instance
      spec:
        storageSize: 1Gi
        storage:
          secret:
            name: minio-test
            type: s3
        resources:
          total:
            limits:
              memory: 2Gi
              cpu: 2000m
        template:
          queryFrontend:
            jaegerQuery:
              enabled: true
              ingress:
                route:
                  termination: edge
                type: route

      이 예제에 배포된 스택은 Jaeger UI로 데이터를 시각화할 수 있는 HTTP 및 OpenTelemetry Protocol(OTLP)을 통해 Jaeger Thrift를 수신하도록 구성되어 있습니다.

    2. 다음 명령을 실행하여 사용자 지정된 CR을 적용합니다.

      $ oc apply -f - << EOF
      <TempoStack_custom_resource>
      EOF

검증

  1. 다음 명령을 실행하여 모든 TempoStack 구성 요소의 상태가 Running 이고 조건이 type: Ready 인지 확인합니다.

    $ oc get tempostacks.tempo.grafana.com simplest -o yaml
  2. 다음 명령을 실행하여 모든 TempoStack 구성 요소 Pod가 실행 중인지 확인합니다.

    $ oc get pods
  3. Tempo 콘솔에 액세스합니다.

    1. 다음 명령을 실행하여 경로 세부 정보를 쿼리합니다.

      $ export TEMPO_URL=$(oc get route -n <control_plane_namespace> tempo -o jsonpath='{.spec.host}')
    2. 웹 브라우저에서 https://<route_from_previous_step >을 엽니다.
    3. 웹 콘솔의 클러스터 관리자 인증 정보를 사용하여 로그인합니다.

      참고

      Tempo 콘솔은 처음에 Tempo 콘솔 설치 후 추적 데이터를 표시하지 않습니다.

4.1.3. 추가 리소스