가시성


Red Hat OpenShift Serverless 1.36

관리자 및 개발자 메트릭, 클러스터 로깅 및 추적을 포함한 관찰 기능

Red Hat OpenShift Documentation Team

초록

이 문서에서는 Knative 서비스의 성능을 모니터링하는 방법에 대해 자세히 설명합니다. 또한 OpenShift Serverless에서 OpenShift Logging 및 OpenShift distributed tracing을 사용하는 방법을 자세히 설명합니다.

1장. 관리자 지표

1.1. 서버리스 관리자 메트릭

클러스터 관리자는 메트릭을 사용하여 OpenShift Serverless 클러스터 구성 요소 및 워크로드를 수행하는 방법을 모니터링할 수 있습니다.

모니터링 대시보드 정보 로 이동하여 OpenShift Serverless의 다양한 메트릭을 볼 수 있습니다.

1.1.1. 사전 요구 사항

  • 클러스터 메트릭 활성화에 대한 정보는 메트릭 관리에 대한 OpenShift Container Platform 설명서를 참조하십시오.
  • 클러스터 관리자 액세스 권한이 있는 계정(또는 AWS의 OpenShift Dedicated 또는 Red Hat OpenShift Service의 전용 관리자 액세스)에 액세스할 수 있습니다.
주의

Service Mesh가 mTLS를 사용하여 사용하도록 설정된 경우 Service Mesh가 Prometheus의 메트릭 스크랩을 허용하지 않기 때문에 기본적으로 Knative Serviceing에 대한 메트릭이 사용되지 않도록 설정됩니다.

이 문제를 해결하는 방법에 대한 자세한 내용은 mTLS와 Service Mesh를 사용할 때 Knative Serving 메트릭 활성화를 참조하십시오.

메트릭을 스크랩하는 작업은 스크랩 요청이 활성화를 통과하지 않기 때문에 Knative 서비스의 자동 확장에 영향을 미치지 않습니다. 결과적으로 실행 중인 Pod가 없는 경우 스크랩이 수행되지 않습니다.

1.2. 서버리스 컨트롤러 메트릭

다음 메트릭은 컨트롤러 로직을 구현하는 구성 요소에서 출력됩니다. 이러한 메트릭은 조정 작업 및 조정 요청이 작업 대기열에 추가되는 작업 대기열 동작에 대한 세부 정보를 표시합니다.

Expand
메트릭 이름설명유형태그단위

work_queue_depth

작업 대기열의 깊이

게이지

reconciler

정수(단위 없음)

reconcile_count

조정 작업 수

카운터

reconciler, success

정수(단위 없음)

reconcile_latency

조정 작업 대기 시간

히스토그램

reconciler, success

밀리초

workqueue_adds_total

작업 대기열에서 처리하는 총 추가 작업 수

카운터

name

정수(단위 없음)

workqueue_queue_latency_seconds

항목이 요청되기 전에 작업 대기열에 남아 있는 시간

히스토그램

name

workqueue_retries_total

작업 대기열에서 처리한 총 재시도 횟수

카운터

name

정수(단위 없음)

workqueue_work_duration_seconds

작업 대기열에서 처리하는 데 걸리는 시간 및 항목

히스토그램

name

workqueue_unfinished_work_seconds

처리되지 않은 작업 대기열 항목이 진행 중인 시간

히스토그램

name

workqueue_longest_running_processor_seconds

가장 긴 미결 작업 대기열 항목이 진행 중인 시간

히스토그램

name

1.3. Webhook 메트릭

Webhook 메트릭은 작업에 대한 유용한 정보를 표시합니다. 예를 들어, 많은 작업이 실패하면 사용자가 생성한 리소스에 문제가 있음을 나타내는 것일 수 있습니다.

Expand
메트릭 이름설명유형태그단위

request_count

webhook로 라우팅되는 요청 수입니다.

카운터

admission_allowed, kind_group, kind_kind, kind_version, request_operation, resource_group, resource_namespace, resource_resource, resource_version

정수(단위 없음)

request_latencies

webhook 요청에 대한 응답 시간입니다.

히스토그램

admission_allowed, kind_group, kind_kind, kind_version, request_operation, resource_group, resource_namespace, resource_resource, resource_version

밀리초

1.4. Knative Eventing 메트릭

클러스터 관리자는 Knative Eventing 구성 요소에 대한 다음 메트릭을 볼 수 있습니다.

HTTP 코드에서 메트릭을 집계하여 정상적인 이벤트 (2xx) 및 실패한 이벤트(5xx)의 두 가지 범주로 구분할 수 있습니다.

1.4.1. 브로커 Ingress 메트릭

다음 메트릭을 사용하여 브로커 Ingress를 디버그하고, 수행 방법을 확인하고, Ingress 구성 요소에서 전달되는 이벤트를 확인할 수 있습니다.

Expand
메트릭 이름설명유형태그단위

event_count

브로커가 수신한 이벤트 수.

카운터

broker_name, event_type, namespace_name, response_code, response_code_class, unique_name

정수(단위 없음)

event_dispatch_latencies

이벤트를 채널로 전달하는 데 걸린 시간입니다.

히스토그램

broker_name, event_type, namespace_name, response_code, response_code_class, unique_name

밀리초

1.4.2. 브로커 필터 메트릭

다음 메트릭을 사용하여 브로커 필터를 디버그하고, 수행 방법을 확인하고, 필터에서 전달되는 이벤트를 확인할 수 있습니다. 이벤트에서 필터링 작업의 대기 시간을 측정할 수도 있습니다.

Expand
메트릭 이름설명유형태그단위

event_count

브로커가 수신한 이벤트 수.

카운터

broker_name, container_name, filter_type, namespace_name, response_code, response_code_class, trigger_name, unique_name

정수(단위 없음)

event_dispatch_latencies

이벤트를 채널로 전달하는 데 걸린 시간입니다.

히스토그램

broker_name, container_name, filter_type, namespace_name, response_code, response_code_class, trigger_name, unique_name

밀리초

event_processing_latencies

트리거 구독자에게 전달되기 전에 이벤트를 처리하는 데 걸리는 시간입니다.

히스토그램

broker_name, container_name, filter_type, namespace_name, trigger_name, unique_name

밀리초

1.4.3. InMemoryChannel 디스패처 메트릭

다음 메트릭을 사용하여 InMemoryChannel 채널을 디버그하고, 어떻게 수행하는지, 채널에서 디스패치 중인 이벤트를 확인할 수 있습니다.

Expand
메트릭 이름설명유형태그단위

event_count

InMemoryChannel 채널에서 디스패치하는 이벤트 수.

카운터

broker_name, container_name, filter_type, namespace_name, response_code, response_code_class, trigger_name, unique_name

정수(단위 없음)

event_dispatch_latencies

InMemoryChannel 채널에서 이벤트를 디스패치하는 데 걸린 시간.

히스토그램

broker_name, container_name, filter_type, namespace_name, response_code, response_code_class, trigger_name, unique_name

