배경
Proxmox 홈랩 환경의 호스트 서버와 실행 중인 VM을 모니터링하기 위해 Prometheus, Loki, Grafana 스택을 사용 중입니다. 수집된 데이터를 확인하기 위한 대시보드도 직접 만들어 사용해왔습니다.
다만 기존 대시보드는 개별 서버의 메트릭을 확인하는 데 초점을 두고 있었습니다. 이번에는 개별 서버 단위가 아니라 Proxmox 클러스터 전체의 상태를 한눈에 확인할 수 있는 대시보드를 만들어보고 싶었습니다. 최근 MCP가 주목받기 시작하면서 Grafana MCP가 있다는 것을 알게 되었고, 이를 Codex에 연결해 Proxmox 호스트 모니터링 대시보드를 구성해봤습니다.
이 글에서는 대시보드 자체보다, 예전에 직접 만들던 방식과 MCP를 연결한 뒤 달라진 작업 과정을 비교해보려고 합니다.
예전에 직접 만들었던 대시보드
2023년쯤 Prometheus와 Grafana를 Docker 기반으로 구축해보며 사용하기 시작했습니다. 제게는 처음 접하는 도구였고 기능도 많았기 때문에, 공식 문서의 튜토리얼을 따라 구성한 뒤 필요한 부분을 조금씩 수정해가며 익혔습니다.
대시보드는 Node Exporter 공식 대시보드를 참고하는 것부터 시작했습니다. 패널이 매우 많아 처음에는 한눈에 파악하기 어려웠기 때문에, 우선 기본적인 메트릭 위주로 필요한 패널을 선별했습니다.
이후 각 패널의 설정과 쿼리를 하나씩 살펴보며 제 환경에 맞는 대시보드를 구성했습니다. 어떤 메트릭을 사용해야 하는지, 집계 함수는 어떻게 적용하는지, 쿼리 결과가 예상과 다를 때 문법이나 데이터 구조에 문제가 없는지 계속 검색하고 확인했습니다. 이 과정을 반복하다 보니 대시보드를 완성하는 데에는 꽤 오랜 시간이 걸렸습니다.
시간은 오래 걸렸지만 Prometheus의 메트릭 구조와 PromQL, Grafana 패널 설정에 익숙해질 수 있는 과정이었습니다.
Grafana MCP와 Codex
이번에는 대시보드를 만드는 방식을 조금 다르게 해봤습니다. 앞서 언급한 Grafana MCP를 Codex CLI에 연결해보기로 했습니다.
Grafana MCP가 Grafana에 접근하려면 Grafana URL과 API 토큰이 필요합니다. Grafana 관리자 계정을 직접 연결할 수도 있지만, 권한이 너무 크기 때문에 적절한 방법은 아니라고 생각했습니다. 대신 Grafana에서 service account를 생성하고, 대시보드 생성과 수정에 필요한 Editor 권한을 부여한 뒤 해당 계정의 토큰을 MCP에 등록했습니다.

MCP를 연결한 뒤에는 원하는 모니터링 내용을 자연어로 설명하며 작업을 시작할 수 있었습니다. 예전처럼 패널과 PromQL 쿼리를 처음부터 하나씩 찾아보는 대신, 원하는 대시보드의 목적과 포함할 정보를 먼저 전달하고 기본 구성을 생성하도록 요청했습니다.
Proxmox 모니터링 대시보드 구성
클러스터 정보 수집
Proxmox 호스트의 OS 메트릭은 Node Exporter로 수집할 수 있습니다. 하지만 Node Exporter만으로는 Proxmox 클러스터나 게스트, 데이터스토어, HA, QDevice 같은 Proxmox 자체 정보를 확인하기 어렵습니다.
이번에 대시보드를 구성하면서 Prometheus Proxmox VE Exporter가 있다는 것을 알게 되었습니다. PVE Exporter는 Proxmox API를 통해 Proxmox 자체의 운영 정보를 메트릭으로 제공하기 때문에, Node Exporter와 함께 사용하면 호스트 리소스와 Proxmox 클러스터 상태를 한 대시보드에서 확인할 수 있습니다. API 사용을 위해 Proxmox에도 별도의 계정과 API Token을 만들고 조회에 필요한 권한을 부여했습니다.
대시보드 구성
대시보드는 단순히 패널을 많이 추가하기보다, Proxmox 클러스터의 운영 상태를 빠르게 확인하는 것을 우선으로 구성했습니다. 특히 고려했던 것은 아래와 같은 항목이 있습니다.
- 클러스터 전체 CPU와 메모리 사용량, 노드 가용성 등 핵심 상태를 상단에 배치
- 노드 가용성은 현재 상태만 보여주는 Stat 대신 State Timeline으로 구성해 시간에 따른 상태 변화 확인
- 데이터스토어는 사용량을 비교하기 쉽도록 Used, Total, Use %를 포함한 테이블로 구성
- 호스트 온도는 센서별 원본 값을 모두 표시하지 않고 CPU, NVMe, Thermal Zone별 대표값으로 단순화
Codex에 이런 고려 사항을 요청했고, 다음과 같은 대시보드가 생성되었습니다. 클러스터와 노드의 CPU·메모리 사용량, 노드 가용성, 데이터스토어 사용량, 네트워크·디스크 I/O, 호스트 온도 등을 한 화면에서 확인할 수 있도록 구성되었습니다.

참고로, 화면의 `PVE HA Status`는 현재 `GONE / ERROR`로 표시되고 있습니다. 현재 홈랩은 두 개의 Proxmox 호스트로 구성되어 있지만, HA는 아직 적용하지 않은 상태입니다. 기존에는 두 호스트의 메모리 구성이 64GB와 16GB로 달라 장애 발생 시 한쪽 노드의 VM을 다른 노드가 모두 수용하기 어려울 수 있었습니다.
최근에는 두 호스트의 메모리를 각각 40GB로 맞춰 자원 구성을 조정했습니다. 앞으로 HA의 동작 방식과 필요한 조건을 더 확인한 뒤 실제 구성에 적용할 예정입니다.
마무리
예전에는 대시보드의 각 요소를 직접 검색하고 실험하면서 만들어야 했습니다. 하지만 이번에는 Grafana MCP와 Codex를 활용해 기본 구성을 만드는 데 몇 시간도 걸리지 않았습니다. 물론 생성된 결과를 그대로 사용한 것은 아니고, 기존 데이터와 비교했을 때 이상이 없는지 직접 확인하며 진행했습니다.
이번 작업의 결과물 자체가 대단한 것은 아닙니다. 다만 예전에는 오랜 시간을 들여 직접 만들었던 작업을, 최신 도구를 활용해 훨씬 짧은 시간에 다시 구성해보면서 작업 방식이 달라지고 있고 누구나 마음만 먹으면 할 수 있겠다는 점을 체감할 수 있었습니다. 그리고 기술의 발전 속도가 놀랍다는 것을 또 한번 느꼈습니다.
Comments