Elastic Observability를 이용한 Kubernetes 클러스터 관리

운영 엔지니어(SRE, IT 관리자, DevOps)인 여러분은 기술과 데이터의 무분별한 확장을 관리하는 방법에 대해 항상 고민하고 있습니다. Kubernetes는 점점 더 널리 보급되고 있으며, 이러한 배포의 대부분은 Amazon Elastic Kubernetes Service(EKS), Google Kubernetes Engine(GKE) 또는 Azure Kubernetes Service(AKS)에서 이루어질 예정입니다. 여러분 중에 어떤 분들은 단일 클라우드를 이용하실 수도 있지만 또 다른 분들의 경우에는 여러 Kubernetes 클라우드 서비스에서 여러 클러스터를 관리해야 하는 부담이 가중될 것입니다. 클라우드 서비스 제공자의 복잡성뿐만 아니라, 여러분은 수백 개의 배포된 서비스를 관리하여 점점 더 많은 통합 가시성 및 원격 측정 데이터를 생성해야 합니다.

Kubernetes 클러스터와 이 클러스터에서 실행 중인 애플리케이션의 현재 상황과 상태를 로그, 메트릭 및 추적을 통해 파악하는 일상적인 작업이 가장 큰 과제가 될 가능성이 클 것으로 보입니다. 하지만 운영 엔지니어라면 문제를 예방, 예측 및 해결하는 데 도움이 되는 중요한 데이터가 모두 필요할 것입니다. 또한 문제 해결 및 지원을 위해 Kubernetes 원격 측정 데이터를 시각화하고 분석해야 할 때 여러 도구에 걸쳐 분산된 메트릭, 로그 및 추적 볼륨을 처리해야 하는 상황은 분명히 원치 않으실 것입니다.

Elastic Observability는 널리 알려진 로깅뿐만 아니라 그 이상으로 광범위하고 중앙 집중화된 통합 가시성 기능을 제공함으로써 Kubernetes 메트릭과 로그의 무질서한 확장을 관리하는 데 도움이 됩니다. Elastic Observability는 OpenTelemetry 및 APM 에이전트를 통해 모든 메트릭, 로그 및 추적 데이터를 통합함으로써 Kubernetes 클러스터의 동작과 Kubernetes 클러스터에서 실행 중인 애플리케이션에 대한 자세한 인사이트 및 컨텍스트를 제공합니다.

클러스터 위치(EKS, GKE, AKS, 자체 관리형)나 애플리케이션에 관계없이, Elastic Observability를 통해 Kubernetes 모니터링을 간단히 수행할 수 있습니다. Elastic Observability에서는 애플리케이션 추적과 함께 노드, 포드, 컨테이너, 애플리케이션, 인프라(AWS, GCP, Azure) 메트릭, 인프라 및 애플리케이션 로그를 모두 사용할 수 있습니다.

이 블로그에서는 다음과 같은 내용을 소개해 드립니다.

  • Elastic Cloud가 Elastic Agent(여러분의 클러스터에서 DaemonSet으로 손쉽게 배포됨)를 통해 메트릭과 로그 데이터를 집계하고 수집하여 호스트(시스템 메트릭, 컨테이너 통계)의 로그 및 메트릭과 아울러 Kubernetes에서 실행되는 모든 서비스의 로그를 검색할 수 있는 방법.
  • Elastic Observability를 통해 모든 Kubernetes 클러스터 구성 요소(포드, 노드, 서비스, 네임스페이스 등)에 걸쳐 통합 원격 측정 경험(로그, 메트릭, 추적)을 제공할 수 있는 방법.
Elastic Agent와 Kubernetes 통합
Elastic Agent와 Kubernetes 통합

필수 구성 요소 및 구성