밀리초

1.4.4. 이벤트 소스 메트릭

다음 메트릭을 사용하여 이벤트 소스에서 연결된 이벤트 싱크로 이벤트가 전달되었는지 확인할 수 있습니다.

Expand
메트릭 이름설명유형태그단위

event_count

이벤트 소스에서 보낸 이벤트 수입니다.

카운터

broker_name, container_name, filter_type, namespace_name, response_code, response_code_class, trigger_name, unique_name

정수(단위 없음)

retry_event_count

처음에 이벤트 소스가 전송되지 못한 후 이벤트 소스에 의해 전송되는 재시도 이벤트 수입니다.

카운터

event_source, event_type, name, namespace_name, resource_group, response_code, response_code_class, response_error, response_timeout

정수(단위 없음)

1.4.5. Knative Kafka 브로커 메트릭

다음 메트릭을 사용하여 Kafka 브로커의 성능을 디버그하고 시각화할 수 있습니다.

Expand
메트릭 이름설명유형태그단위

event_count_1_total{job="kafka-broker-receiver-sm-service", namespace="knative-eventing"}

브로커가 수신한 이벤트 수

카운터

name
브로커 이름
namespace_name
브로커 네임스페이스
event_type
이벤트 유형
response_code
브로커가 반환하는 HTTP 응답 코드
response_code_class
브로커가 반환하는 HTTP 응답 코드 클래스: 2xx, 3xx, 4xx, 5xx

무차원

event_dispatch_latencies_ms_bucket{job="kafka-broker-receiver-sm-service", namespace="knative-eventing"}

Kafka 클러스터에 이벤트를 디스패치하는 데 소요된 시간

히스토그램

name
브로커 이름
namespace_name
브로커 네임스페이스
event_type
이벤트 유형
response_code
브로커가 반환하는 HTTP 응답 코드
response_code_class
브로커가 반환하는 HTTP 응답 코드 클래스: 2xx, 3xx, 4xx, 5xx

밀리초

kafka_broker_controller_consumer_group_expected_replicas

지정된 Kafka 소비자 그룹 리소스에 대해 예상되는 복제본 수

게이지

consumer_name
리소스 이름
namespace_name
리소스 네임스페이스
consumer_kind
리소스 종류, enum: KafkaSource,Trigger,Subscription
참고

이 컨텍스트에서 리소스는 Kafka 소스, 트리거 및 서브스크립션과 같은 사용자 대면 엔터티를 나타냅니다. 이러한 리소스를 사용할 때 내부 또는 생성된 이름을 사용하지 마십시오.

무차원

kafka_broker_controller_consumer_group_ready_replicas

지정된 Kafka 소비자 그룹 리소스에 대해 준비된 복제본 수

게이지

consumer_name
리소스 이름
namespace_name
리소스 네임스페이스
consumer_kind
리소스 종류, enum: KafkaSource,Trigger,Subscription
참고

이 컨텍스트에서 리소스는 Kafka 소스, 트리거 및 서브스크립션과 같은 사용자 대면 엔터티를 나타냅니다. 이러한 리소스를 사용할 때 내부 또는 생성된 이름을 사용하지 마십시오.

무차원

1.4.6. Knative Kafka 트리거 메트릭

다음 메트릭을 사용하여 Kafka 트리거의 성능을 디버그하고 시각화할 수 있습니다.

Expand
메트릭 이름설명유형태그단위

event_count_1_total{job="kafka-broker-dispatcher-sm-service", namespace="knative-eventing"}

트리거에서 구독자로 디스패치한 이벤트 수

카운터

consumer_name
트리거 이름
namespace_name
트리거 네임스페이스
name
브로커 이름
event_type
이벤트 유형
response_code
트리거 구독자 서비스에서 반환하는 HTTP 응답 코드
response_code_class
트리거 구독자 서비스에서 반환된 HTTP 응답 코드 클래스: 2xx, 3xx, 4xx, 5xx

무차원

event_dispatch_latencies_ms_bucket{job="kafka-broker-dispatcher-sm-service", namespace="knative-eventing"}

구독자에게 이벤트를 전달하는 데 소요된 시간

히스토그램

consumer_name
트리거 이름
namespace_name
트리거 네임스페이스
name
브로커 이름
event_type
이벤트 유형
response_code
트리거 구독자 서비스에서 반환하는 HTTP 응답 코드
response_code_class
트리거 구독자 서비스에서 반환된 HTTP 응답 코드 클래스: 2xx, 3xx, 4xx, 5xx

밀리초

event_processing_latencies_ms_bucket{job="kafka-broker-dispatcher-sm-service", namespace="knative-eventing"}

이벤트 처리 및 필터링에 소요된 시간

히스토그램

consumer_name
트리거 이름
namespace_name
트리거 네임스페이스
name
브로커 이름
event_type
이벤트 유형

밀리초

1.4.7. Knative Kafka 채널 메트릭

다음 메트릭을 사용하여 Kafka 채널의 성능을 디버그하고 시각화할 수 있습니다.

Expand
메트릭 이름설명유형태그단위

event_count_1_total{job="kafka-channel-receiver-sm-service", namespace="knative-eventing"}

Kafka 채널에서 수신한 이벤트 수

카운터

name
Kafka 채널 이름
namespace_name
Kafka 채널 네임스페이스
event_type
이벤트 유형
response_code
Kafka 채널에서 반환된 HTTP 응답 코드
response_code_class
Kafka 채널에서 반환된 HTTP 응답 코드 클래스: 2xx, 3xx, 4xx, 5xx

무차원

event_dispatch_latencies_ms_bucket{job="kafka-channel-receiver-sm-service", namespace="knative-eventing"}

Kafka 클러스터에 이벤트를 디스패치하는 데 소요된 시간

히스토그램

name
Kafka 채널 이름
namespace_name
Kafka 채널 네임스페이스
event_type
이벤트 유형
response_code
Kafka 채널에서 반환된 HTTP 응답 코드
response_code_class
Kafka 채널에서 반환된 HTTP 응답 코드 클래스: 2xx, 3xx, 4xx, 5xx

밀리초

1.4.8. Knative Kafka 서브스크립션 메트릭

다음 메트릭을 사용하여 Kafka 채널과 연결된 서브스크립션의 성능을 디버그하고 시각화할 수 있습니다.

Expand
메트릭 이름설명유형태그단위

event_count_1_total{job="kafka-channel-dispatcher-sm-service", namespace="knative-eventing"}

구독자에게 서브스크립션으로 디스패치된 이벤트 수

카운터

consumer_name
서브스크립션 이름
namespace_name
서브스크립션 네임스페이스
name
KafkaChannel 이름
event_type
이벤트 유형
response_code
Subscription subscriber 서비스에서 반환한 HTTP 응답 코드
response_code_class
서브스크립션 구독자 서비스에서 반환된 HTTP 응답 코드 클래스: 2xx, 3xx, 4xx, 5xx

무차원

