DevOps
System Monitoring 서비스의 Advanced Monitoring(OpenMetrics) 기능 소개
2021년 7월 2일
원문에서 보기 ↗Advanced Monitoring (OpenMetrics) 기능 소개
소개

다양한 오픈소스 설루션에서 발생하는 지표들을 모아서 모니터링하기 위해 가장 널리 사용되고 있는 것이 Prometheus라는 오픈소스 설루션입니다. Prometheus의 지표 포맷에 기반하여 만들어진 사실상의 표준 포맷이 OpenMetrics입니다.
클라우드 환경의 복잡한 시스템과 서비스에서 발생하는 다양한 지표들을 하나의 표준 포맷으로 통일하고 동일한 지표 수집 시스템을 통해 한 곳에 모아서 모니터링할 수 있도록 제공할 수 있다면 개발자나 시스템 엔지니어는 더 이상 모니터링 시스템을 구축하는 번거로움을 피하고 본업에 좀 더 집중할 수 있습니다.
NHN Cloud에서는 기존에 제공하고 있던 System Monitoring에 OpenMetrics 호환 지표를 수집하고 모니터링할 수 있는 기능을 추가하여 제공하고 있습니다. 운영체제로부터 발생하는 고정된 지표뿐만 아니라 다양한 오픈소스 설루션에서 발생하는 지표까지 손쉽게 모니터링할 수 있습니다.
지원 범위
일반적으로 사용자가 직접 모니터링을 구축하려면 수집 에이전트인 exporter와 중앙 수집 서비스인 Prometheus 서버와 차트/대시보드 및 알림 설정을 위한 웹서비스를 담당하는 Grafana를 설치해야 하므로 상당히 번거롭고 설정이 까다롭습니다. NHN Cloud에서는 Promethues와 Grafana가 제공하는 서비스를 대체하여 제공하므로 사용자가 직접 구축할 필요가 없습니다.

수집 가능한 지표는 시스템의 기본 지표 또는 다양한 오픈소스 설루션이 제공하는 지표입니다. 다음의 exporter를 이용하면 데이터베이스, 하드웨어, 이슈 트래커와 CI, 메시지 큐, 스토리지 설루션, HTTP 서비스와 API 서비스, 로깅 설루션, 기타 시스템으로부터 OpenMetrics 포맷으로 지표를 수집할 수 있습니다.
https://prometheus.io/docs/instrumenting/exporters/
공개된 exporter를 이용하지 않고 직접 OpenMetrics 포맷으로 export 해주는 exporter를 개발할 수도 있습니다. 다양한 프로그래밍 언어로 라이브러리가 제공되고 있습니다. https://prometheus.io/docs/instrumenting/clientlibs/
포맷의 형상
OpenMetrics 포맷은 텍스트 포맷이며, Prometheus 0.4.0 이후의 버전과 호환됩니다. HTTP 수준으로 통신하며 Content-Type: text/plain; version=0.0.4 헤더를 사용합니다.
각 지표마다 행 단위로 구분되며 구분자로 newline(\n)을 사용합니다. 자세한 포맷 문법을 설명하는 대신에 몇 가지 대표적인 예제를 통해 포맷의 형상을 설명하겠습니다.
http_requests_total{method="post",code="200"} 1027 1395066363000
http_requests_total{method="get",code="400"} 3 1395066363000
http_request_duration_seconds_sum 53423
맨 앞에 나오는 토큰(token)은 지표의 이름입니다. 위 예제에서는 http_requests_total이나 http_request_duration_seconds_bucket, http_request_duration_seconds_sum이 지표의 이름에 해당합니다.
지표 하위에 레이블(label)이라는 개념이 존재하는데, 이것은 지표의 상세한 조건이나 하위분류를 표현할 때 사용합니다. 레이블은 중괄호 안쪽에 쉼표로 구분해서 나열할 수 있고 마지막 행처럼 아예 생략도 가능합니다. 위 예제에서는 http_requests_total 지표에 method와 code라는 레이블이 존재하고 그 각각은 post와 200, get과 400이라는 값을 가진다는 의미입니다.
공백 문자로 구분된 다음 토큰은 지표의 값입니다. 지표의 값 뒤에도 공백으로 토큰이 위치할 수 있는데, 그게 존재한다면 타임스탬프의 용도로 사용됩니다. 위 예제에서는 HTTP 요청 총 횟수라는 지표에 대해 POST method로 호출되고 HTTP status code 200으로 응답이 된 횟수가 1027개임을 알 수 있습니다. 타임스탬프 값 1395066363000을 변환해보면 수집된 시각이 2014년 3월 17일 14:26:03.0초임을 확인할 수 있습니다. 타임스탬프 값이 지정되어 있지 않다면 수집 서버에서 조회한 시점이 수집 시각으로 기록됩니다.
사용 방법
공개된 exporter를 사용한다고 가정하겠습니다. exporter의 설치와 사용방법은 제각각이라서 여기서 자세히 설명하기는 어렵지만, 대부분 exporter를 설치하여 실행해 주기만 하면 기본 설정을 이용해서 수집이 가능합니다. 사용자가 기억해야 할 사항은 exporter가 어떤 서버에 설치되는지, 어떤 서비스 포트를 사용하는지입니다.
NHN Cloud의 콘솔에서 Compute > System Monitoring > OpenMetrics 대시보드로 접근합니다. 다음 순서에 따라 모니터링을 설정할 수 있습니다.
- 작업 공간
- 수집 대상
- 레이아웃
- 차트
작업 공간
작업 공간과 수집 대상을 합쳐서 지표를 조회할 수 있는 엔드포인트(endpoint)를 결정할 수 있습니다. 작업 공간은 수집할 정보를 지정하고 이를 시각화하는 공간적 개념입니다.
"추가" 버튼을 클릭하여 작업 공간을 하나 추가합니다.
이름에는 작업 공간의 ID를 영문자, 소문자, 일부 특수기호를 이용하여 기입합니다. URL 경로에는 지표를 제공하는 엔드포인트의 URL 상대 경로를 기입합니다.
수집 대상
"수집 대상 관리" 버튼을 클릭하여 수집 대상을 등록합니다. 수집 대상의 주요 정보는 서버명과 서비스 포트 번호입니다. 동일한 서비스 포트 번호를 가지고 여러 서버를 선택하여 등록 가능합니다.

레이아웃
"레이아웃 만들기" 버튼을 클릭하여 레이아웃을 생성합니다. 레이아웃은 차트의 구성과 배치를 저장해두는 개념입니다.
차트
"차트 추가" 버튼을 클릭하여 차트를 추가합니다. 하나의 차트에 여러 지표를 표시할 수 있습니다. 예를 들어, 1분 평균 CPU load 지표와 5분 평균 CPU load 지표를 모아서 하나의 차트로 표시할 수 있습니다. 
차트를 추가할 때 이벤트 판정 기준을 정해서 알림 설정을 할 수 있습니다. 

알림을 수신할 대상자 그룹을 "알림 그룹"이라고 하는데, System Monitoring 서비스 콘솔의 "사용자 그룹" 탭과 "알림 그룹" 탭에서 관리할 수 있습니다.
향후 계획
현재는 라인 차트만 제공 가능하여 다양한 시각화 도구를 제공하기 위해 차트 종류를 확대할 예정입니다.
또한, System Monitoring을 별도의 서비스 카테고리로 분리하고 Advanced Monitoring (OpenMetrics)라는 독립적인 서비스로 제공할 예정입니다.
참조
자세한 내용은 다음의 사용 가이드를 참고하실 수 있습니다.