Monitoring 12

Prometheus TSDB 분석

https://ganeshvernekar.com/blog/prometheus-tsdb-the-head-block/ Prometheus TSDB (Part 1): The Head Block | Ganesh Vernekar Walk-through on how the in-memory part of Prometheus TSDB works ganeshvernekar.com 위 블로그를 바탕으로 좀 더 이해가 될수 있도록 추가 분석한 내용을 정리한다. 프로메테우스는 자체 TSDB(TimeSeries DataBase)를 가지고 있다. DB의 기본적인 특성을 가지고 있으면서도 시계열에 특화된 구조로 되어있다. TSDB의 기본적인 구조는 다음과 같다. Sample (t,v): (timestamp, value) 이 하나..

Monitoring 2024.01.28

nvidia dcgm-exporter(gpu-exporter)

nvidia 에서 제공하는 공식 gpu exporter인 dcgm-exporter에 대해 알아본다. DCGM 이란? DCGM은 DataCenter GPU Manager의 약자로, nvidia gpu 를 위한 종합 관리 및 모니터링 도구다. 이 도구는 데이터 센터 내의 nvidia gpu의 상태를 모니터링하고, 관리하는 데 사용된다. 여기서는 여러 기능 중 하나인 모니터링에 대해서 알아본다. DCGM 은 자체적으로 메트릭을 내보내지 않기 때문에 nvidia 이와 통신해서 메트릭을 만들어서 출력해주는 exporter를 별도로 제공하고 있다. DCGM exporter 동작방식 그림에서와 같이 dcgm exporter는 Kubelet/node-exporter/DCGM과 통신하여 메트릭을 수집한다. Service..

Monitoring 2024.01.18

kube-state-metrics Horizontal Sharding(auto scaling)

쿠버네티스 모니터링에서 중요한 담당을 하고 있는 kube-state-metrics의 스케일아웃에 대해서 얘기해보자 한다. kube-state-metrics는 쿠버네티스 리소스들의 메타 및 상태정보를 메트릭으로 export해주는 컴포넌트다. 프로메테우스에서는 이 메트릭들을 수집하고, 더불어 cpu/memory 등 실제 다른 메트릭과 룰을 통해 새로운 메트릭을 생성한다. 예를 들어 파드 상태 및 재시작/재시작 이유 등을 알수 있으며, 노드 또는 파드의 자원정보를 IP가 아닌 이름으로 표시해줄수도 있다. kube-state-metrics는 보통 Deployment 1개로만 배포되기 때문에 노드 또는 파드가 많이 늘어났을때 성능을 뒷받침하기 위해 스케일업을 하게 된다. 필요한 경우 노드 크기에 따른 auto s..

Monitoring 2024.01.09

동적 Prometheus 쿼리 만들기 with golang(레이블 삽입하기)

그라파나를 통해서 사용자에게 메트릭을 제공하려고 할때 가끔가다가 사용자별 테넌트 분리를 해야하는 경우가 있다. 또는 동적으로 변하는 특정 타겟별로 각 메트릭을 얻어오는 사이드카를 만들려고 할때 고정된 쿼리를 사용할수 없는 경우도 있다. 이럴 때는 base prometheus 쿼리를 기반으로 동적으로 레이블을 넣어줄 수 있다. 여기서는 golang client를 이용하는 방법을 설명한다. package main import ( "fmt" "github.com/prometheus/prometheus/promql/parser" ) // addLabelToQuery는 주어진 PromQL 쿼리에 새로운 레이블을 추가합니다. func addLabelToQuery(query, labelName, labelValue ..

Monitoring 2023.12.27

Prometheus Query(PromQL) 기본 이해하기

Prometheus Query(이하 PromQL)는 SQL과는 달라 처음 접하게 되면 이해하는데 조금 어려움을 겪을 수 있다. 하지만 제대로 이해하고 나면 정말 잘 만들어진 언어라는 것을 알 수 있다. 여기서는 PromQL의 기본 문법과 Metric Join(Vector matching)에 관해 설명하고자 한다. Data Model 먼저 Prometheus 에서 metric을 출력하는 형태를 살펴보면, 다음과 같다. http_requests_total{container="A"} 1037 {=, = ...} [] Metric 이름이 제일 먼저 나오고, metric의 특징을 표현하는 레이블(label)들이 있다. 그리고 가장 마지막으로는 metric 값(value)이 있다. 필요에 따라 timestamp도 ..

