본문 바로가기
서버구축 (WEB,DB)

Kubernetes Ingress Controller 로그 형식 정의

by 날으는물고기 2023. 12. 27.

Kubernetes Ingress Controller 로그 형식 정의

Ingress Controller Logs (인그레스 컨트롤러 로그)

Ingress 컨트롤러 로그는 인그레스 컨트롤러를 설치한 후에 볼 수 있는 로그입니다. 컨트롤러 팟 중 하나의 이름으로 kubectl logs를 호출하면 컨트롤러 버전, ConfigMap 값, 기본 TLS 인증서 등과 같은 시작 정보를 중요한 정보로 확인할 수 있습니다. 로그의 상세도는 --log 컨트롤러 인수를 사용하여 설정할 수 있으며, 이는 error, warning, info, debug 또는 trace 중 하나로 설정할 수 있습니다. 로그 레벨은 기본적으로 info로 설정되어 있지만, debug로 설정하면 상세로그를 기록할 수 있습니다.

 

HAProxy Logs (HAProxy 로그)

HAProxy는 다른 종류의 로그 메시지를 생성하며, 이는 트래픽의 트렌드 및 이상 현상을 식별하는 데 도움이 되는 정보를 포함하고 있습니다. HAProxy 액세스 로그는 syslog-server 및 log-format 어노테이션을 사용하여 구성할 수 있습니다. syslog-server 어노테이션을 설정하기 전까지는 액세스 로그를 볼 수 없습니다. 이를 설정하는 방법과 로그를 보는 방법을 참고할 수 있습니다.

 

로그 형식은 기본적으로 HTTP 로그 형식으로 설정되어 있으며, 필요에 따라 로그 형식을 변경할 수 있습니다. 또한 request-capture 어노테이션을 사용하여 사용자가 원하는 특정 정보를 로깅할 수 있습니다. 예를 들어 Authorization 헤더 또는 TLS 정보를 로깅하는 방법을 활용할 수 있습니다.

 

로그를 효과적으로 사용하려면 syslog 서버에 로그를 전송하거나 로그를 파일에 저장하는 로깅 드라이버를 구성하는 것이 중요합니다. Rate Limiting 및 TLS 정보와 같은 고급 로깅 기능도 있습니다. 이러한 설정은 프로덕션 환경에서 고려해야 할 중요한 사항이므로 로그 유형 및 형식을 적절하게 구성하여 원하는 정보를 얻을 수 있습니다.

Custom Nginx Ingress Log - Tencent Cloud

로그 포맷은 기본 설정에서 사용자 정의 로깅 형식을 사용하여 업스트림, 응답 시간 및 상태와 관련된 추가 정보를 추가합니다. 다음은 로그 포맷과 해당 플레이스홀더(자리 표시자)에 대한 설명입니다.

log_format upstreaminfo
    '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" "$http_user_agent" '
    '$request_length $request_time [$proxy_upstream_name] [$proxy_alternative_upstream_name] $upstream_addr '
    '$upstream_response_length $upstream_response_time $upstream_status $req_id';

플레이스홀더(자리 표시자) 설명

  • $remote_addr: 클라이언트의 소스 IP 주소
  • $remote_user: Basic 인증으로 제공된 사용자 이름
  • $time_local: Common Log Format의 로컬 시간
  • $request: 전체 원본 요청 라인
  • $status: 응답 상태 코드
  • $body_bytes_sent: 응답 헤더를 제외한 클라이언트로 보낸 바이트 수
  • $http_referer: Referer 헤더의 값
  • $http_user_agent: User-Agent 헤더의 값
  • $request_length: 요청 길이(요청 라인, 헤더 및 요청 본문 포함)
  • $request_time: 클라이언트에서 처음 바이트를 읽은 후 경과한 시간
  • $proxy_upstream_name: 업스트림의 이름. 형식은 upstream---
  • $proxy_alternative_upstream_name: 대체 업스트림의 이름. 형식은 upstream---
  • $upstream_addr: 업스트림 서버의 IP 주소 및 포트(또는 도메인 소켓의 경로). 여러 서버가 요청 처리 중에 연락되었으면 주소는 쉼표로 구분됩니다.
  • $upstream_response_length: 업스트림 서버에서 얻은 응답의 길이
  • $upstream_response_time: 업스트림 서버에서 응답을 수신하는 데 소요된 시간(초 단위, 밀리초 해상도)
  • $upstream_status: 업스트림 서버에서 얻은 응답의 상태 코드
  • $req_id: X-Request-ID HTTP 헤더의 값. 헤더가 설정되지 않으면 무작위로 생성된 ID.

