클러스터 검사
Kubernetes: 리더 Cluster Agent를 찾습니다.
리더 선출이 활성화되면 리더만 노드 기반 Agents에 클러스터 검사 설정을 제공합니다. Cluster Agent Pod의 복제본이 하나만 실행 중인 경우 이 복제본이 리더입니다. 그렇지 않으면 datadog-leader-election ConfigMap에서 리더의 이름을 확인할 수 있습니다.
# kubectl get cm datadog-leader-election -o yaml apiVersion: v1 kind: ConfigMap metadata: annotations: control-plane.alpha.kubernetes.io/leader: '{"holderIdentity":"cluster-agent-rhttz", ... }'
이 경우 리더 Pod는 cluster-agent-rhttz 입니다. Pod가 삭제되거나 응답하지 않으면 다른 Pod가 자동으로 인수됩니다.
Cluster Agent의 자동탐지
Cluster Agent가 설정(정적 또는 자동 탐지)을 선택하도록 하려면, 리더 Cluster Agent에서 configcheck 명령을 사용합니다:
# kubectl exec <CLUSTER_AGENT_POD_NAME> agent configcheck ... === http_check cluster check === Source: kubernetes-services Instance ID: http_check:My service:6e5f4b16b4b433cc name: My service tags: - kube_namespace:default - kube_service:my-nginx timeout: 1 url: http://10.15.246.109 ~ Init Config: {} Auto-discovery IDs: * kube_service://751adfe4-1280-11e9-a26b-42010a9c00c8 ===
Cluster Agent의 로직 디스패치
clusterchecks 명령을 사용하면 다음을 포함하여 디스패치 로직의 상태를 검사할 수 있습니다:
- 어떤 노드 기반 Agents가 Cluster Agent에 적극적으로 보고하고 있는지.
- 각 노드에 어떤 검사가 연결되는지.
# kubectl exec <CLUSTER_AGENT_POD_NAME> agent clusterchecks === 3 node-agents reporting === Name Running checks default-pool-bce5cd34-7g24.c.sandbox.internal 0 default-pool-bce5cd34-slx3.c.sandbox.internal 2 default-pool-bce5cd34-ttw6.c.sandbox.internal 1 ... ===== Checks on default-pool-bce5cd34-ttw6.c.sandbox.internal ===== === http_check check === Source: kubernetes-services Instance ID: http_check:My service:5b948dee172af830 empty_default_hostname: true name: My service tags: - kube_namespace:default - kube_service:my-nginx - cluster_name:example timeout: 1 url: http://10.15.246.109 ~ Init Config: {} ===
참고: 태그와 옵션을 추가하도록 인스턴스가 수정되므로, Instance ID는 configcheck 명령과 다릅니다.
이 경우 이 설정이 default-pool-bce5cd34-ttw6 노드로 디스패치됩니다. 해당 노드의 Agent Pod와 관련하여 트러블슈팅이 계속됩니다.
노드 기반 Agent의 자동탐지
Agent configcheck 명령은 cluster-checks 소스와 함께 인스턴스를 표시해야 합니다.
# kubectl exec <NODE_AGENT_POD_NAME> agent configcheck ... === http_check check === Source: cluster-checks Instance ID: http_check:My service:5b948dee172af830 empty_default_hostname: true name: My service tags: - kube_namespace:default - kube_service:my-nginx - cluster_name:example timeout: 1 url: http://10.15.246.109 ~ Init Config: {} ===
인스턴스 ID는 이전에 가지고 있던 것과 일치합니다.
Agent 상태
Agent status 명령은 검사 인스턴스가 실행 중이며 성공적으로 보고되고 있음을 표시해야 합니다.
# kubectl exec <NODE_AGENT_POD_NAME> agent status ... http_check (3.1.1) ------------------ Instance ID: http_check:My service:5b948dee172af830 [OK] Total Runs: 234 Metric Samples: Last Run: 3, Total: 702 Events: Last Run: 0, Total: 0 Service Checks: Last Run: 1, Total: 234 Average Execution Time : 90ms
엔드포인트 검사
엔드포인트 검사 트러블슈팅은 클러스터 검사 트러블슈팅과 유사합니다. 예약된 엔드포인트 검사가 클러스터 검사와 함께 표시되는 Node Agent에서 차이가 발생합니다.
참고: 엔드포인트 검사는 서비스의 엔드포인트를 백업하는 파드와 동일한 노드에서 실행되는 Agent에 의해 예약됩니다. 엔드포인트가 파드에 의해 백업되지 않는 경우, Cluster Agent는 클러스터 검사로 변환합니다. 이 클러스터 검사는 모든 Node Agent에서 실행할 수 있습니다.
Node Agent의 자동탐지
Agent configcheck 명령은 endpoints-checks 소스와 함께 인스턴스를 표시합니다.
# kubectl exec <NODE_AGENT_POD_NAME> agent configcheck ... === nginx check === Configuration provider: endpoints-checks Configuration source: kube_endpoints:kube_endpoint_uid://default/nginx/ Instance ID: nginx:956741d8796d940c nginx_status_url: http://10.0.0.75/nginx_status/ tags: - pod_phase:running - kube_deployment:nginx - kube_service:nginx - kube_namespace:default - kube_endpoint_ip:10.0.0.75 - cluster_name:cluster ~ Init Config: {} Auto-discovery IDs: * kube_endpoint_uid://default/nginx/10.0.0.75 * kubernetes_pod://4e733448-f57e-11e9-8123-42010af001ed State: dispatched to gke-cluster-default-pool-4658d5d4-qfnt ===
Agent 상태
Agent status 명령은 검사 인스턴스가 실행 중이며 성공적으로 보고되고 있음을 표시해야 합니다.
# kubectl exec <NODE_AGENT_POD_NAME> agent status ... nginx (4.0.0) ------------- Instance ID: nginx:956741d8796d940c [OK] Configuration Source: kube_endpoints:kube_endpoint_uid://default/nginx/ Total Runs: 443 Metric Samples: Last Run: 7, Total: 3,101 Events: Last Run: 0, Total: 0 Service Checks: Last Run: 1, Total: 443 Average Execution Time : 5ms
Cluster Agent의 자동탐지
Cluster Agent clusterchecks 명령은 kubernetes-endpoints 소스와 함께 인스턴스를 표시합니다.
# kubectl exec <CLUSTER_AGENT_POD_NAME> agent clusterchecks ... ===== 3 Pod-backed Endpoints-Checks scheduled ===== === nginx check === Configuration provider: kubernetes-endpoints Configuration source: kube_endpoints:kube_endpoint_uid://default/nginx/ Instance ID: nginx:My Nginx Service Endpoints:f139adc46c81828e name: My Nginx Endpoints nginx_status_url: http://10.0.0.75/nginx_status/ tags: - kube_service:nginx - kube_namespace:default - kube_endpoint_ip:10.0.0.75 - cluster_name:cluster ~ Init Config: {} Auto-discovery IDs: * kube_endpoint_uid://default/nginx/10.0.0.75 * kubernetes_pod://4e733448-f57e-11e9-8123-42010af001ed State: dispatched to gke-cluster-default-pool-4658d5d4-qfnt === ...
참고 자료