이 블로그를 팔로우할 계획이신 경우를 위해, 이 데모를 설정하는 데 사용한 몇 가지 구성 요소와 세부 정보를 소개해 드립니다.

  • Elastic Cloud 계정과 배포된 스택이 있는지 확인합니다(여기 지침 참조).
  • GKE를 사용하는 동안, Kubernetes 클러스터를 위해 어떤 위치든 사용하실 수 있습니다.
  • 우리는 매우 인기 있는 HipsterShop 데모 애플리케이션의 변형을 사용했습니다. 이것은 원래 OpenTelemetry 데모 앱과 같이 사용 가능한 다양한 변형에서 Kubernetes를 선보이기 위해 Google이 작성한 것입니다. 앱을 사용하려면, 여기로 이동하여 지침에 따라 배포하세요. Kubernetes 메트릭 흐름을 위해 otelcollector를 배포할 필요가 없습니다. 여기에 대해서는 아래에서 다룰 것입니다.
  • Elastic은 Prometheus와 FluentD에서 네이티브 수집을 지원하지만, 이 블로그에서는 Elastic Agent를 통해 Kubernetes 클러스터에서 직접 수집하는 모습을 보여드리고 있습니다. Elastic이 Prometheus 또는 FluentD/bit에서 원격 측정을 어떻게 가져올 수 있는지도 보여드리는 후속 블로그가 있을 예정입니다.

Elastic으로 무엇을 관찰하고 분석할 수 있는가?

Elastic이 Kubernetes 클러스터 메트릭 및 로그를 수집하고 시각화할 수 있도록 설정하는 단계를 살펴보기 전에, Elastic의 유용한 대시보드를 미리 살펴보겠습니다.

언급한 바와 같이, 우리는 GKE에서 HipsterShop의 변형 모델을 실행하고 Kubernetes 통합이 적용된 Elastic Agent를 GKE 클러스터에 DaemonSet으로 배포했습니다. 에이전트를 배포하면, Elastic이 Kubernetes 클러스터(특히 kube-state-metrics)에서 메트릭을 수집하기 시작하고 추가로 Elastic이 클러스터에서 모든 로그 정보를 가져오게 됩니다.

Elastic Observability의 Kubernetes 메트릭 시각화

다음은 Elastic Observability에서 기본 제공(Out-Out-Box, OOTB)되는 몇 가지 Kubernetes 대시보드입니다.

Elastic Kubernetes 개요 대시보드의 HipsterShop 클러스터 메트릭
Elastic Kubernetes 개요 대시보드의 HipsterShop 클러스터 메트릭
Elastic Observability의 HipsterShop 기본 네임스페이스 포드 대시보드
Elastic Observability의 HipsterShop 기본 네임스페이스 포드 대시보드

클러스터 개요 대시보드 및 포드 대시보드 외에도, Elastic에는 다음과 같은 몇 가지 유용한 기본 제공 대시보드가 있습니다.

  • Kubernetes 개요 대시보드(위 참조)
  • Kubernetes 포드 대시보드(위 참조)
  • Kubernetes 노드 대시보드
  • Kubernetes 배포 대시보드
  • Kubernetes DaemonSets 대시보드
  • Kubernetes StatefulSets 대시보드
  • Kubernetes CronJob & Jobs 대시보드
  • Kubernetes 서비스 대시보드
  • 계속해서 정기적으로 추가되고 있습니다

또한 이러한 대시보드를 사용자 정의하거나 자체 대시보드를 구축하실 수 있습니다.

Elastic Observability의 로그를 사용한 작업

Kubernetes 컨테이너 로그 및 Elastic Agent 로그
Kubernetes 컨테이너 로그 및 Elastic Agent 로그

위 화면에서 볼 수 있듯이, Kubernetes 클러스터 메트릭뿐만 아니라 모든 Kubernetes 로그를 내 Kubernetes 클러스터에 있는 Elastic Agent를 사용하여 간단하게 얻을 수 있습니다.

문제 예방, 예측 및 해결

Elastic은 메트릭과 로그를 관리하는 데 도움이 될 뿐만 아니라 클러스터 원격 측정 전체에서 이상 징후를 탐지하고 예측할 수 있도록 지원합니다. 데이터에 대해 Elastic의 Machine Learning을 켜고 분석 작업 향상을 어떻게 지원하는지 지켜보세요. 아래에서 볼 수 있는 것처럼, Elastic은 Kubernetes 클러스터 로그 및 메트릭을 위한 Observability 위치일 뿐만 아니라 분석 및 관리를 강화할 수 있는 광범위한 진정한 머신 러닝 기능을 제공합니다.

Elastic Observability 로그 전반에 걸친 이상 징후 탐지
Elastic Observability 로그 전반에 걸친 이상 징후 탐지
Elastic Observability를 통한 Kubernetes 포드의 문제점 분석
Elastic Observability를 통한 Kubernetes 포드의 문제점 분석