event_dispatch_latencies_ms_bucket{job="kafka-channel-dispatcher-sm-service", namespace="knative-eventing"}

구독자에게 이벤트를 전달하는 데 소요된 시간

히스토그램

consumer_name
서브스크립션 이름
namespace_name
서브스크립션 네임스페이스
name
KafkaChannel 이름
event_type
이벤트 유형
response_code
Subscription subscriber 서비스에서 반환한 HTTP 응답 코드
response_code_class
서브스크립션 구독자 서비스에서 반환된 HTTP 응답 코드 클래스: 2xx, 3xx, 4xx, 5xx

밀리초

event_processing_latencies_ms_bucket{job="kafka-channel-dispatcher-sm-service", namespace="knative-eventing"}

이벤트 처리 시간

히스토그램

consumer_name
서브스크립션 이름
namespace_name
서브스크립션 네임스페이스
name
KafkaChannel 이름
event_type
이벤트 유형

무차원

1.4.9. Knative Kafka 소스 메트릭

다음 메트릭을 사용하여 Kafka 소스의 성능을 디버그하고 시각화할 수 있습니다.

Expand
메트릭 이름설명유형태그단위

event_count_1_total{job="kafka-source-dispatcher-sm-service", namespace="knative-eventing"}

Kafka 소스에서 디스패치한 이벤트 수

카운터

consumer_name
Kafka 소스 이름
namespace_name
Kafka 소스 네임스페이스
name
Kafka 소스 이름
event_type
이벤트 유형
response_code
Kafka 소스 싱크 서비스에서 반환한 HTTP 응답 코드
response_code_class
Kafka 소스 싱크 서비스에서 반환된 HTTP 응답 코드 클래스: 2xx, 3xx, 4xx, 5xx

무차원

event_dispatch_latencies_ms_bucket{job="kafka-source-dispatcher-sm-service", namespace="knative-eventing"}

이벤트를 싱크로 디스패치하는 데 소요된 시간

히스토그램

consumer_name
Kafka 소스 이름
namespace_name
Kafka 소스 네임스페이스
name
Kafka 소스 이름
event_type
이벤트 유형
response_code
Kafka 소스 싱크 서비스에서 반환한 HTTP 응답 코드
response_code_class
Kafka 소스 싱크 서비스에서 반환된 HTTP 응답 코드 클래스: 2xx, 3xx, 4xx, 5xx

밀리초

event_processing_latencies_ms_bucket{job="kafka-source-dispatcher-sm-service", namespace="knative-eventing"}

이벤트 처리 시간

히스토그램

consumer_name
Kafka 소스 이름
namespace_name
Kafka 소스 네임스페이스
name
Kafka 소스 이름
event_type
이벤트 유형

밀리초

kafka_broker_controller_consumer_group_expected_replicas

지정된 Kafka 소비자 그룹 리소스에 대해 예상되는 복제본 수

게이지

consumer_name
리소스 이름
namespace_name
리소스 네임스페이스
consumer_kind
리소스 종류, enum: KafkaSource,Trigger,Subscription
참고

이 컨텍스트에서 리소스는 Kafka 소스, 트리거 및 서브스크립션과 같은 사용자 대면 엔터티를 나타냅니다. 이러한 리소스를 사용할 때 내부 또는 생성된 이름을 사용하지 마십시오.

무차원

kafka_broker_controller_consumer_group_ready_replicas

지정된 Kafka 소비자 그룹 리소스에 대해 준비된 복제본 수

게이지

consumer_name
리소스 이름
namespace_name
리소스 네임스페이스
consumer_kind
리소스 종류, enum: KafkaSource,Trigger,Subscription
참고

이 컨텍스트에서 리소스는 Kafka 소스, 트리거 및 서브스크립션과 같은 사용자 대면 엔터티를 나타냅니다. 이러한 리소스를 사용할 때 내부 또는 생성된 이름을 사용하지 마십시오.

무차원

1.4.10. Knative Kafka 싱크 메트릭

다음 메트릭을 사용하여 Kafka 싱크의 성능을 디버그하고 시각화할 수 있습니다.

Expand
메트릭 이름설명유형태그단위

event_count_1_total{job="kafka-sink-receiver-sm-service", namespace="knative-eventing"}

브로커가 수신한 이벤트 수

카운터

name
Kafka 싱크 이름
namespace_name
Kafka 싱크 네임스페이스
event_type
이벤트 유형
response_code
Kafka 싱크에서 반환된 HTTP 응답 코드
response_code_class
Kafka 싱크에서 반환된 HTTP 응답 코드 클래스: 2xx, 3xx, 4xx, 5xx

무차원

event_dispatch_latencies_ms_bucket{job="kafka-sink-receiver-sm-service", namespace="knative-eventing"}

Kafka 클러스터에 이벤트를 디스패치하는 데 소요된 시간

히스토그램

name
Kafka 싱크 이름
namespace_name
Kafka 싱크 네임스페이스
event_type
이벤트 유형
response_code
Kafka 싱크에서 반환된 HTTP 응답 코드
response_code_class
Kafka 싱크에서 반환된 HTTP 응답 코드 클래스: 2xx, 3xx, 4xx, 5xx

밀리초

1.5. Knative Serving 메트릭

클러스터 관리자는 Knative Serving 구성 요소에 대한 다음 메트릭을 볼 수 있습니다.

1.5.1. 활성화기 메트릭

다음 메트릭을 사용하여 트래픽이 활성화기를 통해 전달될 때 애플리케이션이 응답하는 방식을 파악할 수 있습니다.

Expand
메트릭 이름설명유형태그단위

request_concurrency

활성화기 또는 보고 기간에 평균 동시성으로 라우팅되는 동시 요청 수입니다.

게이지

configuration_name, container_name, namespace_name, pod_name, revision_name, service_name

정수(단위 없음)

request_count

활성화기로 라우팅되는 요청 수입니다. 이러한 요청은 활성화기 처리기에서 실행된 요청입니다.

카운터

configuration_name, container_name, namespace_name, pod_name, response_code, response_code_class, revision_name, service_name,

정수(단위 없음)

request_latencies

실행된 라우팅된 요청에 대한 응답 시간(밀리초)입니다.

히스토그램

configuration_name, container_name, namespace_name, pod_name, response_code, response_code_class, revision_name, service_name

밀리초

1.5.2. 자동 스케일러 메트릭

자동 스케일러 구성 요소는 각 버전의 자동 스케일러 동작과 관련된 여러 메트릭을 표시합니다. 예를 들어, 자동 스케일러가 서비스에 할당하려는 대상 Pod 수, 안정적인 기간 동안 초당 평균 요청 수 또는 Knative Pod 자동 스케일러(KPA)를 사용하는 경우 자동 스케일러가 패닉 모드인지를 모니터링할 수 있습니다.

Expand
메트릭 이름설명유형태그단위

desired_pods

자동 스케일러가 서비스에 할당하려는 Pod 수입니다.

게이지

