23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
7년만에 Prometheus가 업그레이드 됐습니다.
Prometheus는 메트릭 수집 및 활용에 있어 사실상 표준의 지위를 얻고 있는 오픈소스 소프트웨어 입니다.
이번 버전에서는 새로운 UI를 제공하고 있고 원격의 데이터 활용에 사용되는 Remote write기능을 프로토콜 수준부터 개선하여 더 효율적으로 사용할 수 있었고 더 적은 부하를 발생시킵니다.
UTF-8을 활용할 수 있게되었습니다. 즉 한글로 매트릭 이름을 지정하여 수집하고 활용할 수 있습니다.
OpenTelemetry 등 상호 운용성을 강화하여 외부 생태계와의 연계를 강화했습니다.
2.x 대비하여 압도적으로 적은 부하를 발생를 발생시킵니다.
(아래그림은 동일한 메트릭 수집상황을 버전 별로 부하 비교, from prometheus official)
Memory 사용률 비교 | CPU사용률 비교 |
|---|---|
|
|
출처: https://prometheus.io/blog/2024/11/14/prometheus-3-0/
기본값으로 들어가거나 별도의 cli로 분리되면서 사라지게 되는 명령행의 플래그들은 다음과 같습니다.
promql-at-modifier
promql-negative-offset
remote-write-receiver
new-service-discovery-manager
expand-external-labels : 라벨설정에서 환경변수를 대치하는 것을 기본으로 함
no-default-scrape-port : 자동으로 http, https 프로토콜 해드에 따라 :80, :443을 붙여주는 동작을 하지 않음
agent: 단독 명령행으로 분리
auto-gomemlimit : 자동으로 “GOMEMLIMIT” 환경변수를 컨테이너의 설정에 맞춰 생성할 것이다.이것을 사용하지 않으려면 —no-auto-gomemlimit 사용
auto-gomaxprocs : 자동으로 “GOMAXPROCS” 환경변수를 컨테이너의 설정에 맞춰 생성할 것임, 이것을 사용하지 않으려면 —no-auto-gomaxprocs 사용
명칭에 대한 변경이 있었음
scrape_classic_histograms → always_scrape_classic_histograms로 이름 변경
remote_write.http_config.enable_http2 의 기본값이 false로 변경됨
정규식 동작의 변화
“.” 패턴에 개행문자도 매칭되도록 변경
v2 동작이 이어지도록 하려면 “.” 부분을 모두 “[^\n]”으로 바꿔야 함
조회의 기준변경
범위를 기반으로 조회시 이전에는 (start, end]에서 [start, end)로 변경됨
이에 따라 정시의 조회에서 초과적으로 데이터를 반환하던 부분이
1분당 수집하는 데이터를 5분치를 조회시
정확히 00초에 조회하면 예전에는 6개의 포인트를 받았으나, 3.0에서는 항상 5개를 받음
함수명의 변경
holt_winters → double_exponential_smoothing
실험 기능을 끝마치게 되면서 명칭 변경되었고 이를 사용하기위해서는 명시적으로 서버에 “--enable-feature=promql-experimental-functions” 파라미터를 전달해야 함
holt_winters 함수, Holt-Winters 방법을 사용하여 시계열 데이터를 예측하는 함수
holt_winters(series, interval, seasonality)
계절성(seasonality)를 기반으로 미래의 데이터를 예측
holt_winters(cpu_usage{job="my_job"}, 1m, 1h)
추가적으로 가중치를 추가 가능
alpha: 추세의 가중치를 나타내는 값입니다. 기본값은 0.1입니다.
beta: 계절성의 가중치를 나타내는 값입니다. 기본값은 0.1입니다.
gamma: 추세와 계절성의 가중치를 나타내는 값입니다. 기본값은 0.1입니다.holt_winters(cpu_usage{job="my_job"}, 1m, 1h, alpha=0.2)
수집프로토콜을 더 정교하게 했습니다.
이에 따라 Content-Type 해더를 더 엄격하게 다뤄 2.0에서는 텍스트 프로토콜로 통과되어 잘못된 구문분석이 되었던 경우를 방지할 수 있습니다.
프로그콜 에러에 대응하기위해 fallback_scrape_protocol 매개변수로 에러시 활용할 프로토콜을 지정하면 됩니다.
이것을 지정하지 않는다면 2.0에서 사용하던 수집파이프라인에 문제가 발생할 수도 있습니다.
(failback_scrape_protocol에 사용할 수 있는 값들 PrometheusProto, OpenMetricsText0.0.1, OpenMetricsText1.0.0, PrometheusText0.0.4, PrometheusText1.0.0)
내부 메트릭 저장소인 TSDB 포맷 변경에 따라 호환성 변화
TSDB에 remote_read만 구현한 외부 TSDB 사용시에는 문제가 발생할 수 있음
UTF-8을 활용한 메트릭과 라벨 이름을 정의할 수 있는데 이는 job별 metric_name_validation_scheme을 통해 지정해야함
로그 기록 방식을 “go-kit/log”에서 “log/slog”로 변경함에 따라 로그 메시지 형식이 달라짐
le, quantile 라벨값의 지정이 정수에서 실수(float)로 변경 ({le=”1”} → {le=”1.0”})
1.0 API로 Alertmanager 구성 불가
이번 Prometheus 3.0 업데이트는 많은 발전을 이루었습니다. 성능도 좋아지고 기능도 풍성해졌죠.
다만 마이그레이션 과정에서 몇 가지 주의할 점들이 있으니, 차근차근 준비하시면 좋을 것 같습니다.
tks에서도 곧 업그레이드를 진행할 예정인데요, 특히 Grafana 대시보드의 “le”, “qunatile” 함수 사용 부분을 중점적으로 살펴볼 계획입니다.
여러분들도 업그레이드 준비하실 때 이 글이 도움이 되었으면 좋겠네요!
3.0으로 업그레이드하실 때 다음 사항들을 꼭 확인해보세요:
Grafana 대시보드에서 le, quantile 관련 쿼리들을 찾아서 수정해주세요 (실수형으로 변경 필요)
정규식 패턴을 사용하고 계시다면, 개행문자 처리 방식이 바뀐 것을 고려해주세요
Remote Write를 사용중이라면 설정을 다시 한번 검토해보세요
참고
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.