맨 위 그래프에서는 로그 전체에 걸친 이상 징후 탐지를 보실 수 있으며 9월 21일부터 23일까지의 기간에 잠재적으로 잘못된 것이 표시됩니다. 9월 초와 이달 말에 CPU 문제점을 보여주는 단일 kubernetes.pod.cpu.usage.node 메트릭을 분석하여 아래쪽 차트의 세부 정보를 파악해 보세요. 모집단 분석과 함께 다중 메트릭 분석(위에서 보여드리고 있는 단일 메트릭 문제 대비)을 사용하여 Machine Learning을 통해 클러스터 원격 측정에 대해 더 복잡한 분석을 수행하실 수 있습니다.

Elastic은 Kubernetes 클러스터 원격 측정 분석을 향상시키기 위해 더 나은 머신 러닝 기능을 제공합니다. 다음 섹션에서는, 원격 측정 데이터를 Elastic으로 얼마나 쉽게 가져올 수 있는지 살펴보겠습니다.

모든 설정

GKE에 배포된 HipsterShop 애플리케이션에서 메트릭, 로그 및 추적을 Elastic으로 가져오는 방법에 대한 자세한 내용을 살펴보겠습니다.

먼저, 가장 선호하는 Hipstershop 버전을 선택하세요. 위에서 언급했듯이, 이미 OTel이 있기 때문에 우리는 OpenTelemetry-Demo의 변형을 사용했습니다. 그러나 이 블로그를 위해 이 변형 버전을 축소했습니다(일부 다양한 언어를 사용하는 서비스 수가 더 적음).

0단계: Elastic Cloud의 계정 만들기

Elastic Cloud 시작하기 지침에 따르세요.

1단계: Kubernetes 클러스터를 가져와 Kubernetes 앱을 여러분의 클러스터에 로드

선택한 클라우드 서비스 또는 로컬 Kubernetes 플랫폼의 Kubernetes 클러스터에서 앱을 가져옵니다. 앱이 Kubernetes에서 실행되면, default 네임스페이스에서 다음 포드(또는 일부 변형)가 실행됩니다.

NAME                                    READY   STATUS    RESTARTS   AGE
adservice-8694798b7b-jbfxt              1/1     Running   0          4d3h
cartservice-67b598697c-hfsxv            1/1     Running   0          4d3h
checkoutservice-994ddc4c4-p9p2s         1/1     Running   0          4d3h
currencyservice-574f65d7f8-zc4bn        1/1     Running   0          4d3h
emailservice-6db78645b5-ppmdk           1/1     Running   0          4d3h
frontend-5778bfc56d-jjfxg               1/1     Running   0          4d3h
jaeger-686c775fbd-7d45d                 1/1     Running   0          4d3h
loadgenerator-c8f76d8db-gvrp7           1/1     Running   0          4d3h
otelcollector-5b87f4f484-4wbwn          1/1     Running   0          4d3h
paymentservice-6888bb469c-nblqj         1/1     Running   0          4d3h
productcatalogservice-66478c4b4-ff5qm   1/1     Running   0          4d3h
recommendationservice-648978746-8bzxc   1/1     Running   0          4d3h
redis-cart-96d48485f-gpgxd              1/1     Running   0          4d3h
shippingservice-67fddb767f-cq97d        1/1     Running   0          4d3h

2단계: kube-state-metrics 켜기

다음으로 kube-state-metrics를 켜야 합니다.

첫째,

git clone https://github.com/kubernetes/kube-state-metrics.git

다음으로, 예제 디렉터리 아래의 kube-state-metrics 디렉터리에서 표준 구성을 적용합니다.

kubectl apply -f ./standard

이렇게 하면 kube-state-metrics가 켜지고 kube-system 네임스페이스에서 실행되는 이와 유사한 포드가 표시됩니다.

kube-state-metrics-5f9dc77c66-qjprz                    1/1     Running   0          4d4h

3단계: Elastic Agent와 Kubernetes 통합 설치

Kubernetes 통합 추가:

  1. Elastic에서, 통합으로 이동하여 Kubernetes Integration(Kubernetes 통합)을 선택하고 Add Kubernetes(Kubernetes 추가)를 선택합니다.
  2. Kubernetes 통합의 이름을 선택합니다.
  3. 구성 화면에서 kube-state-metrics를 켭니다.
  4. new-agent-policy-name 텍스트 상자에 구성 이름을 지정합니다.
  5. 구성을 저장합니다. 이제 정책과의 통합이 생성됩니다.

