Zabbix-Prometheus를 통합하여 Zabbix 대시보드 구성
클라우드 환경에서의 효율적인 모니터링은 현대 비즈니스 운영에서 핵심적인 역할을 합니다. 이 문서에서는 카카오클라우드 Monitoring 서비스에서 제공하는 Metric Export 엔드포인트를 활용하여 데이터를 수집하고, Zabbix와 Prometheus의 통합을 통해 클라우드 서비스의 성능, 가용성 및 리소스 사용량을 종합적으로 모니터링하는 대시보드를 구성하는 방법에 대해 안내합니다.
- 예상 소요 시간: 30분
- Region: kr-central-2
kr-central-2의 퍼블릭 IP가 적용된 VM
또는 인터넷 게이트웨이가 연동된 kr-central-2의 VPC에 생성된 VM
의 요청에 대해서만 서비스를 제공합니다.
사전 준비
항목 | 설명 |
---|---|
Zabbix Server 4.0 이상 설치 | Metric Export 엔드포인트와 연결을 위해 설치 필요 |
액세스 키 | 카카오클라우드 콘솔의 우측 상단에 위치한 사용자 프로필에서 확인 가능 |
API 엔드포인트
https://monitoring.kr-central-2.kakaocloud.com/metric/grafana/{project_id}/prometheus
API 목록
카카오클라우드의 Monitoring 서비스에서는 Monitoring Metric Export를 위해 다음의 API를 제공합니다. 각 API는 Prometheus HTTP API와 호환됩니다.
항목 | 설명 |
---|---|
/metric/grafana/:id/prometheus/api/v1/series | 특정 Label Set와 일치하는 시계열 목록을 반환합니다. |
/metric/grafana/:id/prometheus/api/v1/query_range | 일정 기간의 쿼리 결과를 반환합니다. |
/metric/grafana/:id/prometheus/api/v1/query | 단일 시점에 대한 쿼리 결과를 반환합니다. |
/metric/grafana/:id/prometheus/api/v1/metadata | 메트릭에 대한 메타데이터를 반환합니다. |
/metric/grafana/:id/prometheus/api/v1/labels | 레이블 이름 목록을 반환합니다. |
/metric/grafana/:id/prometheus/api/v1/label/:labelName/values | 제공된 레이블 이름에 대한 레이블 값 목록을 반환합니다. |
Export 지원 메트릭 항목
Metric Export 기능을 이용하여 카카오클라우드 Monitoring 서비스에서 제공하는 사용자 프로젝트 내의 모든 메트릭을 확인할 수 있습니다. 지원하는 메트릭 항목은 모니터링 메트릭 > 주요 메트릭을 참고하시기 바랍니다.
API 사용 예제
Metric Export 메타데이터 조회
메트릭에 대한 메타데이터를 반환합니다.
Request
curl -X GET https://monitoring.kr-central-2.kakaocloud.com/metric/grafana/{project_id}/prometheus/api/v1/metadata \
-H "Credential-ID: {ACCESS_KEY_ID}" \
-H "Credential-Secret: {ACCESS_KEY_SECRET}" \
-H "service-type: {SERVICE_TYPE}"
API 호출 방식
메서드 | 요청 URL |
---|---|
GET | https://monitoring.kr-central-2.kakaocloud.com/metric/grafana/{project_id}/prometheus/api/v1/metadata |
Path | 유형 | 필수 여부 | 설명 |
---|---|---|---|
project_id | String | 필수 | 카카오클라우드의 프로젝트 ID |
Request Header
항목 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
Credential-ID | String | 필수 | 액세스 키 ID |
Credential-Secret | String | 필수 | 보안 액세스 키 |
service-type | String | 필수 | 해당 데이터 소스로 조회할 서비스 유형을 입력 - 지원 서비스 (입력 값) ㄴ Virtual Machine, GPU, Bare metal Server (입력값: server ㄴ Mysql (입력값: mysql )ㄴ Redis (입력값: redis )ㄴ Load Balancing (입력값: lb ) |
Response
{
"status":"success",
"data":{
"lb_bytes_in_persec":[
{
"type":"gauge",
"help":"인바운드 트래픽",
"unit":"bytes/s(IEC)"
}
],
"lb_bytes_out_persec":[
{
"type":"gauge",
"help":"아웃바운드 트래픽",
"unit":"bytes/s(IEC)"
}
]...
}
}
Metric Export Query 조회
단일 시점에 대한 쿼리 결과를 반환합니다.
Request
curl -X POST https://monitoring.kr-central-2.kakaocloud.com/metric/grafana/{project_id}/prometheus/api/v1/query \
-H "Credential-ID: {ACCESS_KEY_ID}" \
-H "Credential-Secret: {ACCESS_KEY_SECRET}" \
-H "service-type: {SERVICE_TYPE}" \
-d "query={조회할 metric}"
API 호출 방식
메서드 | 요청 URL |
---|---|
POST | https://monitoring.kr-central-2.kakaocloud.com/metric/grafana/{project_id}/prometheus/api/v1/query |
Path | 유형 | 필수 여부 | 설명 |
---|---|---|---|
project_id | String | 필수 | 카카오클라우드의 프로젝트 ID |
Request Header
Header | 유형 | 필수 여부 | 설명 |
---|---|---|---|
Credential-ID | String | 필수 | 액세스 키 ID |
Credential-Secret | String | 필수 | 보안 액세스 키 |
service-type | String | 필수 | 해당 데이터 소스로 조회할 서비스 유형을 입력 - 지원 서비스 (입력 값) ㄴ Virtual Machine, GPU, Bare metal Server (입력값: server )ㄴ Mysql (입력값: mysql )ㄴ Redis (입력값: redis )ㄴ Load Balancing (입력값: lb ) |
Request Body
항목 | 유형 | 필수 여부 | 설명 |
---|---|---|---|
query | String | 필수 | 조회할 메트릭 |
Response
{
"status":"success",
"data":{
"resultType":"vector",
"result":[
{
"metric":{
"__name__":"lb_bytes_in_persec",
"lb_id":"c9d6eefe-b100-4663-8114-6fdc7f9d53c9",
"lb_type":"Network",
"listener_id":"9bf3d454-dfbd-4861-bd59-729f12886e35"
},
"value":[
1702557658,
"0"
]
},
}
}
Zabbix-Prometheus 연동
카카오클라우드의 Monitoring Metric Export 엔드포인트를 이용하여 Zabbix 대시보드를 구성합니다.
템플릿 생성
-
Zabbix에서 Data collection > Template groups로 이동 후, 우측 상단의 [Create template group] 버튼을 클릭하여 Zabbix Templates group을 생성합니다.
항목 내용 Group name (예시) kakaocloud Templates group 생성
-
Data collection > Templates로 이동 후, [Create template] 버튼을 클릭합니다.
Templates 생성
-
앞서 생성한 Template group을 선택 후, [Add] 버튼을 클릭합니다.
Template group 선택
템플릿의 아이템 생성
-
Name란에 생성한 Template 명을 입력한 후 Item 항목을 클릭합니다.
Items로 이동
-
[Create Item] 버튼을 클릭하여 앞서 생성한 Templates의 아이템을 생성합니다.
Template의 아이템 생성
-
각 항목에 다음의 정보를 입력 후, [Add] 버튼을 클릭합니다.
정보 입력
속성 내용 Name 아이템의 이름 Type HTTP agent
선택Key 아이템의 Key Type of information Numeric
선택
⚠️ 테스트 시에는Text
유형으로 변경 필요URL https://monitoring.kr-central-2.kakaocloud.com/metric/grafana/{project_id}/prometheus/api/v1/query
Request type POST
Request body query={조회 metric}
Headers - Credential-ID
:{ACCESS_KEY_ID}
-Credential-Secret
:{ACCESS_KEY_SECRET}
-service-type
:{SERVICE_TYPE}
Update interval 메트릭 데이터를 가져올 주 기 -
테스트를 수행합니다. 이 과정은 필수 과정은 아니지만, 메트릭 값이 정상적으로 들어오는지 확인하기 위해 테스트를 수행하는 것을 권장합니다.
주의테스트 시에는 Item탭의 Type of information 항목을 임시적으로
Text
유형으로 변경해야 테스트가 가능합니다. 테스트를 완료하고 아이템을 최종 저장 시에는 다시Numeric
유형으로 변경하시기 바랍니다.-
[Test]와 [Get value and test] 버튼을 순차적으로 클릭하여 정상적으로 메트릭 값을 가져오는지 확인합니다.
메트릭 값 확인
-
Preprocessing steps의 add를 선택합니다. Preprocessing 탭의 Preprocessing steps에서 추출할 메트릭 값을 설정합니다.
추출할 메트릭 값 설정
항목 설정값 Name JSONPath Parameters 메트릭 데이터에서 해당 값 지정
예시: $.data.result[12].value[1]
- LB가 3개인 경우, [0, 1, 2]가 존재. 즉, result[2] 입력 가능Type of information Numeric
선택
⚠️ 테스트 시에는Text
유형으로 변경 필요-
[Test] 버튼을 클릭하고 Value에 메트릭 값을 입력합니다. 그 후, [Get value and test] 버튼을 클릭하여 정상적으로 값이 업데이트되는지 확인합니다. 테스트 확인
-
테스트 후, 아이템을 생성합니다.
안내테스트를 위해 Type of information을
Text
로 설정한 경우에는 정상적으로 그래프를 생성할 수 없습니다. 따라서 테스트를 완료했다면, Item탭의 Type of information 항목을Numeric
으로 다시 변경하시기 바랍니다.
-