configuration_name, namespace_name, revision_name, service_name

정수(단위 없음)

excess_burst_capacity

stable 창에서 제공되는 추가 버스트 용량입니다.

게이지

configuration_name, namespace_name, revision_name, service_name

정수(단위 없음)

stable_request_concurrency

stable 창에서 모니터링되는 각 pod의 평균 요청 수입니다.

게이지

configuration_name, namespace_name, revision_name, service_name

정수(단위 없음)

panic_request_concurrency

panic 창에서 모니터링되는 각 Pod의 평균 요청 수입니다.

게이지

configuration_name, namespace_name, revision_name, service_name

정수(단위 없음)

target_concurrency_per_pod

자동 스케일러가 각 pod에 보내려는 동시 요청 수입니다.

게이지

configuration_name, namespace_name, revision_name, service_name

정수(단위 없음)

stable_requests_per_second

stable 창에서 모니터링되는 각 pod의 평균 요청 수(초당)입니다.

게이지

configuration_name, namespace_name, revision_name, service_name

정수(단위 없음)

panic_requests_per_second

panic 창에서 모니터링되는 각 Pod의 평균 요청 수입니다.

게이지

configuration_name, namespace_name, revision_name, service_name

정수(단위 없음)

target_requests_per_second

각 pod에 대해 자동 스케일러가 대상으로 하는 초당 요청 수입니다.

게이지

configuration_name, namespace_name, revision_name, service_name

정수(단위 없음)

panic_mode

자동 스케일러가 패닉 모드이면 이 값은 1이며 자동 스케일러가 패닉 모드가 아닌 경우 0입니다.

게이지

configuration_name, namespace_name, revision_name, service_name

정수(단위 없음)

requested_pods

Kubernetes 클러스터에서 자동 스케일러가 요청한 Pod 수입니다.

게이지

configuration_name, namespace_name, revision_name, service_name

정수(단위 없음)

actual_pods

할당되어 있고 현재 준비 상태인 Pod 수입니다.

게이지

configuration_name, namespace_name, revision_name, service_name

정수(단위 없음)

not_ready_pods

준비되지 않은 상태의 Pod 수입니다.

게이지

configuration_name, namespace_name, revision_name, service_name

정수(단위 없음)

pending_pods

현재 보류 중인 pod 수입니다.

게이지

configuration_name, namespace_name, revision_name, service_name

정수(단위 없음)

terminating_pods

현재 종료 중인 Pod 수입니다.

게이지

configuration_name, namespace_name, revision_name, service_name

정수(단위 없음)

1.5.3. Go 런타임 메트릭

각 Knative Serving 컨트롤 플레인 프로세스는 수많은 Go 런타임 메모리 통계(MemStats)를 출력합니다.

참고

각 메트릭의 name 태그는 빈 태그입니다.

Expand
메트릭 이름설명유형태그단위

go_alloc

할당된 힙 오브젝트의 바이트 수입니다. 이 메트릭은 heap_alloc과 동일합니다.

게이지

name

정수(단위 없음)

go_total_alloc

힙 오브젝트에 할당된 누적 바이트 수입니다.

게이지

name

정수(단위 없음)

go_sys

운영 체제에서 얻은 총 메모리 바이트 수입니다.

게이지

name

정수(단위 없음)

go_lookups

런타임에서 수행하는 포인터 검색 수입니다.

게이지

name

정수(단위 없음)

go_mallocs

할당된 힙 오브젝트의 누적 개수입니다.

게이지

name

정수(단위 없음)

go_frees

해제된 힙 오브젝트의 누적 개수입니다.

게이지

name

정수(단위 없음)

go_heap_alloc

할당된 힙 오브젝트의 바이트 수입니다.

게이지

name

정수(단위 없음)

go_heap_sys

운영 체제에서 얻은 힙 메모리의 바이트 수입니다.

게이지

name

정수(단위 없음)

go_heap_idle

유휴 상태의 사용되지 않는 범위의 바이트 수입니다.

게이지

name

정수(단위 없음)

go_heap_in_use

현재 사용 중인 범위의 바이트 수입니다.

게이지

name

정수(단위 없음)

go_heap_released

운영 체제로 반환되는 실제 메모리의 바이트 수입니다.

게이지

name

정수(단위 없음)

go_heap_objects

할당된 힙 오브젝트 수입니다.

게이지

name

정수(단위 없음)

go_stack_in_use

현재 사용 중인 스택 범위의 바이트 수입니다.

게이지

name

정수(단위 없음)

go_stack_sys

운영 체제에서 얻은 스택 메모리의 바이트 수입니다.

게이지

name

정수(단위 없음)

go_mspan_in_use

할당된 mspan 구조의 바이트 수입니다.

게이지

name

정수(단위 없음)

go_mspan_sys

mspan 구조의 운영 체제에서 얻은 메모리 바이트 수입니다.

게이지

name

정수(단위 없음)

go_mcache_in_use

할당된 mcache 구조의 바이트 수입니다.

게이지

name

정수(단위 없음)

go_mcache_sys

mcache 구조의 운영 체제에서 얻은 메모리 바이트 수입니다.

게이지

name

정수(단위 없음)

go_bucket_hash_sys

버킷 해시 테이블 프로파일에서의 메모리 바이트 수입니다.

게이지

name

정수(단위 없음)

go_gc_sys

가비지 컬렉션 메타데이터의 메모리 바이트 수입니다.

게이지

name

정수(단위 없음)

go_other_sys

기타, 오프-힙 런타임 할당의 메모리 바이트 수입니다.

게이지

name

정수(단위 없음)

go_next_gc

다음 가비지 컬렉션 사이클의 대상 힙 크기입니다.

게이지

name

정수(단위 없음)

go_last_gc

마지막 가비지 컬렉션이Epoch 또는 Unix 시간으로 완료된 시간입니다.

게이지

name

나노초

go_total_gc_pause_ns

프로그램이 시작된 이후 가비지 컬렉션 stop-the-world 일시 중지의 누적 시간입니다

게이지

name

나노초

go_num_gc

완료된 가비지 컬렉션 사이클 수입니다.

게이지

name

정수(단위 없음)

go_num_forced_gc

가비지 컬렉션 기능을 호출하는 애플리케이션으로 인해 강제된 가비지 컬렉션 사이클의 수입니다.

게이지

name

정수(단위 없음)

go_gc_cpu_fraction

프로그램이 시작된 이후 가비지 컬렉터에서 사용한 프로그램의 사용 가능한 일부 CPU 시간입니다.

게이지

name

정수(단위 없음)

2장. 개발자 메트릭

2.1. 서버리스 개발자 메트릭 개요

지표를 사용하면 개발자가 Knative 서비스 성능을 모니터링할 수 있습니다. OpenShift Container Platform 모니터링 스택을 사용하여 Knative 서비스에 대한 상태 점검 및 메트릭을 기록하고 확인할 수 있습니다.

모니터링 대시보드정보로 이동하여 OpenShift Serverless의 다양한 메트릭을 볼 수 있습니다.