Monitoring 2021.04.08

Thanos Tips

Thanos 는 Prometheus 사용할 때 HA 와 Long-term storage 를 보완하기 위한 솔루션으로서 기본적인 컨셉과 설명은 조대협님 블로그에 잘 설명되어 있다. https://bcho.tistory.com/1375 Prometheus 를 스케일링 하기 위한 Thanos (타노스) 문제 정의 프로메테우스가 좋은 모니터링 시스템이긴 하지만 두가지 결정적인 문제점을 가지고 있다. 결정적으로 클러스터링 구조를 지원하지 않기 때문에, 확장성과 가용성 문제를 가지고 있다. 확장성 측면에서.. bcho.tistory.com 여기서는 추가적으로 실 운영단계에서 알아둬야할 몇가지 팁을 요약해보고자 한다. - Thanos의 쿼리 속도는 Vanila Prometheus 보다 최소 2~10배 까지 느릴 수 ..

Monitoring 2020.02.11

빈번한 No data alert 벗어나기(in Grafana)

Grafana Alert은 상당히 직관적이고 편리하지만 가끔가다 Metric수집이 안됐을 경우 No Data Alert이 다량 발생할 수 있다. 모니터링에서 이러한 작은 No Data 이슈는 큰 문제가 아니며(수집이 timeout이나 네트웍에 잠깐 문제가 있을수도 있기 때문이다) 곧 정상으로 돌아왔다면 굳이 이러한 패턴에 모두 No Data Alert을 걸어둘 필요는 없다고 본다. Grafana Alert을 셋팅할때 No Data and Error Handling에서 "If no data or all values are null" 항목의 state를 No Data로 해두면 이 경향이 더 심한데, 이유는 No Data로 했을 경우 Pending 상태(For 항목에서 지정한 period)를 무시하고 곧바로 ..

Monitoring 2019.12.12

GPFS Client side monitoring on k8s

GPFS(General Parallel File System)는 IBM에서 개발된 파일시스템으로 1998년에 1.1버전이 최초 출시하면서 계속해서 발전해 온 것으로 알고 있다. https://www.ibm.com/support/knowledgecenter/ko/SSH2TE_1.1.0/com.ibm.7700.r2.common.doc/doc/c00000085.html IBM Knowledge Center Please note that DISQUS operates this forum. When you sign in to comment, IBM will provide your email, first name and last name to DISQUS. That information, along with your..

Monitoring 2019.12.10

Kubernetes 에서 Monitoring System(Prometheus) 운영경험기

필자는 2017년 초부터 현재까지 약 2년 6개월에 가까운 기간동안 kubernetes 기반 모니터링 시스템을 운영하였다.(실제 Prometheus로 운영한 것은 2019년 2월부터) 기간으로만 따지면 매우 긴 기간이지만 그에 비해 경험이 충분하지 않다고 생각한다.(전체 시스템 Scalability에 한계가 있음) 하지만 k8s에서의 모니터링 시스템 운영할 예정이거나 운영하고 계시는 분들에게 미약하게나마 도움이 되고자 사용 경험담(실수, 팁 등)을 공유하고자 한다. 전체를 크게 3개 부분으로 나누었다. 1. Kubernetes 사용 관련 2. Prometheus 설치/운영 관련 3. Prometheus Query, Grafana 사용 관련 각각의 세부 내용은 중요하다고 생각하는 부분을 흐름이나 순서없이 ..

Monitoring 2019.11.27

Grafana API Call Flow 분석

Grafana는 모니터링 대시보드로서 거의 반표준으로 사용되고 있다. 지원되는 기능이 많아 수정하는 경우가 별로 없지만, 필자의 경우 Grafana에서 지원하는 기본 Multi-Tenant 로는 부족하여 API를 직접 구현/추가하였다. 이를 위해 먼저 Grafana API 호출 흐름을 이해하고 있어야 한다. 여기서는 Grafana Backend의 API Call 흐름을 간단하게 분석해보고자 한다. Grafana의 Backend는 Golang으로 작성되어 있으며, Frontend는 AngularJS로 되어있다.AngularJS는 Framework이라 구조에 대해 별로 평할게 없지만, Backend는 Golang을 모르더라도, 정말 쉽게 이해할수 있도록 가독성 높게 구현되어 있다.Grafana Git Clo..

Monitoring 2019.01.17