Prometheus 원격 쓰기에서 청구된 바이트 크기는 New Relic으로 전송된 바이트보다 클 수 있습니다. 차이에 놀라지 않도록 데이터 압축이 청구된 바이트에 미치는 영향을 검토하는 것이 좋습니다.
데이터 압축 및 청구 이해
Prometheus 원격 쓰기 데이터는 더 빠르고 무손실 전송을 위해 압축 된 New Relic으로 전송됩니다. 수집되면 해당 데이터는 압축 해제되고 장식되어 엔터티 합성 과 같은 New Relic 기능과 함께 적절하게 사용할 수 있습니다. 압축과 비압축 바이트 레이트의 차이를 예상해야 하지만 Prometheus 원격 쓰기 데이터의 잠재적인 차이는 New Relic의 과금 모델 때문에 중요합니다.
데이터를 수집하는 데 필요한 계산 노력과 New Relic에 저장된 데이터 크기에 따라 요금이 청구됩니다. 압축 해제 프로세스 및 데이터 변환으로 인해 최종 압축되지 않은 바이트가 압축된 파일의 약 15배 크기로 저장될 수 있습니다.
예를 들어, 실제 트래픽을 시뮬레이션할 때 수집한 시계열 데이터 샘플링을 기반으로 다음과 같은 내용을 볼 수 있습니다.
~124 GB/day compressed data sent = ~1.86TB uncompressed data stored
아래는 Prometheus 읽기-쓰기 데이터가 시스템을 통해 이동할 때 바이트 속도 변화를 시뮬레이션한 것입니다. 이 경우 메트릭은 로컬 노드 내보내기의 로컬 Prometheus 서버의 원격 쓰기 스크랩을 수집하여 생성되었습니다.
Prometheus가 보낸 바이트 레이트가 데이터 포인트 압축을 풀기 직전에 우리가 기록하는 원격 쓰기 압축 바이트 수와 얼마나 밀접하게 일치하는지 주목하십시오. 원격 쓰기 압축 바이트 속도의 증가된 변동은 분산 시스템을 통해 데이터를 처리하는 특성에 기인할 수 있습니다.
데이터 포인트가 압축 해제됨에 따라 데이터 압축 해제 직전과 직후에 측정한 원격 쓰기 압축 데이터 바이트 비율과 원격 쓰기 비압축 바이트 비율 간의 차이에 5-10x 확장 계수가 반영됩니다.
마지막으로 데이터가 변환되고 보강이 수행됨에 따라 압축되지 않은 원격 쓰기 바이트와 bytecountestimate()
간의 차이는 아래에서 확인할 수 있습니다. 나열된 bytecountestimate()
은 저장되기 전 데이터의 최종 상태에 대한 바이트 수를 측정한 것입니다.
Prometheus 읽기-쓰기 데이터가 통과할 수 있는 데이터 변환/추가를 더 잘 이해할 수 있도록 Prometheus 서버에서 보고한 측정값인 prometheus_remote_storage_bytes_total
측정항목을 비교합니다.
첫 번째는 Prometheus가 제공한 표현이고 두 번째는 NRQL 쿼리 대응물입니다.
Prometheus 서버 표현:
"prometheus_remote_storage_bytes_total" { "instance=""localhost:9090" "job=""prometheus" "remote_name=""5dfb33" "url=""https://staging-metric-api.newrelic.com/prometheus/v1/write?prometheus_server=foobarbaz"}23051
NRQL 쿼리 표현
{ "endTimestamp": 1631305327668, "instance": "localhost:9090", "instrumentation.name": "remote-write", "instrumentation.provider": "prometheus", "instrumentation.source": "foobarbaz", "instrumentation.version": "0.0.2", "job": "prometheus", "metricName": "prometheus_remote_storage_bytes_total", "newrelic.source": "prometheusAPI", "prometheus_remote_storage_bytes_total": { "type": "count", "count": 23051 }, "prometheus_server": "foobarbaz", "remote_name": "5dfb33", "timestamp": 1631305312668, "url": "https://staging-metric-api.newrelic.com/prometheus/v1/write?prometheus_server=foobarbaz"}
팁
위의 예는 기본 개념을 설명하기 위한 단순화된 비교이므로 레이블 지정 및 주요 측정항목을 평균보다 가볍게 사용할 수 있습니다. 실제 버전은 더 복잡하기 때문에 약간 다르게 보일 것입니다.
NRQL을 사용하여 데이터 수 쿼리
다음 NRQL 쿼리 를 확인하여 바이트 수 정보를 수집하십시오.
New Relic에 저장된 예상 바이트 수를 보려면:
FROM Metric SELECT rate(bytecountestimate(), 1 minute) AS 'bytecountestimate()' WHERE prometheus_server = INSERT_PROMETHEUS_SERVER_NAME SINCE 1 hour ago TIMESERIES AUTO
New Relic으로 전송된 Prometheus 바이트를 모니터링하려면:
FROM Metric SELECT rate(sum(prometheus_remote_storage_bytes_total), 1 minute) AS 'Prometheus sent bytes rate' WHERE prometheus_server = INSERT_PROMETHEUS_SERVER_NAME SINCE 1 hour ago TIMESERIES AUTO
외부 참조
다음은 압축 및 인코딩을 명확히 하는 Prometheus 및 GitHub 문서에 대한 몇 가지 외부 링크입니다.
인코딩에 사용되는 Snappy Compression을 참조하는 Prometheus : 읽기 및 쓰기 프로토콜은 모두 HTTP를 통한 빠른 압축 프로토콜 버퍼 인코딩을 사용합니다. 프로토콜은 아직 안정적인 API로 간주되지 않으며 앞으로 Prometheus와 원격 저장소 간의 모든 홉이 HTTP/2를 지원하는 것으로 안전하게 가정할 수 있게 되면 HTTP/2를 통한 gRPC를 사용하도록 변경될 수 있습니다.