티스토리 뷰

728x90
반응형

개요

이번 포스팅에서는 Kubernetes 오픈소스 계열 중 Observability and Analysis 분야에서 높은 지지도를 얻고 있는 Netdata에 대해 알아보도록 하자.
Netdata는 대표적인 Telemetry 솔루션인 Prometheus보다 CNCF 내에서 더 높은 별점을 얻고 있는 오픈소스로 실시간 성능 모니터링을 위해 유용하게 활용되고 있다.
간결한 구성만으로 시스템, 하드웨어, 컨테이너 및 애플리케이션에서 수천 개의 메트릭을 동시에 수집할 수 있다. 대부분의 Linux(Ubuntu, Debian, CentOS 등), 컨테이너 플랫폼(Kubernetes 클러스터, Docker) 및 기타 여러 운영 체제(FreeBSD, macOS)에 Netdata를 설치할 수 있다.

지금부터는 Amazon EKS 기반에 Netdata를 구축하여 EKS 내 Pod 모니터링 방법에 대해 알아보도록 하자.


포스팅 순서

  • Netdata 구축
    • 사전 준비사항
    • Netdata 설치
    • EKS 연동
  • 대시보드 활용

Netdata 구축

Netdata는 Kubernetes 만을 위한 오픈소스는 아니며, 모놀리스 환경의 On-Prem 또는 VM 환경의 SMS 솔루션으로도 활용 가능하다. 포스팅에서는 EKS에 접근 가능한 Workstation Server에 Netdata를 구축하고, Worker 노드와 EKS Pod를 함께 모니터링하는 과정에 대해 알아보도록 하자.

1) 사전 준비사항

  • Amazon EKS
  • EC2 Workstation
  • Helm3

2) Netdata 설치

Netdata를 설치하는 방법은 매우 간단하다. 아래와 같이 도커만 설치 되어 있으면 손쉽게 Netdata를 기동할 수 있다.

docker run -d --name=netdata \ -p 19999:19999 \ -v netdataconfig:/etc/netdata \ -v netdatalib:/var/lib/netdata \ -v netdatacache:/var/cache/netdata \ -v /etc/passwd:/host/etc/passwd:ro \ -v /etc/group:/host/etc/group:ro \ -v /proc:/host/proc:ro \ -v /sys:/host/sys:ro \ -v /etc/os-release:/host/etc/os-release:ro \ --restart unless-stopped \ --cap-add SYS_PTRACE \ --security-opt apparmor=unconfined \ netdata/netdata

기동이 완료되면 아래와 같이 Docker로 기동된 것을 확인할 수 있으며, 19999포트로 접근할 수 있다.

[root@ip-192-168-86-253 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e37ae4698a09 netdata/netdata "/usr/sbin/run.sh" 10 hours ago Up 10 hours (healthy) 0.0.0.0:19999->19999/tcp netdata [root@ip-192-168-86-253 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE netdata/netdata latest cdb212bb75cc 17 hours ago 331MB [root@ip-192-168-86-253 ~]#

대시보드 접근 시 다음과 같은 default 화면을 확인할 수 있다.

기본으로 Netdata가 설치되어 있는 서버의 메트릭 정보를 확인할 수 있다. 주요 메트릭 정보로 CPU, MEMORY, DISK, NETWORK 등의 정보를 확인할 수 있다.

3) EKS 연동

연동을 위해서는 먼저 Netdata에 로그인을 해야 한다. 로그인이 되지 않은 상태에서는 커스터마이징이 불가능하며, 설치된 서버의 SMS 서버 역할만 수행할 수 있다.
로그인이 완료되면, 비활성화 되어 있던 오른쪽 메뉴바들이 활성 상태로 변경된다.

> War Rooms Add
모니터링 대상의 그룹을 지정하는 War Room을 생성한다.

위와 같이 War Room 이름을 지정하고 상단의 ADD 버튼을 클릭한다.
> netdata parent/child 구성
추가한 War Room에 모니터링할 대상 노드를 지정하기 위해 Kubernetes Cluster Node에 netdata parent를 등록한다. netdata는 helm chart를 활용하여 쉽게 설치할 수 있다.

[root@ip-192-168-86-253 ~]# helm repo add netdata https://netdata.github.io/helmchart/ "netdata" has been added to your repositories [root@ip-192-168-86-253 ~]# helm install netdata netdata/netdata NAME: netdata LAST DEPLOYED: Tue Aug 10 18:57:56 2021 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: 1. netdata will be available on http://netdata.k8s.local/, on the exposed port of your ingress controller In a production environment, you You can get that port via `kubectl get services`. e.g. in the following example, the http exposed port is 31737, the https one is 30069. The hostname netdata.k8s.local will need to be added to /etc/hosts, so that it resolves to the exposed IP. That IP depends on how your cluster is set up: - When no load balancer is available (e.g. with minikube), you get the IP shown on `kubectl cluster-info` - In a production environment, the command `kubectl get services` will show the IP under the EXTERNAL-IP column The port can be retrieved in both cases from `kubectl get services` NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE exiled-tapir-nginx-ingress-controller LoadBalancer 10.98.132.169 <pending> 80:31737/TCP,443:30069/TCP 11h [root@ip-192-168-86-253 ~]# kubectl get pods -A | grep netdata default netdata-child-74kkz 2/2 Running 0 67s default netdata-parent-6975f94bd9-gjgw2 1/1 Running 0 67s [root@ip-192-168-86-253 ~]#

약 1분 정도 시간이 지나면 위와 같이 netdata parent와 netdata child가 기동된 것을 확인할 수 있다. netdata child는 각 노드에 기동되는 DaemonSet으로 보면되고, netdata parent는 대시보드로 전달해 주는 중간 접점 정도로 볼 수 있다.
> Claim 요청

netdata parent/child 구성이 완료되면, netdata 대시보드에 연결하기 위한 claim을 요청해야 한다. claim 요청에 사용되는 TOKEN과 ROOM 번호는 위와 같이 Connect Nodes - Nodes - 빨간박스 부분에서 확인할 수 있다.

ex) sudo netdata-claim.sh -token=[TOKEN_ID] -rooms=[ROOM_ID] -url=https://app.netdata.cloud

