본문 바로가기
WIKI 기술 지식 베이스

Istio 계측 (Instrumenting Istio)

원문 보기 위키 갱신

Datadog은 Istio 환경의 모든 측면을 모니터링해 메시를 통과하는 애플리케이션의 분산 트레이스, Envoy와 Istio 컨트롤 플레인 상태, 서비스 메시 성능, 네트워크 통신을 파악할 수 있게 해줘요.

출처: 문서

본문

Datadog은 Istio 환경의 모든 측면을 모니터링하므로 다음을 할 수 있어요:

  • APM으로 메시를 통과해 거래하는 애플리케이션의 개별 분산 트레이스를 확인 (아래 참조).
  • 로그로 Envoy와 Istio 컨트롤 플레인의 상태를 평가.
  • 요청, 대역폭, 리소스 소비 메트릭으로 서비스 메시의 성능을 분해.
  • Cloud Network Monitoring으로 메시를 통과하는 컨테이너, 파드, 서비스 간 네트워크 통신을 매핑.

Datadog으로 Istio 환경을 모니터링하는 방법에 대해 자세히 알아보려면 Istio 블로그를 참조하세요.

Datadog APM은 지원되는 Istio 릴리스에서 사용할 수 있어요.

Datadog Agent 설치

  1. Agent를 설치해요.
  2. Agent에 대해 APM이 활성화되어 있는지 확인해요.
  3. Istio 사이드카가 Agent에 연결해 트레이스를 제출할 수 있도록 hostPort 설정의 주석을 해제해요.

Istio 구성 및 설치

Datadog APM을 활성화하려면 Istio 설치 시 두 가지 추가 옵션을 설정하는 커스텀 Istio 설치가 필요해요.

  • --set values.global.proxy.tracer=datadog
  • --set values.pilot.traceSampling=100.0
istioctl manifest apply --set values.global.proxy.tracer=datadog --set values.pilot.traceSampling=100.0

파드의 네임스페이스에 사이드카 주입이 활성화되어 있을 때 트레이스가 생성돼요. 이는 istio-injection=enabled 라벨을 추가해 수행해요.

kubectl label namespace example-ns istio-injection=enabled

Istio가 트래픽이 HTTP 기반 프로토콜을 사용한다고 판단할 수 있을 때 트레이스가 생성돼요. 기본적으로 Istio는 이를 자동으로 감지하려 해요. 애플리케이션의 배포와 서비스에서 포트 이름을 지정해 수동으로 구성할 수 있어요. 자세한 내용은 Istio 문서의 Protocol Selection에서 확인할 수 있어요.

기본적으로 트레이스를 만들 때 사용되는 서비스 이름은 파드의 app 라벨과 파드의 네임스페이스에서 파생돼요. app 라벨이 설정되지 않으면 서비스 이름은 기본적으로 istio-proxy로 설정돼요.

커스텀 서비스 이름을 설정하려면 배포의 파드 템플릿에 app 라벨을 추가해요:

template:
  metadata:
    labels:
      app: <SERVICE_NAME>

또는 proxy.istio.io/config 어노테이션을 통해 DD_SERVICE 환경 변수로 서비스 이름을 덮어써요:

template:
  metadata:
    annotations:
      proxy.istio.io/config: |
        proxyMetadata:
          "DD_SERVICE": "<SERVICE_NAME>"

CronJobs의 경우 생성된 이름이 상위 레벨의 CronJob이 아닌 Job에서 오므로 app 라벨을 작업 템플릿에 추가해야 해요.

배포 및 서비스

클러스터의 Agent가 기본 DaemonSet 대신 배포와 서비스로 실행된다면 Agent의 DNS 주소와 포트를 지정하는 추가 옵션이 필요해요. default 네임스페이스의 datadog-agent라는 서비스의 경우 해당 주소는 datadog-agent.default.svc.cluster.local:8126이에요.

  • --set values.global.tracer.datadog.address=datadog-agent.default.svc.cluster.local:8126

클러스터에서 상호 TLS가 활성화되어 있다면 Agent 배포는 사이드카 주입을 비활성화해야 하며 TLS를 비활성화하는 트래픽 정책을 추가해야 해요.

이 어노테이션은 Agent의 Deployment 템플릿에 추가돼요.

  template:
    metadata:
      annotations:
        sidecar.istio.io/inject: "false"

Istio v1.4.x의 경우 트래픽 정책을 DestinationRule로 구성할 수 있어요. Istio v1.5.x 이상은 추가 트래픽 정책이 필요하지 않아요.

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: datadog-agent
  namespace: istio-system
spec:
  host: datadog-agent.default.svc.cluster.local
  trafficPolicy:
    tls:
      mode: DISABLE

자동 프로토콜 선택은 사이드카와 Agent 사이의 트래픽이 HTTP라고 판단해 트레이싱을 활성화할 수 있어요. 이 특정 서비스에 대해 수동 프로토콜 선택을 사용해 이를 비활성화할 수 있어요. datadog-agent Service의 포트 이름을 tcp-traceport로 변경할 수 있어요. Kubernetes 1.18+를 사용한다면 포트 사양에 appProtocol: tcp를 추가할 수 있어요.

환경 변수

Istio 사이드카의 환경 변수는 proxy.istio.io/config 어노테이션을 사용해 배포별로 설정할 수 있어요. 이는 Istio 사이드카를 사용하는 배포에 고유한 기능이에요.

apiVersion: apps/v1
...
kind: Deployment
...
spec:
  template:
    metadata:
      annotations:
        proxy.istio.io/config: |
          proxyMetadata:
            "DD_ENV": "prod"
            "DD_SERVICE": "my-service"
            "DD_VERSION": "v1.1"

더 알아보기 (Learn more)