10.6. 계측 문제 해결
계측 문제를 해결하려면 다음 문제를 찾습니다.
- 워크로드에 계측 삽입 문제
- 계측 라이브러리의 데이터 생성 문제
10.6.1. 워크로드에 계측 삽입 문제 해결
계측 주입 문제를 해결하려면 다음 작업을 수행할 수 있습니다.
-
Instrumentation
오브젝트가 생성되었는지 확인합니다. - init-container가 시작되었는지 확인
- 리소스가 올바른 순서로 배포되었는지 확인
- Operator 로그에서 오류 검색
- Pod 주석을 두 번 점검
프로세스
다음 명령을 실행하여
Instrumentation
오브젝트가 성공적으로 생성되었는지 확인합니다.$ oc get instrumentation -n <workload_project> 1
- 1
- 계측이 생성된 네임스페이스입니다.
다음 명령을 실행하여 워크로드에 삽입하기 위한 사전 요구 사항인
opentelemetry-auto-instrumentation
init-container가 성공적으로 시작되었는지 확인합니다.$ oc get events -n <workload_project> 1
- 1
- 워크로드에 계측이 삽입되는 네임스페이스입니다.
출력 예
... Created container opentelemetry-auto-instrumentation ... Started container opentelemetry-auto-instrumentation
자동 복구가 제대로 작동하려면 리소스가 올바른 순서로 배포되었는지 확인합니다. 올바른 순서는
Instrumentation
CR(사용자 정의 리소스)을 애플리케이션 앞에 배포하는 것입니다.Instrumentation
CR에 대한 자세한 내용은 "케이스팅 구성" 섹션을 참조하십시오.참고Pod가 시작되면 Red Hat build of OpenTelemetry Operator는
Instrumentation
CR에서 auto-instrumentation을 삽입하는 지침이 포함된 주석을 확인합니다. 일반적으로 Operator는 애플리케이션의 컨테이너에 자동 복원 및 환경 변수를 삽입하는 애플리케이션의 Pod에 init-container를 추가합니다. 애플리케이션이 배포될 때 Operator에서Instrumentation
CR을 사용할 수 없는 경우 Operator에서 자동 복원을 삽입할 수 없습니다.배포 순서를 수정하려면 다음 단계가 필요합니다.
- 계측 설정을 업데이트합니다.
- 조정 오브젝트를 삭제합니다.
- 애플리케이션을 재배포합니다.
다음 명령을 실행하여 Operator 로그에 조정 오류가 있는지 검사합니다.
$ oc logs -l app.kubernetes.io/name=opentelemetry-operator --container manager -n openshift-opentelemetry-operator --follow
특정 프로그래밍 언어의 계측에 대한 Pod 주석 문제를 해결합니다. "케이스레이션 구성"의 필수 주석 필드 및 값을 참조하십시오.
계측 중인 애플리케이션 Pod에 올바른 주석이 표시되고 적절한 자동 복구 설정이 적용되었는지 확인합니다.
예
instrumentation.opentelemetry.io/inject-python="true"
조정된 Python 애플리케이션에 대한 Pod 주석을 가져오는 명령의 예
$ oc get pods -n <workload_project> -o jsonpath='{range .items[?(@.metadata.annotations["instrumentation.opentelemetry.io/inject-python"]=="true")]}{.metadata.name}{"\n"}{end}'
- 조정 중인 프로그래밍 언어에 대해 조정 오브젝트에 적용된 주석이 올바른지 확인합니다.
동일한 네임스페이스에 여러 계측기가 있는 경우 주석에
Instrumentation
오브젝트의 이름을 지정합니다.예
instrumentation.opentelemetry.io/inject-nodejs: "<instrumentation_object>"
Instrumentation
오브젝트가 다른 네임스페이스에 있는 경우 주석에 네임스페이스를 지정합니다.예
instrumentation.opentelemetry.io/inject-nodejs: "<other_namespace>/<instrumentation_object>"
-
OpenTelemetryCollector
사용자 지정 리소스가spec.template.metadata.annotations
에서 자동 복구 주석을 지정하는지 확인합니다. 자동 복원 주석이spec.metadata.annotations
에 있는 경우spec.template.metadata.annotations
로 이동합니다.
10.6.2. 계측 라이브러리별 원격 분석 데이터 생성 문제 해결
엔드포인트를 확인하고 애플리케이션 로그의 오류를 찾고 수집기가 Telemetry 데이터를 수신하고 있는지 확인하여 계측 라이브러리에서 원격 분석 데이터 생성 문제를 해결할 수 있습니다.
프로세스
조정이 데이터를 올바른 끝점으로 전송하는지 확인합니다.
$ oc get instrumentation <instrumentation_name> -n <workload_project> -o jsonpath='{.spec.endpoint}'
Instrumentation
오브젝트의 기본 끝점http://localhost:4317
은 애플리케이션 Pod에 사이드카로 배포된 수집기 인스턴스에만 적용됩니다. 잘못된 끝점을 사용하는 경우Instrumentation
오브젝트를 편집하고 애플리케이션을 재배포하여 수정합니다.애플리케이션 로그에서 계측이 오작동 중임을 나타낼 수 있는 오류 메시지를 검사합니다.
$ oc logs <application_pod> -n <workload_project>
- 애플리케이션 로그에 조정이 오작동할 수 있음을 나타내는 오류 메시지가 포함된 경우 OpenTelemetry SDK 및 라이브러리를 로컬로 설치합니다. 그런 다음 애플리케이션을 로컬로 실행하고 OpenShift Container Platform 없이 계측 라이브러리와 애플리케이션 간의 문제를 해결합니다.
- 디버그 내보내기를 사용하여 원격 분석 데이터가 대상 OpenTelemetry 수집기 인스턴스에 도달하는지 확인합니다. 자세한 내용은 "Debug Exporter"를 참조하십시오.