Kubernetes Monitoring Tool
Kubernetes 클러스터에서 이벤트, Pod, Node 상태 등을 빠르게 확인할 수 있는 모니터링 툴입니다.
메뉴 선택 방식으로 다양한 정보를 조회할 수 있습니다.
코드에 대한 개선점이나 필요한 기능이 있으면 언제든 문의 환영합니다. (Welcome!)
-
Event Monitoring
- 전체 이벤트 혹은 정상(Normal)이 아닌 이벤트만 실시간(
watch
)으로 모니터링
- 전체 이벤트 혹은 정상(Normal)이 아닌 이벤트만 실시간(
-
Error Pod Catch
- 최근에 재시작된 컨테이너를 시간 기준으로 정렬하여 확인
-
Error Log Catch
- 재시작된 컨테이너 목록에서 특정 컨테이너의 이전 로그(-p 옵션) 확인
-
Pod Monitoring
- 생성된 순서, Running이 아닌 Pod, 전체/정상/비정상 Pod 개수를 조회
-
Node Monitoring
- 생성된 순서(노드 정보), Unhealthy Node, CPU/Memory 사용량이 높은 노드를 확인
- NodeGroup(라벨 기반)으로 필터링 가능
- Python 3.8 이상
- 가상환경(pyenv, conda 또는 venv)을 사용하면 충돌을 줄이고 독립된 환경을 유지할 수 있음
- 필수 라이브러리
- kubectl (Kubernetes Client)
-
Repository Clone
git clone https://github.com/KKamJi98/monitoring-kubernetes.git cd monitoring-kubernetes
-
라이브러리 설치
pip install kubernetes tabulate
- Python 3.8 버전 이상의 환경에서 실행을 권장합니다.
-
스크립트 실행
python kubernetes_monitoring.py
- 메뉴가 표시되면 원하는 항목 번호(또는 Q)를 입력하여 사용할 수 있습니다.
-
Repository Clone
git clone https://github.com/KKamJi98/monitoring-kubernetes.git cd monitoring-kubernetes
-
라이브러리 설치
pip install kubernetes tabulate
-
실행 권한 부여
chmod u+x kubernetes_monitoring.py
-
경로 이동
sudo cp kubernetes_monitoring.py /usr/local/bin/kubernetes_monitoring.py
-
실행
kubernetes_monitoring.py
참고: 일반적으로
/usr/local/bin
은 기본적으로PATH
에 포함됩니다.
만약PATH
에/usr/local/bin
이 없다면,~/.bashrc
또는~/.zshrc
에 다음을 추가해야 합니다.
export PATH=$PATH:/usr/local/bin
alias kmp="kubernetes_monitoring.py"
or
alias kmp="python -u /usr/local/bin/kubernetes_monitoring.py"
- 스크립트 최상단에 있는
NODE_GROUP_LABEL
변수를 통해 NodeGroup 라벨 키를 쉽게 변경할 수 있습니다. - 기본값은
"node.kubernetes.io/app"
로 설정되어 있으며, EKS 환경에서 NodeGroup 구분 시 흔히 사용하는 라벨입니다.
NODE_GROUP_LABEL = "node.kubernetes.io/app"
스크립트 실행 시 아래와 같은 메뉴가 표시되며, 원하는 번호를 선택하여 기능을 사용할 수 있습니다.
===== Kubernetes Monitoring Tool =====
1) Event Monitoring (Normal, !=Normal)
2) Error Pod Catch (가장 최근에 재시작된 컨테이너 N개 확인)
3) Error Log Catch (가장 최근에 재시작된 컨테이너 N개 확인 후 이전 컨테이너의 로그 확인)
4) Pod Monitoring (생성된 순서) [옵션: Pod IP 및 Node Name 표시]
5) Pod Monitoring (Running이 아닌 Pod 확인) [옵션: Pod IP 및 Node Name 표시]
6) Pod Monitoring (전체/정상/비정상 Pod 개수 출력)
7) Node Monitoring (생성된 순서) [AZ, NodeGroup 표시 및 필터링 가능]
8) Node Monitoring (Unhealthy Node 확인) [AZ, NodeGroup 표시 및 필터링 가능]
9) Node Monitoring (CPU/Memory 사용량 높은 순 정렬) [NodeGroup 필터링 가능]
Q) Quit
- 전체 이벤트 혹은
type!=Normal
이벤트를 실시간(watch -n2
)으로 확인 - 최신 이벤트부터 tail -n [사용자 지정] 개수로 표시
- 최근 재시작된 컨테이너의 종료 시점(
lastState.terminated.finishedAt
) 기준으로 내림차순 정렬 - 한 번에 원하는 개수만큼 표시
- 재시작된 컨테이너 목록에서 특정 컨테이너를 선택해 이전 로그(
kubectl logs -p
)를 확인 - tail -n [사용자 지정] 개수만큼 로그를 볼 수 있음
- Pod 생성 시간(
.metadata.creationTimestamp
) 기준 정렬 - tail -n [사용자 지정] 개수 표시
kubectl get pods
결과에서grep -ivE 'Running'
조건으로 Running이 아닌 Pod만 필터링- Pod IP 및 Node Name 확인 옵션
- 2초 간격으로 전체 Pod 개수, Running 상태인 Pod 개수, 비정상인 Pod 개수를 표시
- 노드의 생성 시간(
.metadata.creationTimestamp
) 기준 정렬 - Zone(
topology.ebs.csi.aws.com/zone
)와 NodeGroup(NODE_GROUP_LABEL
)을 표시 및 필터링 가능
kubectl get nodes
결과에서grep -ivE ' Ready'
로 Ready가 아닌 노드만 필터링
kubectl top node
결과에서 CPU나 메모리 기준으로 정렬 후 상위 N개 표시- NodeGroup 라벨 기반 필터링 가능 (
-l node.kubernetes.io/app=<값>
)