주의

Service Mesh가 mTLS를 사용하여 사용하도록 설정된 경우 Service Mesh가 Prometheus의 메트릭 스크랩을 허용하지 않기 때문에 기본적으로 Knative Serviceing에 대한 메트릭이 사용되지 않도록 설정됩니다.

이 문제를 해결하는 방법에 대한 자세한 내용은 mTLS와 Service Mesh를 사용할 때 Knative Serving 메트릭 활성화를 참조하십시오.

메트릭을 스크랩하는 작업은 스크랩 요청이 활성화를 통과하지 않기 때문에 Knative 서비스의 자동 확장에 영향을 미치지 않습니다. 결과적으로 실행 중인 Pod가 없는 경우 스크랩이 수행되지 않습니다.

2.2. 기본적으로 노출되는 Knative 서비스 메트릭

Expand
표 2.1. 포트 9091의 각 Knative 서비스에 대해 기본적으로 노출되는 메트릭
메트릭 이름, 단위 및 유형설명메트릭 태그

request_count

메트릭 단위: 무차원 단위

메트릭 유형: 카운터

queue-proxy로 라우팅되는 요청 수입니다.

configuration_name="event-display", container_name="queue-proxy", namespace_name="apiserversource1", pod_name="event-display-00001-deployment-658fd4f9cf-qcnr5", response_code="200", response_code_class="2xx", revision_name="event-display-00001", service_name="event-display"

request_latencies

메트릭 단위: 밀리초

메트릭 유형: 히스토그램

응답 시간(밀리초)입니다.

configuration_name="event-display", container_name="queue-proxy", namespace_name="apiserversource1", pod_name="event-display-00001-deployment-658fd4f9cf-qcnr5", response_code="200", response_code_class="2xx", revision_name="event-display-00001", service_name="event-display"

app_request_count

메트릭 단위: 무차원 단위

메트릭 유형: 카운터

user-container로 라우팅되는 요청 수입니다.

configuration_name="event-display", container_name="queue-proxy", namespace_name="apiserversource1", pod_name="event-display-00001-deployment-658fd4f9cf-qcnr5", response_code="200", response_code_class="2xx", revision_name="event-display-00001", service_name="event-display"

app_request_latencies

메트릭 단위: 밀리초

메트릭 유형: 히스토그램

응답 시간(밀리초)입니다.

configuration_name="event-display", container_name="queue-proxy", namespace_name="apiserversource1", pod_name="event-display-00001-deployment-658fd4f9cf-qcnr5", response_code="200", response_code_class="2xx", revision_name="event-display-00001", service_name="event-display"

queue_depth

메트릭 단위: 무차원 단위

메트릭 유형: 게이지

서비스 및 대기열에 있는 현재 항목 수 또는 무제한 동시 실행인 경우 보고되지 않은 항목 수입니다. breaker.inFlight가 사용됩니다.

configuration_name="event-display", container_name="queue-proxy", namespace_name="apiserversource1", pod_name="event-display-00001-deployment-658fd4f9cf-qcnr5", response_code="200", response_code_class="2xx", revision_name="event-display-00001", service_name="event-display"

2.3. 사용자 정의 애플리케이션 메트릭이 있는 Knative 서비스

Knative 서비스에서 내보낸 메트릭 집합을 확장할 수 있습니다. 정확한 구현은 애플리케이션 및 사용된 언어에 따라 다릅니다.

다음 목록에서는 처리된 이벤트 사용자 지정 메트릭을 내보내는 샘플 Go 애플리케이션을 구현합니다.

package main

import (
  "fmt"
  "log"
  "net/http"
  "os"

  "github.com/prometheus/client_golang/prometheus" 
1

  "github.com/prometheus/client_golang/prometheus/promauto"
  "github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
  opsProcessed = promauto.NewCounter(prometheus.CounterOpts{ 
2

     Name: "myapp_processed_ops_total",
     Help: "The total number of processed events",
  })
)


func handler(w http.ResponseWriter, r *http.Request) {
  log.Print("helloworld: received a request")
  target := os.Getenv("TARGET")
  if target == "" {
     target = "World"
  }
  fmt.Fprintf(w, "Hello %s!\n", target)
  opsProcessed.Inc() 
3

}

func main() {
  log.Print("helloworld: starting server...")

  port := os.Getenv("PORT")
  if port == "" {
     port = "8080"
  }

  http.HandleFunc("/", handler)

  // Separate server for metrics requests
  go func() { 
4

     mux := http.NewServeMux()
     server := &http.Server{
        Addr: fmt.Sprintf(":%s", "9095"),
        Handler: mux,
     }
     mux.Handle("/metrics", promhttp.Handler())
     log.Printf("prometheus: listening on port %s", 9095)
     log.Fatal(server.ListenAndServe())
  }()

   // Use same port as normal requests for metrics
  //http.Handle("/metrics", promhttp.Handler()) 
5

  log.Printf("helloworld: listening on port %s", port)
  log.Fatal(http.ListenAndServe(fmt.Sprintf(":%s", port), nil))
}
Copy to Clipboard Toggle word wrap
1
Prometheus 패키지 포함.
2
opsProcessed 메트릭 정의.
3
opsProcessed 메트릭 증가.
4
메트릭 요청에 대해 별도의 서버를 사용하도록 구성.
5
메트릭 및 metrics 하위 경로에 대한 일반 요청과 동일한 포트를 사용하도록 구성.

2.4. 사용자 정의 메트릭 스크랩 구성

사용자 정의 메트릭 스크랩은 사용자 워크로드 모니터링을 위해 Prometheus의 인스턴스에서 수행합니다. 사용자 워크로드 모니터링을 활성화하고 애플리케이션을 생성한 후에는 모니터링 스택에서 메트릭을 스크랩하는 방법을 정의하는 구성이 필요합니다.

다음 샘플 구성은 애플리케이션에 대한 ksvc를 정의하고 서비스 모니터를 구성합니다. 정확한 구성은 애플리케이션과 메트릭을 내보내는 방법에 따라 다릅니다.

apiVersion: serving.knative.dev/v1 
1

kind: Service
metadata:
  name: helloworld-go
spec:
  template:
    metadata:
      labels:
        app: helloworld-go
      annotations:
    spec:
      containers:
      - image: docker.io/skonto/helloworld-go:metrics
        resources:
          requests:
            cpu: "200m"
        env:
        - name: TARGET
          value: "Go Sample v1"
---
apiVersion: monitoring.coreos.com/v1 
2

kind: ServiceMonitor
metadata:
  labels:
  name: helloworld-go-sm
spec:
  endpoints:
  - port: queue-proxy-metrics
    scheme: http
  - port: app-metrics
    scheme: http
  namespaceSelector: {}
  selector:
    matchLabels:
       name:  helloworld-go-sm
---
apiVersion: v1 
3

kind: Service
metadata:
  labels:
    name:  helloworld-go-sm
  name:  helloworld-go-sm