추가로 사용 가능한 변수

  • $namespace: 인그레스의 네임스페이스
  • $ingress_name: 인그레스의 이름
  • $service_name: 서비스의 이름
  • $service_port: 서비스의 포트

 

Ingress Controller Logs (인그레스 컨트롤러 로그)

Ingress 컨트롤러 로그는 HAProxy Kubernetes Ingress Controller를 설치한 후에 확인할 수 있는 정보로, 컨트롤러의 시작 및 구성과 관련된 핵심 정보를 제공합니다. 다음은 컨트롤러 로그의 예시 및 구성 방법에 대한 추가 설명입니다.

  1. 시작 로그 확인하기
    $ kubectl logs haproxy-kubernetes-ingress
    위 명령을 통해 컨트롤러 팟의 로그를 확인할 수 있습니다.
  2. 로그 레벨 설정하기
    로그의 상세도는 로그 레벨을 설정하여 조절할 수 있습니다. 아래 예시에서는 디버그 레벨로 로그를 설정하는 방법을 보여줍니다.
    $ helm install haproxy haproxytech/kubernetes-ingress \
        --set controller.logging.level=debug
    이제 디버그 레벨의 로그가 표시되며, 컨트롤러의 작업에 대한 자세한 정보를 확인할 수 있습니다.

HAProxy Logs (HAProxy 로그)

HAProxy는 풍부한 정보를 담고 있는 액세스 로그를 생성하며, 이를 구성하는 방법과 예시를 아래에서 설명합니다.

  1. Syslog 서버 설정하기
    HAProxy 액세스 로그를 활성화하려면 syslog 서버를 설정해야 합니다. 아래는 ConfigMap을 사용하여 syslog 서버를 설정하는 예시입니다.
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: haproxy-kubernetes-ingress
      namespace: default
    data:
      syslog-server: "address:stdout, format:raw, facility:daemon"
    설정을 적용하려면:
    $ kubectl apply -f configmap.yaml
    Helm 차트를 사용하여 설치할 때는 다음과 같이 syslog 설정을 지정할 수 있습니다.
    $ helm install haproxy haproxytech/kubernetes-ingress \
        --set controller.logging.traffic.address=stdout \
        --set controller.logging.traffic.format=raw \
        --set controller.logging.traffic.facility=daemon
  2. 로그 형식 설정하기
    로그의 형식은 log-format 어노테이션을 사용하여 설정할 수 있습니다. 기본적으로는 HTTP 로그 형식이지만, 필요에 따라 로그 형식을 변경할 수 있습니다.
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: haproxy-kubernetes-ingress
      namespace: default
    data:
      log-format: "Your_Custom_Log_Format_String"
    이를 통해 HAProxy의 액세스 로그 형식을 사용자 정의할 수 있습니다.
  3. 사용자 정의 정보 로깅하기
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: haproxy-kubernetes-ingress
      namespace: default
    data:
      request-capture: "hdr(X-Amzn-Trace-Id), req.ssl_sni, ssl_fc_cipher"
    위 예시는 각각 헤더 정보, TLS SNI 값을, TLS 암호를 로깅하는 방법을 보여줍니다.
  4. HAProxy는 request-capture 어노테이션을 통해 사용자가 원하는 정보를 로깅할 수 있습니다. 예를 들어, 헤더 정보나 TLS 세션과 관련된 정보를 로깅하려면 다음과 같이 설정할 수 있습니다.

이러한 설정을 통해 Ingress 컨트롤러와 HAProxy의 로그를 효과적으로 구성하여 클러스터에서 발생하는 이벤트 및 트래픽에 대한 자세한 정보를 얻을 수 있습니다. 이는 운영 및 디버깅에 유용하며, 필요에 따라 로그를 사용자 정의하여 특정 정보를 추적할 수 있습니다.

728x90

댓글