[프로메테우스] 메트릭 종류

91Savage·2022년 11월 2일
0

Server

목록 보기
9/24

메트릭 종류

  • Counter : 누적 개수 (향후 PromQL late함수와 사용)
  • Gauge : 현재 상태 (메모리,cpu 사용량)
  • Histogram : 특정 기간 동안의 집계 (지연시간 측정)
  • Summary : Histogram과 유사 Quantile (분위수로 응답 파악)

localhost:9100/metrics 에서 검색.

파이썬 클라이언트 라이브러리 설치

apt install -y python3-pip
python3 -m pip install prometheus_client

vim main.py

import http.server
import time
from prometheus_client import Histogram, start_http_server

histogram = Histogram(
    'response_time_histogram',
    'Response time for a request',
    buckets=[0.00028, 0.00030, 0.00032, 0.00034])

class Handler(http.server.BaseHTTPRequestHandler):
    def do_GET(self):
        start =time.time()
        self.send_response(200)
        self.wfile.write(b"Histogram Test")
        histogram.observe(time.time() - start)

if __name__ == "__main__":
    start_http_server(8081)
    server = http.server.HTTPServer(('localhost',8080), Handler)
    print('Exporter running on 8081')
    print('Server running on 8080')
    server.serve_forever()

python3 main.py
watch -n 0.1 'curl -s http://localhost:8081 | grep response'

node.js로 설치

apt install -y nodejs npm
cd ~
mkdir agent-node
cd agent-node
npm init -y

npm i express prom-client

vim server.js

const express = require('express');
const client = require('prom-client');
const app = express();

const register = new client.Registry();

const summary = new client.Summary({
    name: 'response_time_summary',
    help: 'Response time for a request',
    percentiles: [0.5, 0.9, 0.99],
    register: [register],
});

app.use((req, res, next) => {
    req.startTime = Date.now();
    next();
});

app.get('/', (req, res) => {
    res.send('Summary Test');
    summary.observe((Date.now() - req.startTime) / 1000);
});

app.get('/metrics', async (req, res) => {
    res.end(await register.metrics());
});

port = 8080;
app.listen(port, () => {
    console.log(`Running on ${port}`);
});

node server.js

다른 창에서
watch -n 0.1 'curl -s http://localhost:8080'

또 다른창에서
curl -s http://localhost:8080/metrics

# HELP response_time_summary Response time for a request
# TYPE response_time_summary summary
response_time_summary{quantile="0.5"} 0.000346183500385505
response_time_summary{quantile="0.9"} 0.0018920993227990966
response_time_summary{quantile="0.99"} 0.002954221218961626
response_time_summary_sum 0.4840000000000004
response_time_summary_count 1307

0.5 초, 0.9초 0.99초이상 소요된 응답 갯수 : summary_count
총 응답의 합 : summary_sum

0개의 댓글