Istio 계측 (Instrumenting Istio)
Datadog은 Istio 환경의 모든 측면을 모니터링해 메시를 통과하는 애플리케이션의 분산 트레이스, Envoy와 Istio 컨트롤 플레인 상태, 서비스 메시 성능, 네트워크 통신을 파악할 수 있게 해줘요.
출처: 문서
본문
Datadog은 Istio 환경의 모든 측면을 모니터링하므로 다음을 할 수 있어요:
- APM으로 메시를 통과해 거래하는 애플리케이션의 개별 분산 트레이스를 확인 (아래 참조).
- 로그로 Envoy와 Istio 컨트롤 플레인의 상태를 평가.
- 요청, 대역폭, 리소스 소비 메트릭으로 서비스 메시의 성능을 분해.
- Cloud Network Monitoring으로 메시를 통과하는 컨테이너, 파드, 서비스 간 네트워크 통신을 매핑.
Datadog으로 Istio 환경을 모니터링하는 방법에 대해 자세히 알아보려면 Istio 블로그를 참조하세요.
Datadog APM은 지원되는 Istio 릴리스에서 사용할 수 있어요.
Datadog Agent 설치
- Agent를 설치해요.
- Agent에 대해 APM이 활성화되어 있는지 확인해요.
- 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"