콘텐츠로 이동

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
  • 아래 명령을 실행하여 해당 설정을 적용합니다
kuebctl apply -f ingress-nginx.yaml

수집기 설정

지표 수집

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를 재시작합니다
kubectl delete -f datakit.yaml
kubectl apply -f datakit.yaml
  • Ingress-nginx-controller를 설치하는 설정 파일 Ingress-nginx.yaml에서 Service의 type을 NodePort로 설정하고, 외부에 10254 포트를 노출합니다
spec:
  type: NodePort
......
    - name: prometheus
      port: 10254
      targetPort: prometheus

아래 명령을 실행하여 Ingress-nginx 서비스를 재시작합니다

kuebctl apply -f ingress-nginx.yaml

트레이스 수집

  • DDTrace 수집기를 활성화합니다

datakit.yaml 파일에서 기본으로 활성화된 수집기 설정에 DDtrace를 추가합니다

 - name: ENV_DEFAULT_ENABLED_INPUTS
   value: cpu,disk,diskio,mem,swap,system,hostobject,net,host_processes,container,ddtrace
  • 아래 명령을 실행하여 DataKit를 재시작합니다
kubectl delete -f datakit.yaml
kubectl apply -f datakit.yaml
  • DataKit Operator Yaml 파일을 다운로드합니다
wget https://guance.com/datakit-operator/datakit-operator.yaml

설치 명령을 실행합니다

kubectl apply -f 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

모범 사례

문서 평가

이 페이지가 도움이 되었나요?