여기에서 에이전트 정책과 이러한 정책이 Elastic Agent에서 어떻게 사용되는지에 대해 자세히 읽어보실 수 있습니다.

  1. Kubernetes 통합을 추가합니다.
  2. 두 번째 단계에서는 방금 생성하신 정책을 선택합니다.
  3. 에이전트 추가 지침의 세 번째 단계에서는 매니페스트를 복사하여 붙여넣거나 다운로드합니다.
  4. kubectl이 실행 중인 쉘에 매니페스트를 추가하고 이를 elastic-agent-managed-kubernetes.yaml로 저장한 후, 다음 명령을 실행합니다.
kubectl apply -f elastic-agent-managed-kubernetes.yaml

kube-system 네임스페이스에 여러 에이전트가 DaemonSet의 일부로 표시됩니다.

NAME                                                   READY   STATUS    RESTARTS   AGE
elastic-agent-qr6hj                                    1/1     Running   0          4d7h
elastic-agent-sctmz                                    1/1     Running   0          4d7h
elastic-agent-x6zkw                                    1/1     Running   0          4d7h
elastic-agent-zc64h                                    1/1     Running   0          4d7h

제 클러스터에서는, 4개의 노드와 4개의 elastic-agent가 DaemonSet의 일부로 시작되었습니다.

4단계: Kubernetes 메트릭에 대한 Elastic 기본 제공 대시보드(OOTB)를 살펴보고 Kubernetes 로그 검색 시작

이제 됐습니다. 모든 대시보드로 메트릭이 흘러가는 것을 보실 수 있습니다. 특정 포드에 대한 로그를 보려면, Kibana에서 Discover로 이동하여 특정 포드 이름을 검색하기만 하면 됩니다.

Elastic Kubernetes 개요 대시보드의 HipsterShop 클러스터 메트릭
Elastic Kubernetes 개요 대시보드의 HipsterShop 클러스터 메트릭
Elastic Observability의 Hipstershop 기본 네임스페이스 포드 대시보드
Elastic Observability의 Hipstershop 기본 네임스페이스 포드 대시보드

또한 Elastic에서 모든 포드 로그를 직접 둘러보실 수 있습니다.

frontendService와 cartService 로그
frontendService와 cartService 로그

위의 예에서, 저는 frontendService와 cartService 로그를 검색했습니다.

5단계: 보너스!

우리가 OTel 기반의 애플리케이션을 사용하고 있었기 때문에, Elastic은 애플리케이션 추적까지 가져올 수 있습니다. 하지만 이에 대해서는 다른 블로그에서 다루도록 하겠습니다.

다음은 Elastic Observability에서 프론트 엔드 트랜잭션을 위한 Hipster Shop의 추적이 어떤 모습인지 간단히 살펴본 것입니다.

HipsterShop을 위한 체크아웃 트랜잭션 추적
HipsterShop을 위한 체크아웃 트랜잭션 추적

결론: Kubernetes 모니터링을 위한 최고의 도구 Elastic Observability

Elastic Observability가 Kubernetes 클러스터를 관리하는 데 어떻게 도움이 되는지, 아울러 Elastic Observability가 간단한 배포를 위해서도 생성하는 메트릭, 로그 및 추적 데이터의 복잡성을 관리하는 데 어떻게 도움이 되는지를 이해할 수 있게 되셨기를 바랍니다.

다음은 학습 내용과 보다 구체적으로 배우신 내용을 간단히 요약한 것입니다.

  • Elastic Cloud가 Elastic Agent를 통해 원격 측정 데이터를 집계하고 수집할 수 있는 방법. Elastic Agent는 여러분의 클러스터에 DaemonSet으로 쉽게 배포되며 Kubernetes에서 실행되는 모든 서비스의 시스템 메트릭, 컨테이너 통계 및 메트릭과 같은 호스트의 메트릭을 검색합니다.
  • 모든 Kubernetes 클러스터 구성 요소(포드, 노드, 서비스, 모든 네임스페이스 등)에서 통합 원격 측정 경험으로부터 Elastic이 제공하는 내용(Kubernetes 로그, 메트릭, 추적)을 보여줍니다.
  • 분석과 관리를 강화하여 업무 시간을 줄여줄 Elastic의 ML 기능을 탐색하는 데 대한 관심이 있습니다.

시작할 준비가 되셨나요? 등록하시고 위에서 설명해드린 기능을 직접 사용해 보세요.