Ingress Nginx (Prometheus)¶
Ingress Nginx (Prometheus) 관련 지표, 트레이스 및 로그 정보를 수집합니다
설정¶
사전 조건¶
- DataKit가 배포되어 있어야 합니다. Kubernetes 클러스터 <Datakit 설치>를 참고하세요
- K8s 환경이 배포되어 있어야 합니다
- Ingress-nginx 버전: 1.9.6
Ingress-nginx 서비스 ConfigMap 리소스 설정¶
- Ingress-nginx 설치용 Yaml 파일에 아래 설정을 추가합니다:
apiVersion: v1
data:
allow-snippet-annotations: "false"
enable-opentracing: "true"
opentracing-trust-incoming-span: "true"
datadog-collector-host: "datakit-service.datakit.svc.cluster.local"
datadog-collector-port: "9529"
datadog-service-name: "ingress-nginx"
datadog-environment: "testing"
datadog-operation-name-override: "HTTP $request_method $service_name $uri $opentelemetry_trace_id"
datadog-priority-sampling: "false"
datadog-sample-rate: "1.0"
kind: ConfigMap
metadata:
labels:
app.Kubernetes.io/component: controller
app.Kubernetes.io/instance: ingress-nginx
app.Kubernetes.io/name: ingress-nginx
app.Kubernetes.io/part-of: ingress-nginx
app.Kubernetes.io/version: 1.9.6
name: ingress-nginx-controller
namespace: ingress-nginx
- 아래 명령을 실행하여 해당 설정을 적용합니다
수집기 설정¶
지표 수집¶
ConfigMap 방식으로 수집기 설정 주입을 통해 KubernetesPrometheus 수집기를 활성화합니다
datakit.yaml파일의ConfigMap아래에kubernetesprometheus.conf를 추가합니다
apiVersion: v1
kind: ConfigMap
metadata:
name: datakit-conf
namespace: datakit
data:
kubernetesprometheus.conf: |-
[inputs.kubernetesprometheus]
[[inputs.kubernetesprometheus.instances]]
role = "pod"
#namespaces = ["ingress-nginx"]
scheme = "http"
#selector = "app=ingress-nginx"
port = "10254"
path = "/metrics"
node_local = "true"
[inputs.kubernetesprometheus.instances.custom]
measurement = "ingress-nginx"
[inputs.kubernetesprometheus.instances.custom.tags]
instance = "__Kubernetes_mate_instance"
host = "__Kubernetes_mate_host"
pod_name = "__Kubernetes_pod_name"
pod_namespace = "__Kubernetes_pod_namespace"
kubernetesprometheus.conf를 DataKit의/usr/local/datakit/conf.d/kubernetesprometheus/kubernetesprometheus.conf아래에 마운트합니다
- mountPath: /usr/local/datakit/conf.d/kubernetesprometheus/kubernetesprometheus.conf
name: datakit-conf
subPath: kubernetesprometheus.conf
- 아래 명령을 실행하여 DataKit를 재시작합니다
- Ingress-nginx-controller를 설치하는 설정 파일
Ingress-nginx.yaml에서 Service의 type을NodePort로 설정하고, 외부에 10254 포트를 노출합니다
아래 명령을 실행하여 Ingress-nginx 서비스를 재시작합니다
트레이스 수집¶
- DDTrace 수집기를 활성화합니다
datakit.yaml 파일에서 기본으로 활성화된 수집기 설정에 DDtrace를 추가합니다
- name: ENV_DEFAULT_ENABLED_INPUTS
value: cpu,disk,diskio,mem,swap,system,hostobject,net,host_processes,container,ddtrace
- 아래 명령을 실행하여 DataKit를 재시작합니다
- DataKit Operator Yaml 파일을 다운로드합니다
설치 명령을 실행합니다
- Ingress 접근 테스트
Ingress-nginx-controller Service의 type은 NodePort이며, 80 포트를 30796 포트로 매핑합니다(설명: 192.168.0.5는 Ingress-nginx Pod가 실행 중인 노드 IP입니다)
curl -H "Host:service.com" http://192.168.0.5:30796/service-a/api/a
Service-A received: Hello from Service-B
Guance 애플리케이션 성능 검사 부분에서 Ingress-nginx 트레이스 데이터가 정상적으로 전송되는 것을 확인할 수 있습니다
로그 수집¶
DataKit는 기본적으로 컨테이너의 표준 출력 로그를 수집하므로, 추가 설정 없이 수집할 수 있습니다
지표¶
Ingress Nginx 지표는 ingress-nginx 지표 집합에 있으며, 여기서는 주로 Ingress Nginx 관련 지표 설명을 소개합니다
| 지표 | 설명 | 데이터 유형 | 단위 |
|---|---|---|---|
| nginx_ingress_controller_requests | 클라이언트 요청의 총 수 | int | count |
| nginx_ingress_controller_nginx_process_connections | 상태가 {active, reading, writing, waiting}인 현재 클라이언트 연결 수 | int | count |
| nginx_ingress_controller_success | Ingress 컨트롤러 재로드 작업의 누적 횟수 | int | count |
| nginx_ingress_controller_config_last_reload_successful | 마지막 설정 재로드 시도가 성공했는지 여부 | int | count |
| nginx_ingress_controller_nginx_process_resident_memory_bytes | 사용 중인 메모리 바이트 수 | float | B |
| nginx_ingress_controller_nginx_process_cpu_seconds_total | 초 단위 CPU 사용량 | float | B |
| nginx_process_resident_memory_bytes | 사용 중인 메모리 바이트 수 | int | B |
| nginx_ingress_controller_request_duration_seconds_bucket | 요청 처리 시간(밀리초) | int | count |
| nginx_ingress_controller_request_size_sum | 요청 길이(요청 라인, 헤더, 요청 본문 포함) | int | count |
| nginx_ingress_controller_response_size_sum | 응답 길이(요청 라인, 헤더, 요청 본문 포함) | int | count |
| nginx_ingress_controller_ssl_expire_time_seconds | SSL 인증서 만료까지 1970년부터 경과한 초 수 | int | count |