TheKoguryo's 기술 블로그

 Version 2024.04.01
1.5.2.2.1 OCI Kubernetes Monitoring Solution을 사용하여 Logging Analytics로 모니터링 하기

OCI Logging Analytics, OCI Monitoring, OCI Management Agent 와 FluentD를 통해 Kubernetes를 모니터링할 수 있는 솔루션인 OCI Kubernetes Monitoring Solution을 오픈소스로 제공하고 있습니다.

마켓플레이스를 통해 설치하거나, GitHub 리파지토리 소스를 통해 Resource Manager, Terraform, Helm 등으로 설치할 수 있습니다.

OCI Kubernetes Monitoring Solution

Monitor Kubernetes and OKE clusters with OCI Logging Analytics 문서에서 아키텍처를 보면, 로그 수집을 위해 컴포넌트로 FluentD Collector와 Logging Analytics FluentD Plugin이 설치되어 쿠버네티스 상의 로그를 수집합니다.

Description of k8s-oke-monitoring.png follows

마켓플레이스를 통해 설치 시작

  1. OCI 콘솔에 로그인합니다.

  2. 왼쪽 위 내비게이션 메뉴에서 Marketplace > All Applications으로 이동합니다.

  3. Kubernetes Monitoring and Management으로 검색합니다.

  4. Kubernetes Monitoring and Management을 선택합니다.

    image-20230208105308282

  5. Oracle에서 제공하는 앱으로 무료로 제공하고 있습니다. OKE Cluster상의 서비스, 리눅스 시스템, 애플리케이션 컨테이너 로그 등을 OCI Logging Analytics로 수집하여 제공하는 기능을 제공한다고 설명하고 있습니다.

    image-20230907170540580

  6. 설치할 Compartment를 선택하고, 약관에 동의하고 진행하면 됩니다.

  7. 원 소스 저장소인 GitHub 리파지토리 보다 Marketplace는 버전이 낮을 수 있으므로 여기서는 GitHub을 통해 최신버전을 설치합니다.

GitHub 에서 설치 시작

오픈소스로 GitHub - oci-kubernetes-monitoring 저장소에서 소스 파일을 제공하고 있으면, README 파일에서 설명하는 것처럼 아래 버튼을 클릭하여 최신 소스로 설치를 시작할 수 있습니다.

image-20230907170946592