위 정보를 기반으로 override.yaml 파일을 다음과 같이 생성한다.

parent: claiming: enabled: true token: "TOKEN" rooms: "ROOM" child: claiming: enabled: true token: "TOKEN" rooms: "ROOM" configs: netdata: data: | [global] memory mode = ram history = 3600 [health] enabled = no

생성한 override.yaml을 helm upgrade를 통해 앞서 생성한 netdata chart에 반영한다.

[root@ip-192-168-86-253 ~]# helm upgrade -f override.yaml netdata netdata/netdata Release "netdata" has been upgraded. Happy Helming! NAME: netdata LAST DEPLOYED: Tue Aug 10 19:15:43 2021 NAMESPACE: default STATUS: deployed REVISION: 2 TEST SUITE: None NOTES: 1. netdata will be available on http://netdata.k8s.local/, on the exposed port of your ingress controller In a production environment, you You can get that port via `kubectl get services`. e.g. in the following example, the http exposed port is 31737, the https one is 30069. The hostname netdata.k8s.local will need to be added to /etc/hosts, so that it resolves to the exposed IP. That IP depends on how your cluster is set up: - When no load balancer is available (e.g. with minikube), you get the IP shown on `kubectl cluster-info` - In a production environment, the command `kubectl get services` will show the IP under the EXTERNAL-IP column The port can be retrieved in both cases from `kubectl get services` NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE exiled-tapir-nginx-ingress-controller LoadBalancer 10.98.132.169 <pending> 80:31737/TCP,443:30069/TCP 11h [root@ip-192-168-86-253 ~]#

> 노드 추가

EKS에서의 준비는 완료되었다. 이제 Netdata에서 노드를 추가해 보자. 중간의 ADD 버튼을 클릭하고 대상 노드를 선택한다.

위와 같이 정상적으로 연결되었을 경우 화면이 나타나는 것을 볼 수 있다.
간혹 연결자체가 실패하는 경우나 연결은 되었으나 데이터를 불러오지 못하는 경우가 있다. 이 경우 Claim 요청 시 RoomID/TOKEN 정보가 정확히 기입되었는지 확인해 보는것이 좋다


대시보드 활용

다양한 형태의 메트릭 정보는 물론 Pod의 상태 정보를 모두 확인할 수 있는 Netdata 대시보드 기능에 대해 알아보자.
> System OS (CPU, MEMORY, DISK, APPLICATION Metrics)

시스템 관점의 주요 지표들을 확인할 수 있다.
> Kubernetes Metrics (API Server, Pods, Rest Client, Cluster Metrics)

Kubernetes를 모니터링 할때 반드시 고려되어야할 주요 메트릭 정보를 모두 확인할 수 있다.


결론

이번 포스팅에서는 Netdata 구축 및 대시보드 활용에 대해 알아보았다.
Netdata는 Kubernetes가 구축되어 있는 환경에서 주요 지표들을 모니터링하는데 수분이내 구성을 완료할 수 있는 매력적인 Telemetry Component이다.

여러 제약사항들이 존재하기도 하고, Prometheus & Grafana 조합만큼 유연성이 높은 것은 아니지만, 시스템 모니터링 환경을 구성하는 Starter 또는 Row 데이터를 기준으로 표출되는 시스템 모니터링의 용도로는 Grafana 이상의 Quality를 보여주는 것이 아닌가 싶다.
이후 포스팅에서는 커스터마이징 및 장애 알람 등의 추가 기능에 대해 알아보는 시간을 갖도록 하자.

728x90
반응형