[EKS + Airflow] - Monitering server metric
Background
지금까지 구성한 eks를 운영하기 위해서는 node 및 container들의 resource를 수집하고 관찰하여야 되는데요, 이번시간에는 간단히 k8s의 데이터 수집 및 가시화 오픈소스툴인 prometheus와 grafana를 설치하고 지표들을 탐색해봅시다.
Contents
Installation
prometheus
prometheus는 exporter가 데이터를 수집하고 prometheus server가 exporter로부터
정보를 수집합니다.
prometheus의 수집 컨테이너가 종료되더라도 수집되던 메트릭의 보존을 위해 storageclass를 사용해줍니다.
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm upgrade -i prometheus prometheus-community/prometheus \
--namespace prometheus \
--set alertmanager.persistentVolume.storageClass="ebs-sc" \
--set server.persistentVolume.storageClass="ebs-sc"
grafana
grafana는 오픈소스 메트릭 데이터 시각화 도구입니다. 외부 데이터 소스(prometheus)를 지정할수 있고 쿼리를 통해서 데이터를 동적으로 가지고 옵니다.
grafana를 외부에서 접속할수 있도록 service type을 loadbalancer로 지정해줍니다.
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install grafana grafana/grafana \
--namespace grafana \
--set persistence.storageClassName="ebs-sc"
--set service.type="LoadBalancer"
Metric
node resource
node_memory_MemAvailable_bytes

horizontal pod scaling 설정후 각 정시마다 worker pod가 증가함에 따라 node의 memory가 줄어드는것을 확인할수 있습니다.
container resource
container_memory_usage_bytes

각 worker container별 memory 사용량입니다. worker pod가 task 실행시 limit resource가 초과되자 pod가 evicted 되고 다시 생성되는 경우 입니다.
pod 이름을 my-release-worker를 포함한것으로 filtering 하고 싶을 경우 label filtering에
pod =~ ".*my-release-worker.*" 로 하면됩니다.
PromQL
container_memory_usage_bytes{pod=~".*my-release-worker.*"}
airflow running tasks
airflow_pool_running_slots_default_pool

각 시간별 airflow에서 실행중인 slots의 갯수입니다.
PromQL
airflow_pool_running_slots_default_pool
airflow worker deployment - replicaset count
kube_deployment_status_replicas_ready

celery worker들의 replicaset number를 측정한것입니다. 매 정시마다 pod가 scaling out 된것을 확인하실수 있습니다.
PromQL
kube_deployment_status_replicas_ready{deployment=~".*my-release-worker.*"}