Resource Manager Stack 설치

  1. 마켓플레이스 또는 GitHub에서 설치를 시작하면 Resource Manager의 Stack 설치화면으로 이동됩니다.

  2. 작성일 기준으로 V3.0.2 버전을 사용하였습니다.

  3. 설치 기본 정보를 입력합니다.

    • Create in compartment: Resource Manager Stack이 설치될 위치입니다.

    image-20230907171633372

  4. 변수값을 입력합니다.

    • OKE Cluster Information
      • OKE Cluster가 위치한 Compartment와 대상 클러스터를 선택합니다.
    • OCI Logging Analytics Information
      • Logging Analytics 대쉬보드와 LogGroup의 위치하는 Compartment를 선택합니다.
      • 만들 Logging Analytics LogGroup을 입력합니다.
    • Policies and Dynamic Groups
      • 모니터링할 OKE 클러스터에 대한 접근을 위해 자동으로 Dynamic Group과 Policy가 만들어집니다. 자동설치가 싫거나, 권한이 없는 경우, 사전에 별도로 권한에 설정합니다.

    image-20230907173005480

  5. 결과를 리뷰하고, Create를 클릭하여, 설치 및 적용합니다.

  6. 설치가 완료할 때 까지 기다립니다. 실패한 경우, Logs를 확인하여 문제를 해결하고 재시도합니다.

  7. 설치된 Dynamic Group 및 Policy 확인하면 아래와 같습니다.

    • Log & Object Collection Pods가 있는 Worker Nodes들에 LogGroup에 로그를 업로드할 권한을 부여하고 있습니다

    • Dynamic Group: oci-kubernetes-monitoring-xxx…

      Match any rules defined below
      
      # Rule 1
      ALL {instance.compartment.id = 'ocid1.compartment.oc1..aaaaa_____32sa'}
      
      # Rule 2
      ALL {resource.type='managementagent', resource.compartment.id='ocid1.compartment.oc1..aaaaa_____32sa'}
      
    • Policy: oci-kubernetes-monitoring-yyy…

      • OCI Logging Anaytics Comparment로 선택한 Compartment에 생성됨
      Allow dynamic-group oci-kubernetes-monitoring-xxx... to {LOG_ANALYTICS_LOG_GROUP_UPLOAD_LOGS} in compartment oci-hol
      Allow dynamic-group oci-kubernetes-monitoring-xxx... to use METRICS in compartment oci-hol WHERE target.metrics.namespace = 'mgmtagent_kubernetes_metrics'
      
  8. 왼쪽 위 내비게이션 메뉴에서 Observability & Management > Logging Analytics > Administration으로 이동합니다.

  9. Resources > Log Groups에 보면 설치시 생성된 LogGroup를 확인할 수 있습니다.

    image-20230907174150765

  10. Dashboard 메뉴를 클릭하면, Kubernetes 대쉬보드가 추가된 것을 확인할 수 있습니다.

    image-20230907174339023

  11. 대상으로 지정된 OKE 클러스터 설치된 자원을 확인합니다.

    • helm chart로 설치된 것을 확인할 수 있습니다.

      $ helm list -A
      NAME                            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
      oci-kubernetes-monitoring       default         1               2023-09-07 08:32:45.717642732 +0000 UTC deployed        oci-onm-3.0.2   3.0.0
      
    • oci-onm 네임스페이스에 관련 Pod가 설치되었습니다.

      $ kubectl get all -n oci-onm
      NAME                                 READY   STATUS    RESTARTS   AGE
      pod/oci-onm-logan-58dfdfd948-bp9jn   1/1     Running   0          20m
      pod/oci-onm-logan-947wz              1/1     Running   0          20m
      pod/oci-onm-logan-d2jdg              1/1     Running   0          20m
      pod/oci-onm-logan-x7bbp              1/1     Running   0          20m
      pod/oci-onm-mgmt-agent-0             1/1     Running   0          20m
      
    • 설치된 fluentd가 사용하는 설정값이 있는 configmap입니다.

      $ kubectl get configmap -n kube-system
      NAME                                 DATA   AGE
      ...
      oci-la-fluentd-logs-configmap        2      10m
      oci-la-fluentd-objects-configmap     2      10m
      ...
      
      • Fluentd 설정을 보면, flush_interval을 30초로 설정되어 있습니다. 최소값은 10초 입니다. Oracle Logging Analytics FluentD에서 플러그인 설명, Fluentd Flushing Parameters을 관련 파라미터를 참고바랍니다.

        $ kubectl get configmap oci-onm-logs -n oci-onm -o yaml
        ...
                  <buffer>
                        @type                           file
                        path                            /var/log/oci_la_fluentd_outplugin/logs/buffer/
                        flush_thread_count              "1"
                        chunk_limit_size                "2m"
                        total_limit_size                "5368709120"
                        flush_interval                  "30"
                        flush_thread_interval           "0.5"
                        flush_thread_burst_interval     "0.05"
                        retry_wait                      "2"
                        retry_max_times                 "17"
                        retry_exponential_backoff_base  "2"
                        retry_forever                   "true"
                        disable_chunk_backup "true"
                  </buffer>
        ..          
        
Logging Analytics에서 로그 확인

Log Explorer로 로그 확인

  1. OCI 콘솔로 이동합니다.

  2. 왼쪽 위 내비게이션 메뉴에서 Observability & Management > Logging Analytics > Log Explorer으로 이동합니다.

  3. 필터에서 Log Group Compartment를 원하는 대상으로 선택합니다.

    image-20230208181008640

  4. 기본값으로 파이 차트 형식으로 보여 줍니다. 대상 클러스터에서 수집된 여러가지 소스에서 수집된 로그를 보여줍니다.

    image-20230907181233546

  5. Worker Node 로그 및 사전 정의한 Kubernetes 로그이외에 애플리케이션 로그를 확인하기 위해 Kubernetes Container Generic Logs를 드릴 다운합니다.

    image-20230907181420898

  6. 클라스터상의 수집된 컨테이너 로그들을 볼수 있습니다.

    image-20230907181555575

  7. 테스트를 위해 default 네임스페이스에 배포된 nginx 앱을 사용하겠습니다.

  8. 필터링을 위해 Search Fields에 namespace로 검색합니다. 검색 결과 중에서 Namespace를 클릭하면 현재 검색된 로그들을 Namespace 단위로 카운트가 보입니다. 여기서 default namespace를 선택하고 적용합니다.

    image-20230907182822235

  9. 검색 쿼리가 아래와 같이 변경되었습니다. 아래와 같이 직접 and Namespace = default를 입력하여도 됩니다.

    'Log Source' = 'Kubernetes Container Generic Logs' and Namespace = default | timestats count as logrecords by 'Log Source' | sort -logrecords
    
  10. 애플리케이션 로그 확인을 위해 이전 가이드에 샘플로 배포된 nginx 앱을 접속해 봅니다.

    image-20230209003231205

  11. 발생한 POD 로그는 다음과 같습니다.

    $ kubectl logs -f nginx-docker-hub-67c59cc7d5-vxj2j
    ...
    10.0.10.104 - - [07/Sep/2023:09:24:20 +0000] "GET /?logging-analytics-logtest HTTP/1.1" 200 615 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36" "-"
    ...
    
  12. Logging Analytics의 Log Explorer에서 동일한 로그들을 모두 확인할 수 있습니다. Fluentd Buffer 설정에 따라 30초 내외로 볼 수 있습니다.

    image-20230907183033532

  13. 쿼리에 검색조건을 추가합니다.

    image-20230907183209667