spec:
  ports:
  - name: queue-proxy-metrics
    port: 9091
    protocol: TCP
    targetPort: 9091
  - name: app-metrics
    port: 9095
    protocol: TCP
    targetPort: 9095
  selector:
    serving.knative.dev/service: helloworld-go
  type: ClusterIP
Copy to Clipboard Toggle word wrap
1
애플리케이션 사양.
2
스크랩되는 애플리케이션의 메트릭 구성.
3
메트릭을 스크랩하는 방식의 구성.

2.5. 서비스의 메트릭 검사

메트릭을 내보내도록 애플리케이션을 구성하고 모니터링 스택을 스크랩하면 웹 콘솔에서 메트릭을 검사할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔에 로그인했습니다.
  • OpenShift Serverless Operator 및 Knative Serving이 설치되어 있습니다.

프로세스

  1. 선택 사항: 메트릭에서 볼 수 있는 애플리케이션에 대한 요청을 실행합니다.

    $ hello_route=$(oc get ksvc helloworld-go -n ns1 -o jsonpath='{.status.url}') && \
        curl $hello_route
    Copy to Clipboard Toggle word wrap

    출력 예

    Hello Go Sample v1!
    Copy to Clipboard Toggle word wrap

  2. 웹 콘솔에서 모니터링메트릭 인터페이스로 이동합니다.
  3. 입력 필드에 모니터링할 메트릭의 쿼리를 입력합니다. 예를 들면 다음과 같습니다.

    revision_app_request_count{namespace="ns1", job="helloworld-go-sm"}
    Copy to Clipboard Toggle word wrap

    다른 예:

    myapp_processed_ops_total{namespace="ns1", job="helloworld-go-sm"}
    Copy to Clipboard Toggle word wrap
  4. 시각화된 메트릭을 모니터링합니다.

2.5.1. 대기열 프록시 메트릭

각 Knative 서비스에는 애플리케이션 컨테이너에 대한 연결을 프록시하는 프록시 컨테이너가 있습니다. 큐 프록시 성능에 대해 여러 메트릭이 보고됩니다.

다음 메트릭을 사용하여 요청이 프록시 측에 대기되었는지 및 애플리케이션에서 요청을 처리할 때의 실제 지연을 측정할 수 있습니다.

Expand
메트릭 이름설명유형태그단위

revision_request_count

queue-proxy Pod로 라우팅되는 요청 수입니다.

카운터

configuration_name, container_name, namespace_name, pod_name, response_code, response_code_class, revision_name, service_name

정수(단위 없음)

revision_request_latencies

수정 버전 요청의 응답 시간입니다.

히스토그램

configuration_name, container_name, namespace_name, pod_name, response_code, response_code_class, revision_name, service_name

밀리초

revision_app_request_count

user-container pod로 라우팅되는 요청 수입니다.

카운터

configuration_name, container_name, namespace_name, pod_name, response_code, response_code_class, revision_name, service_name

정수(단위 없음)

revision_app_request_latencies

수정 버전 앱 요청의 응답 시간입니다.

히스토그램

configuration_name, namespace_name, pod_name, response_code, response_code_class, revision_name, service_name

밀리초

revision_queue_depth

servingwaiting 대기열의 현재 항목 수입니다. 무제한 동시 실행이 구성된 경우 이 메트릭은 보고되지 않습니다.

게이지

configuration_name, event-display, container_name, namespace_name, pod_name, response_code_class, revision_name, service_name

정수(단위 없음)

2.6. 서비스 메트릭 대시보드

네임스페이스별로 큐 프록시 메트릭을 집계하는 전용 대시보드를 사용하여 메트릭을 검사할 수 있습니다.

2.6.1. 대시보드에서 서비스의 메트릭 검사

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔에 로그인했습니다.
  • OpenShift Serverless Operator 및 Knative Serving이 설치되어 있습니다.

프로세스

  1. 웹 콘솔에서 모니터링메트릭 인터페이스로 이동합니다.
  2. Knative 사용자 서비스(Queue 프록시 메트릭) 대시보드를 선택합니다.
  3. 애플리케이션에 해당하는 네임스페이스,구성개정 버전을 선택합니다.
  4. 시각화된 메트릭을 관찰합니다.

3장. 클러스터 로깅

3.1. Serving 및 Eventing에 대한 로그 설정 구성

KnativeServingKnativeEventing 사용자 정의 리소스(CR)를 사용하여 OpenShift Serverless Serving 및 OpenShift Serverless Eventing에 대한 로깅을 구성할 수 있습니다. 로깅 수준은 지정된 loglevel 값에 따라 결정됩니다.

3.1.1. 지원되는 로그 수준

다음 loglevel 값이 지원됩니다.

Expand
표 3.1. 지원되는 로그 수준
로그 수준설명

debug

세분화된 디버깅

info

일반 로깅

warn

예기치 않은, 중요하지 않은 오류

error

심각한 오류; 정상적인 작업 중 예기치 않은

dpanic

디버그 모드에서 패닉(crash)을 트리거합니다.

주의

프로덕션에 디버그 수준을 사용하면 성능에 부정적인 영향을 미칠 수 있습니다.

3.1.2. 로그 설정 구성

KnativeServing CR(사용자 정의 리소스) 및 KnativeEventing CR에서 Serving 및 Eventing에 대한 로깅을 구성할 수 있습니다.

프로세스

  • KnativeServingKnativeEventing CR에서 loglevel 값을 설정하거나 수정하여 Serving 및 Eventing의 로그 설정을 구성합니다. 다음은 level info 로 설정된 가능한 모든 로깅 옵션을 포함하는 두 가지 예제 구성입니다.

    KnativeServing CR

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      config:
        logging:
          loglevel.controller: "info"
          loglevel.autoscaler: "info"
          loglevel.queueproxy: "info"
          loglevel.webhook: "info"
          loglevel.activator: "info"
          loglevel.hpaautoscaler: "info"
          loglevel.net-certmanager-controller: "info"
          loglevel.net-istio-controller: "info"
          loglevel.net-kourier-controller: "info"
    Copy to Clipboard Toggle word wrap

    KnativeEventing CR

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      config:
        logging:
          loglevel.controller: "info"
          loglevel.eventing-webhook: "info"
          loglevel.inmemorychannel-dispatcher: "info"
          loglevel.inmemorychannel-webhook: "info"
          loglevel.mt-broker-controller: "info"
          loglevel.mt_broker_filter: "info"
          loglevel.mt_broker_ingress: "info"
          loglevel.pingsource-mt-adapter: "info"
    Copy to Clipboard Toggle word wrap

3.1.3. 요청 로그 설정 구성

KnativeServing 사용자 정의 리소스(CR)의 observability 필드에서 서비스에 대한 요청 로깅을 구성할 수 있습니다.

요청 로깅 구성에 사용 가능한 매개변수에 대한 자세한 내용은 "요청 로깅의 매개변수"를 참조하십시오.

프로세스

  • KnativeServing CR의 observability 필드를 수정하여 서비스에 대한 요청 로깅을 구성합니다.

    KnativeServing CR의 예

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    # ...
    spec:
      config:
        observability:
            logging.enable-request-log: true
            logging.enable-probe-request-log: true
            logging.request-log-template: '{"httpRequest": {"requestMethod": "{{.Request.Method}}", "requestUrl": "{{js .Request.RequestURI}}", "requestSize": "{{.Request.ContentLength}}", "status": {{.Response.Code}}, "responseSize": "{{.Response.Size}}", "userAgent": "{{js .Request.UserAgent}}", "remoteIp": "{{js .Request.RemoteAddr}}", "serverIp": "{{.Revision.PodIP}}", "referer": "{{js .Request.Referer}}", "latency": "{{.Response.Latency}}s", "protocol": "{{.Request.Proto}}"}, "traceId": "{{index .Request.Header "X-B3-Traceid"}}"}'
    # ...
    Copy to Clipboard Toggle word wrap

3.1.4. 요청 로깅 매개변수

다음 표에서는 요청 로깅을 구성하는 데 사용되는 매개변수를 설명합니다.

Expand
표 3.2. 로깅 구성 매개변수 요청
매개변수유형설명

logging.enable-request-log

부울(true 또는 false)

요청 로깅을 활성화하려면 true 로 설정합니다.

logging.enable-probe-request-log

부울(true 또는 false)

queue 프록시가 stdout에 대한 프로브 요청을 기록하도록 활성화하려면 true 로 설정합니다. logging.request-log-template 에 지정된 템플릿을 사용합니다.

logging.request-log-template

텍스트/템플릿 문자열 이동

요청 로그의 모양을 확인합니다. 한 줄로 로그를 여러 레코드로 분할하지 못하도록 합니다.

logging.request-log-template 매개변수에는 다음 기능이 포함됩니다.

  • request 는 서버에서 수신한 HTTP 요청을 나타내는 http.Request 입니다.
  • response 는 HTTP 응답을 나타내며 다음 필드를 포함합니다.

    • 코드 는 HTTP 상태 코드입니다.
    • 크기는 바이트 단위의 응답 크기입니다.
    • 대기 시간은 응답 대기 시간(초)입니다.
  • 개정 버전에는 버전 세부 정보가 포함되어 있으며 다음 필드가 포함됩니다.

    • name 은 버전 이름입니다.
    • 네임스페이스 는 버전의 네임스페이스입니다.
    • 서비스는 서비스 이름입니다.
    • 구성은 구성 의 이름입니다.
    • PodName 은 버전을 호스팅하는 Pod의 이름입니다.
    • PodIP 는 호스팅 pod의 IP 주소입니다.

4장. 추적

4.1. 요청 추적

분산 추적은 애플리케이션을 구성하는 다양한 서비스를 통해 요청 경로를 기록합니다. 이 기능은 분산 트랜잭션의 전체 이벤트 체인을 이해하기 위해 서로 다른 작업 단위에 대한 정보를 함께 연결하는 데 사용됩니다. 작업 단위는 여러 프로세스 또는 호스트에서 실행될 수 있습니다.

4.1.1. 분산 추적 개요

서비스 소유자로서 분산 추적을 사용하여 서비스 아키텍처에 대한 정보를 수집하도록 서비스를 조정할 수 있습니다. 최신 클라우드 네이티브, 마이크로서비스 기반 애플리케이션의 구성 요소 간 상호 작용, 모니터링, 네트워크 프로파일링 및 문제 해결에 분산 추적을 사용할 수 있습니다.

분산 추적을 사용하면 다음 기능을 수행할 수 있습니다.

  • 분산 트랜잭션 모니터링
  • 성능 및 대기 시간 최적화
  • 근본 원인 분석 수행

Red Hat OpenShift 분산 추적은 다음 두 가지 주요 구성 요소로 구성됩니다.

  • Red Hat OpenShift 분산 추적 platform - 이 구성 요소는 오픈 소스 Jaeger 프로젝트를 기반으로 합니다.
  • Red Hat OpenShift 분산 추적 data collection - 이 구성 요소는 오픈 소스 OpenTelemetry 프로젝트를 기반으로 합니다.

이러한 두 구성 요소는 벤더 중립 OpenTracing API 및 계측을 기반으로 합니다.

4.2. Red Hat OpenShift distributed tracing 사용

Red Hat OpenShift distributed tracing을 OpenShift Serverless와 함께 사용하여 서버리스 애플리케이션을 모니터링하고 문제를 해결할 수 있습니다.

4.2.1. Red Hat OpenShift distributed tracing을 사용하여 분산 추적 활성화

Red Hat OpenShift 분석 추적은 추적 데이터를 수집, 저장 및 표시하기 위해 함께 작동하는 여러 구성 요소로 구성됩니다.

사전 요구 사항

  • 클러스터 관리자 액세스 권한이 있는 OpenShift Container Platform 계정에 액세스할 수 있습니다.
  • OpenShift Container Platform "Distributed tracing 설치" 문서에 따라 Red Hat OpenShift distributed tracing을 설치했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