Dashboard 확인

  1. Logging Analytics > Dashboard로 이동합니다.

  2. Kubernetes 대쉬보드가 추가된 것을 확인할 수 있습니다.

    image-20230907174339023

  3. Kubernetes Cluster Summary를 클릭합니다.

    image-20230907183357690

  4. 배치된 위젯을 클릭하면, 해당 조건에 따라 로그를 쿼리하는 화면으로 이동합니다.

    image-20230907183521711 image-20230907183607419

  5. 다른 대쉬보드들로 비슷한 형식으로 제공합니다.

Logging Analytics에서 모니터링

OCI Kubernetes Monitoring Solution 버전이 올라가면서 OCI Management Agent을 통한 메트릭 모니터링 기능도 추가되었습니다. 이전 수작업으로 Management Agent를 수작업으로 설치하던 것이 OCI Kubernetes Monitoring Solution 설치시 함께 설치됩니다.

설치된 자원을 조회해 보면, mgmt-agent가 설치된 것을 알 수 있습니다.

$ kubectl get all -n oci-onm
NAME                                 READY   STATUS    RESTARTS   AGE
pod/oci-onm-logan-58dfdfd948-bp9jn   1/1     Running   0          20m
pod/oci-onm-logan-947wz              1/1     Running   0          20m
pod/oci-onm-logan-d2jdg              1/1     Running   0          20m
pod/oci-onm-logan-x7bbp              1/1     Running   0          20m
pod/oci-onm-mgmt-agent-0             1/1     Running   0          20m

Management Agent 및 메트릭 확인

  1. OCI 콘솔에 로그인합니다.

  2. 왼쪽 위 내비게이션 메뉴에서 Observability & Management > Management Agents > Agent로 이동합니다.

  3. Agent가 등록된 것을 확인합니다.

    image-20230908160110718

  4. 등록된 Agent를 클릭하면, 설치된 Agent의 현재 상태를 확인할 수 있습니다. 필요하면, 왼쪽 Time range에서 조회 시간을 1시간으로 변경합니다.

    image-20230908160346285

  5. 내비게이션 메뉴에서 Observability & Management > Monitoring > Metrics Explorer로 이동합니다.

  6. 화면 아래 Query 부분으로 이동합니다. Management Agent 설치로 인해 Metric namespace에 mgmtagent_kubernetes_metrics 가 추가되었습니다. 선택하면 Metric name에서 제공하는 메트릭들을 볼 수 있습니다.

    image-20230908160807591

  7. 메트릭 이름까지 나열되면 OKE에 설치된 Agent Pod에서 OCI Metrics까지 연동을 성공한 것입니다.

샘플 대쉬보드 등록하기

  1. Agent Helm 차트의 resources 폴더에 Logging Analytics용 샘플 대쉬보드를 제공합니다. 또는 직접 링크에서 mgmtagent_kubernetes_dashboard.json 파일을 다운로드 받습니다.

  2. 왼쪽 위 내비게이션 메뉴에서 Observability & Management > Logging Analytics > Dashboards로 이동합니다.

  3. Import Dashboards를 클릭하고 다운받은 대쉬보드 파일을 임포트합니다.

  4. Management Agent와 동일한 Compartment에 임포트합니다.

  5. 임포트된 Kubernetes Monitoring Sample Dashboard를 클릭합니다.

  6. 그림과 같이 대상 OKE 클러스터의 메트릭을 통한 대쉬보드를 볼 수 있습니다.

    image-20230908161956472

대쉬보드 수정하기
  1. 대쉬보드 오른쪽 위 Actions에서 Edit를 선택합니다.

  2. 현재 대쉬보드상의 위젯을 편집하거나, 추가 할 수 있습니다.

  3. 추가를 위해 Create Metric Widget를 클릭합니다.

    image-20230908162259971

  4. Compartment는 샘플대쉬보드에서 사용하는 기본값(이미 있는 Compartment 필터)을 사용합니다.

  5. Source에서 추가한 mgmtagent_kubernetes_metrics을 선택합니다.

    image-20230224154742441

  6. 추가된 메트릭을 기준으로 차트를 만들 수 있습니다.

    image-20230224155038890



이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.

Last updated on 8 Sep 2023