프로세스

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

    OpenTelemetryCollector CR의 예

    apiVersion: opentelemetry.io/v1alpha1
    kind: OpenTelemetryCollector
    metadata:
      name: cluster-collector
      namespace: <namespace>
    spec:
      mode: deployment
      config: |
        receivers:
          zipkin:
        processors:
        exporters:
          jaeger:
            endpoint: jaeger-all-in-one-inmemory-collector-headless.tracing-system.svc:14250
            tls:
              ca_file: "/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt"
          logging:
        service:
          pipelines:
            traces:
              receivers: [zipkin]
              processors: []
              exporters: [jaeger, logging]
    Copy to Clipboard Toggle word wrap

  2. Red Hat OpenShift distributed tracing이 설치된 네임스페이스에서 두 개의 포드가 실행되고 있는지 확인합니다.

    $ oc get pods -n <namespace>
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                          READY   STATUS    RESTARTS   AGE
    cluster-collector-collector-85c766b5c-b5g99   1/1     Running   0          5m56s
    jaeger-all-in-one-inmemory-ccbc9df4b-ndkl5    2/2     Running   0          15m
    Copy to Clipboard Toggle word wrap

  3. 다음 헤드리스 서비스가 생성되었는지 확인합니다.

    $ oc get svc -n <namespace> | grep headless
    Copy to Clipboard Toggle word wrap

    출력 예

    cluster-collector-collector-headless            ClusterIP   None             <none>        9411/TCP                                 7m28s
    jaeger-all-in-one-inmemory-collector-headless   ClusterIP   None             <none>        9411/TCP,14250/TCP,14267/TCP,14268/TCP   16m
    Copy to Clipboard Toggle word wrap

    이러한 서비스는 Jaeger, Knative Serving 및 Knative Eventing을 구성하는 데 사용됩니다. Jaeger 서비스의 이름은 다를 수 있습니다.

  4. "OpenShift Serverless Operator 설치" 설명서에 따라 OpenShift Serverless Operator를 설치합니다.
  5. 다음 KnativeServing CR을 생성하여 Knative Serving 을 설치합니다.

    KnativeServing CR의 예

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
        name: knative-serving
        namespace: knative-serving
    spec:
      config:
        tracing:
          backend: "zipkin"
          zipkin-endpoint: "http://cluster-collector-collector-headless.tracing-system.svc:9411/api/v2/spans"
          debug: "false"
          sample-rate: "0.1" 
    1
    Copy to Clipboard Toggle word wrap

    1
    sample-rate는 샘플링 가능성을 정의합니다. sample-rate: "0.1" 을 사용하면 10개의 추적 중 1개가 샘플링됩니다.
  6. 다음 KnativeEventing CR을 생성하여 Knative Eventing을 설치합니다.

    KnativeEventing CR의 예

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
        name: knative-eventing
        namespace: knative-eventing
    spec:
      config:
        tracing:
          backend: "zipkin"
          zipkin-endpoint: "http://cluster-collector-collector-headless.tracing-system.svc:9411/api/v2/spans"
          debug: "false"
          sample-rate: "0.1" 
    1
    Copy to Clipboard Toggle word wrap

    1
    sample-rate는 샘플링 가능성을 정의합니다. sample-rate: "0.1" 을 사용하면 10개의 추적 중 1개가 샘플링됩니다.
  7. Knative 서비스를 생성합니다.

    서비스의 예

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: helloworld-go
    spec:
      template:
        metadata:
          labels:
            app: helloworld-go
          annotations:
            autoscaling.knative.dev/minScale: "1"
            autoscaling.knative.dev/target: "1"
        spec:
          containers:
          - image: quay.io/openshift-knative/helloworld:v1.2
            imagePullPolicy: Always
            resources:
              requests:
                cpu: "200m"
            env:
            - name: TARGET
              value: "Go Sample v1"
    Copy to Clipboard Toggle word wrap

  8. 서비스에 대한 일부 요청을 수행합니다.

    HTTPS 요청의 예

    $ curl https://helloworld-go.example.com
    Copy to Clipboard Toggle word wrap

  9. Jaeger 웹 콘솔의 URL을 가져옵니다.

    명령 예

    $ oc get route jaeger-all-in-one-inmemory  -o jsonpath='{.spec.host}' -n <namespace>
    Copy to Clipboard Toggle word wrap

    이제 Jaeger 콘솔을 사용하여 추적을 검사할 수 있습니다.

4.3. Jaeger 분산 추적 사용

Red Hat OpenShift distributed tracing의 모든 구성 요소를 설치하지 않으려면 OpenShift Serverless와 함께 OpenShift Container Platform에서 분산 추적을 계속 사용할 수 있습니다.

4.3.1. 분산 추적을 활성화하도록 Jaeger 구성

Jaeger를 사용하여 분산 추적을 활성화하려면 Jaeger를 독립 실행형 통합으로 설치하고 구성해야 합니다.

사전 요구 사항

  • OpenShift Container Platform에 대한 클러스터 관리자 권한이 있거나 AWS 또는 OpenShift Dedicated의 Red Hat OpenShift Service에 대한 클러스터 또는 전용 관리자 권한이 있습니다.
  • OpenShift Serverless Operator, Knative Serving 및 Knative Eventing을 설치했습니다.
  • Red Hat OpenShift distributed tracing Platform Operator를 설치했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • 프로젝트를 생성하거나 애플리케이션 및 기타 워크로드를 생성할 수 있는 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.

프로세스

  1. 다음을 포함하는 Jaeger 사용자 정의 리소스 (CR) 파일을 생성하고 적용합니다.

    Jaeger CR

    apiVersion: jaegertracing.io/v1
    kind: Jaeger
    metadata:
      name: jaeger
      namespace: default
    Copy to Clipboard Toggle word wrap

  2. KnativeServing CR을 편집하고 추적에 필요한 YAML 구성을 추가하여 Knative Serving에 대한 추적을 활성화합니다.

    Serving의 YAML 추적 예

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
    spec:
      config:
        tracing:
          sample-rate: "0.1" 
    1
    
          backend: zipkin 
    2
    
          zipkin-endpoint: "http://jaeger-collector.default.svc.cluster.local:9411/api/v2/spans" 
    3
    
          debug: "false" 
    4
    Copy to Clipboard Toggle word wrap

    1
    sample-rate는 샘플링 가능성을 정의합니다. sample-rate: "0.1" 을 사용하면 10개의 추적 중 1개가 샘플링됩니다.
    2
    backendzipkin으로 설정해야 합니다.
    3
    zipkin-endpointjaeger-collector 서비스 끝점을 가리켜야 합니다. 이 끝점을 가져오려면 Jaeger CR이 적용되는 네임스페이스를 대체합니다.
    4
    디버깅을 false로 설정해야 합니다. debug: "true"를 설정하여 디버그 모드를 활성화하면 모든 범위가 서버에 전송되어 샘플링 단계를 건너뜁니다.
  3. KnativeEventing CR을 편집하여 Knative Eventing의 추적을 활성화합니다.

    Eventing의 YAML 추적 예

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeEventing
    metadata:
      name: knative-eventing
      namespace: knative-eventing
    spec:
      config:
        tracing:
          sample-rate: "0.1" 
    1
    
          backend: zipkin 
    2
    
          zipkin-endpoint: "http://jaeger-collector.default.svc.cluster.local:9411/api/v2/spans" 
    3
    
          debug: "false" 
    4
    Copy to Clipboard Toggle word wrap

    1
    sample-rate는 샘플링 가능성을 정의합니다. sample-rate: "0.1" 을 사용하면 10개의 추적 중 1개가 샘플링됩니다.
    2
    backendzipkin 으로 설정합니다.
    3
    zipkin-endpointjaeger-collector 서비스 끝점을 지정합니다. 이 끝점을 가져오려면 Jaeger CR이 적용되는 네임스페이스를 대체합니다.
    4
    디버깅을 false로 설정해야 합니다. debug: "true"를 설정하여 디버그 모드를 활성화하면 모든 범위가 서버에 전송되어 샘플링 단계를 건너뜁니다.

검증

jaeger 경로를 사용하여 Jaeger 웹 콘솔에 액세스하여 추적 데이터를 볼 수 있습니다.

  1. 다음 명령을 입력하여 jaeger 경로의 호스트 이름을 가져옵니다.

    $ oc get route jaeger -n default
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME     HOST/PORT                         PATH   SERVICES       PORT    TERMINATION   WILDCARD
    jaeger   jaeger-default.apps.example.com          jaeger-query   <all>   reencrypt     None
    Copy to Clipboard Toggle word wrap

  2. 콘솔을 보려면 브라우저에서 끝점 주소를 엽니다.

법적 공지

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2026 Red Hat
맨 위로 이동