๐Ÿ”ฅ Prometheus ํ•ต์‹ฌ ์น˜ํŠธ์‹œํŠธ

๋น ๋ฅด๊ฒŒ ๊ธฐ์–ตํ•  ํ•ต์‹ฌ๋งŒ ๋ชจ์•˜์Šต๋‹ˆ๋‹ค!


๐Ÿ“Œ 1. ํ•ต์‹ฌ ๊ฐœ๋… (30์ดˆ ์š”์•ฝ)

Prometheus๋ž€?
  - Pull ๊ธฐ๋ฐ˜ ์‹œ๊ณ„์—ด ๋ฉ”ํŠธ๋ฆญ DB
  - Kubernetes ๊ณต์‹ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ
  - CNCF Graduated ํ”„๋กœ์ ํŠธ
 
ํ•ต์‹ฌ ํŠน์ง•:
  โœ… Pull ๋ฐฉ์‹ (์„œ๋ฒ„๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ˆ˜์ง‘)
  โœ… Service Discovery (์ž๋™ ํƒ€๊ฒŸ ๋ฐœ๊ฒฌ)
  โœ… PromQL (๊ฐ•๋ ฅํ•œ ์ฟผ๋ฆฌ ์–ธ์–ด)
  โœ… ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ ์ €์žฅ
 
๋ฐ์ดํ„ฐ ํ๋ฆ„:
  Exporter(์ˆ˜์ง‘) โ†’ Prometheus(์ €์žฅ) โ†’ Grafana(์‹œ๊ฐํ™”)

๐Ÿ“Š 2. ๋ฉ”ํŠธ๋ฆญ ํƒ€์ž… (4๊ฐ€์ง€๋งŒ ๊ธฐ์–ต!)

Counter - ๊ณ„์† ์ฆ๊ฐ€๋งŒ

ํŠน์ง•:
  - ๋ˆ„์ ๊ฐ’ (์žฌ์‹œ์ž‘ ์‹œ์—๋งŒ 0์œผ๋กœ)
  - ์ ˆ๋Œ€ ๊ฐ์†Œ ์•ˆํ•จ
์˜ˆ์‹œ: http_requests_total, errors_total
ํ•„์ˆ˜ ํ•จ์ˆ˜: rate(), increase()

PromQL ์˜ˆ์‹œ:

# โŒ ์ž˜๋ชป - ๋ˆ„์ ๊ฐ’์€ ์˜๋ฏธ์—†์Œ
http_requests_total
 
# โœ… ์˜ฌ๋ฐ”๋ฆ„ - ์ดˆ๋‹น ์š”์ฒญ ์ˆ˜
rate(http_requests_total[5m])
 
# โœ… ์˜ฌ๋ฐ”๋ฆ„ - 5๋ถ„๊ฐ„ ์ด ์ฆ๊ฐ€๋Ÿ‰
increase(http_requests_total[5m])

Gauge - ์ฆ๊ฐ€/๊ฐ์†Œ ๊ฐ€๋Šฅ

ํŠน์ง•:
  - ํ˜„์žฌ ๊ฐ’
  - ์ฆ๊ฐ€/๊ฐ์†Œ ๋ชจ๋‘ ๊ฐ€๋Šฅ
์˜ˆ์‹œ: cpu_usage_percent, memory_bytes, temperature
์‚ฌ์šฉ: ์ง์ ‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (ํ•จ์ˆ˜ ๋ถˆํ•„์š”)

PromQL ์˜ˆ์‹œ:

# โœ… ํ˜„์žฌ CPU ์‚ฌ์šฉ๋ฅ 
node_cpu_usage_percent
 
# โœ… ํ‰๊ท  CPU
avg(node_cpu_usage_percent)
 
# โœ… ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ  ๊ณ„์‚ฐ
(node_memory_used_bytes / node_memory_total_bytes) * 100

Histogram - ๊ฐ’์˜ ๋ถ„ํฌ

ํŠน์ง•:
  - ๋ฒ„ํ‚ท์œผ๋กœ ๋ถ„ํฌ ์ธก์ •
  - ๋ฐฑ๋ถ„์œ„์ˆ˜(P95, P99) ๊ณ„์‚ฐ ๊ฐ€๋Šฅ
์˜ˆ์‹œ: http_request_duration_seconds_bucket
ํ•„์ˆ˜ ํ•จ์ˆ˜: histogram_quantile()

PromQL ์˜ˆ์‹œ:

# P95 ์‘๋‹ต์‹œ๊ฐ„ (95%๊ฐ€ ์ด ์‹œ๊ฐ„ ์ด๋‚ด)
histogram_quantile(0.95,
  rate(http_request_duration_seconds_bucket[5m])
)
 
# P99 ์‘๋‹ต์‹œ๊ฐ„
histogram_quantile(0.99,
  rate(http_request_duration_seconds_bucket[5m])
)

Summary - ์‚ฌ์ „ ๊ณ„์‚ฐ๋œ ๋ฐฑ๋ถ„์œ„์ˆ˜

ํŠน์ง•:
  - ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐฑ๋ถ„์œ„์ˆ˜ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐ
  - Histogram๋ณด๋‹ค ๊ฐ€๋ฒผ์›€
์˜ˆ์‹œ: http_request_duration_seconds{quantile="0.95"}
์‚ฌ์šฉ: ์ง์ ‘ ์‚ฌ์šฉ (๊ณ„์‚ฐ ์ด๋ฏธ ์™„๋ฃŒ๋จ)

๐ŸŽฏ 3. PromQL ํ•ต์‹ฌ ํŒจํ„ด

๊ธฐ๋ณธ ์ฟผ๋ฆฌ

# ๋ฉ”ํŠธ๋ฆญ ์กฐํšŒ
metric_name
 
# ๋ ˆ์ด๋ธ” ํ•„ํ„ฐ
metric_name{label="value"}
 
# ์ •๊ทœํ‘œํ˜„์‹
metric_name{label=~"value.*"}
metric_name{label!~"value.*"}

์‹œ๊ฐ„ ๋ฒ”์œ„

metric_name[5m]   # ์ตœ๊ทผ 5๋ถ„ (๋ ˆ์ธ์ง€ ๋ฒกํ„ฐ)
metric_name[1h]   # ์ตœ๊ทผ 1์‹œ๊ฐ„
metric_name[1d]   # ์ตœ๊ทผ 1์ผ
 
# ๊ณผ๊ฑฐ ์‹œ์ 
metric_name offset 1h   # 1์‹œ๊ฐ„ ์ „
metric_name offset 1d   # 1์ผ ์ „

ํ•„์ˆ˜ ํ•จ์ˆ˜ TOP 10

# 1. rate() - Counter ์ „์šฉ, ์ดˆ๋‹น ์ฆ๊ฐ€์œจ
rate(http_requests_total[5m])
 
# 2. irate() - ์ˆœ๊ฐ„ ์ฆ๊ฐ€์œจ (๋” ๋ฏผ๊ฐ)
irate(http_requests_total[5m])
 
# 3. increase() - ๊ธฐ๊ฐ„ ๋™์•ˆ ์ด ์ฆ๊ฐ€๋Ÿ‰
increase(http_requests_total[5m])
 
# 4. sum() - ํ•ฉ๊ณ„
sum(metric_name)
 
# 5. avg() - ํ‰๊ท 
avg(metric_name)
 
# 6. max() / min() - ์ตœ๋Œ€/์ตœ์†Œ
max(metric_name)
 
# 7. count() - ๊ฐœ์ˆ˜
count(metric_name)
 
# 8. topk() - ์ƒ์œ„ K๊ฐœ
topk(5, metric_name)
 
# 9. by - ๊ทธ๋ฃนํ™”
sum by (label) (metric_name)
 
# 10. without - ํŠน์ • ๋ ˆ์ด๋ธ” ์ œ์™ธ
sum without (pod) (metric_name)

์‹ค์ „ ์ฟผ๋ฆฌ ํŒจํ„ด

# CPU ์‚ฌ์šฉ๋ฅ 
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
 
# ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ 
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
 
# ์—๋Ÿฌ์œจ
sum(rate(http_requests_total{status=~"5.."}[5m])) /
sum(rate(http_requests_total[5m])) * 100
 
# QPS (์ดˆ๋‹น ์ฟผ๋ฆฌ)
sum(rate(http_requests_total[5m]))
 
# ํ˜„์žฌ vs 1์‹œ๊ฐ„ ์ „ ๋น„๊ต
rate(metric[5m]) / rate(metric[5m] offset 1h)

๐Ÿ—๏ธ 4. Native vs Operator (ํ•ต์‹ฌ ์ฐจ์ด)

๋น„๊ตํ‘œ

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   ํ•ญ๋ชฉ      โ”‚   Native         โ”‚   Operator         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ์„ค์ • ๋ฐฉ์‹   โ”‚ prometheus.yml   โ”‚ ServiceMonitor CRD โ”‚
โ”‚ ์„ค์ • ๋ณต์žก๋„ โ”‚ ๋†’์Œ (regex)     โ”‚ ๋‚ฎ์Œ (์„ ์–ธ์ )       โ”‚
โ”‚ ๋ณ€๊ฒฝ ๋ฐ˜์˜   โ”‚ ์žฌ์‹œ์ž‘ ํ•„์š”      โ”‚ ์ž๋™ (10-30์ดˆ)      โ”‚
โ”‚ Pod ํ‘œ์‹œ    โ”‚ Annotation       โ”‚ Label              โ”‚
โ”‚ ๋„ค์ž„์ŠคํŽ˜์ด์Šคโ”‚ ์–ด๋ ค์›€           โ”‚ ์‰ฌ์›€ (RBAC)         โ”‚
โ”‚ ํ˜‘์—…        โ”‚ ์šด์˜ํŒ€ ๋ณ‘๋ชฉ      โ”‚ ๊ฐœ๋ฐœํŒ€ ์…€ํ”„์„œ๋น„์Šค   โ”‚
โ”‚ GitOps      โ”‚ ๋‚ฎ์Œ             โ”‚ ๋†’์Œ               โ”‚
โ”‚ ์ถ”์ฒœ        โ”‚ ๊ฐ„๋‹จํ•œ ํ™˜๊ฒฝ      โ”‚ ํ”„๋กœ๋•์…˜, ๋ฉ€ํ‹ฐํŒ€    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Native ๋ฐฉ์‹

# Pod Annotation ํ•„์ˆ˜
annotations:
  prometheus.io/scrape: "true"
  prometheus.io/port: "9104"
  prometheus.io/path: "/metrics"
 
# prometheus.yml์— ๋ณต์žกํ•œ relabel_configs ์ž‘์„ฑ
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
  action: keep
  regex: true

Operator ๋ฐฉ์‹

# ServiceMonitor CRD๋งŒ ์ƒ์„ฑ
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: mysql-exporter
spec:
  selector:
    matchLabels:
      app: mysql-exporter
  endpoints:
  - port: metrics
    interval: 30s

๐ŸŽฏ 5. ServiceMonitor ํ•ต์‹ฌ ํ•„๋“œ

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: my-service-monitor
  namespace: my-namespace
spec:
  # 1. Service ์„ ํƒ (ํ•„์ˆ˜!)
  selector:
    matchLabels:
      app: my-app
 
  # 2. ์ˆ˜์ง‘ ์„ค์ •
  endpoints:
  - port: metrics          # Service์˜ ํฌํŠธ ์ด๋ฆ„
    path: /metrics         # ๊ธฐ๋ณธ๊ฐ’: /metrics
    interval: 30s          # ์ˆ˜์ง‘ ์ฃผ๊ธฐ
    scrapeTimeout: 10s     # ํƒ€์ž„์•„์›ƒ
    scheme: http           # http ๋˜๋Š” https
 
  # 3. ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์„ ํƒ (์„ ํƒ์‚ฌํ•ญ)
  namespaceSelector:
    matchNames:
    - my-namespace
    # ๋˜๋Š” ๋ชจ๋“  ๋„ค์ž„์ŠคํŽ˜์ด์Šค
    # any: true

PodMonitor (Service ์—†์ด Pod ์ง์ ‘ ์ˆ˜์ง‘)

apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: my-pod-monitor
spec:
  selector:
    matchLabels:
      app: my-app
  podMetricsEndpoints:
  - port: http
    path: /metrics

์–ธ์ œ ๋ญ˜ ์“ธ๊นŒ?

ServiceMonitor:
  - Deployment (์ผ๋ฐ˜ ์•ฑ)
  - Service ์žˆ๋Š” ๊ฒฝ์šฐ
  - ๊ถŒ์žฅ! (ํ”„๋กœ๋•์…˜ ํ‘œ์ค€)
 
PodMonitor:
  - DaemonSet (node-exporter)
  - StatefulSet (๊ฐœ๋ณ„ Pod ์ถ”์ )
  - Service ์—†๋Š” ๊ฒฝ์šฐ

๐Ÿ† 6. 4 Golden Signals (๊ผญ ๋ชจ๋‹ˆํ„ฐ๋ง!)

1. Latency (์ง€์—ฐ์‹œ๊ฐ„):
   ์ธก์ •: histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))
   ๋ชฉํ‘œ: P95 < 500ms
 
2. Traffic (ํŠธ๋ž˜ํ”ฝ):
   ์ธก์ •: rate(http_requests_total[5m])
   ๋ชฉํ‘œ: RPS ์ถ”์„ธ ํŒŒ์•…
 
3. Errors (์—๋Ÿฌ์œจ):
   ์ธก์ •: sum(rate(http_requests_total{status=~"5.."}[5m])) /
         sum(rate(http_requests_total[5m])) * 100
   ๋ชฉํ‘œ: < 1%
 
4. Saturation (ํฌํ™”๋„):
   ์ธก์ •: CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋””์Šคํฌ ์‚ฌ์šฉ๋ฅ 
   ๋ชฉํ‘œ: < 80%

Alert ์šฐ์„ ์ˆœ์œ„

Critical (์ฆ‰์‹œ ๋Œ€์‘):
  - Errors > 5%
  - Saturation > 90%
 
Warning (๊ทผ๋ฌด์‹œ๊ฐ„):
  - Latency P95 > 1์ดˆ
  - Saturation > 80%
 
Info (์ฃผ๊ฐ„ ๋ฆฌํฌํŠธ):
  - Traffic ์ถ”์ด

๐Ÿ› ๏ธ 7. ์ž์ฃผ ์“ฐ๋Š” kubectl ๋ช…๋ น์–ด

CRD ํ™•์ธ

# ServiceMonitor ๋ชฉ๋ก
kubectl get servicemonitor -n monitoring
 
# PodMonitor ๋ชฉ๋ก
kubectl get podmonitor -n monitoring
 
# PrometheusRule (Alert) ๋ชฉ๋ก
kubectl get prometheusrule -n monitoring
 
# ์ƒ์„ธ ์ •๋ณด
kubectl describe servicemonitor mysql-exporter -n monitoring

Prometheus ์„ค์ • ํ™•์ธ

# Prometheus ConfigMap ํ™•์ธ
kubectl get configmap prometheus-config -n monitoring -o yaml
 
# Prometheus Pod ๋กœ๊ทธ
kubectl logs prometheus-xxx -n monitoring
 
# Prometheus Reload (์„ค์ • ์žฌ์ ์šฉ)
curl -X POST http://prometheus:9090/-/reload

Target ํ™•์ธ

# Prometheus UI์—์„œ ํ™•์ธ
http://prometheus:9090/targets
 
# ๋˜๋Š” API
curl http://prometheus:9090/api/v1/targets

๐Ÿ”ง 8. ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ์ฒดํฌ๋ฆฌ์ŠคํŠธ

โ€๋ฉ”ํŠธ๋ฆญ์ด ์•ˆ ๋ณด์—ฌ์š”!โ€

1๋‹จ๊ณ„ - Exporter ํ™•์ธ:
  โ–ก Pod ์ •์ƒ ์‹คํ–‰ ์ค‘?
    kubectl get pods -n <namespace>
 
  โ–ก /metrics ์—”๋“œํฌ์ธํŠธ ์‘๋‹ต?
    kubectl port-forward pod/<exporter-pod> 9104:9104
    curl localhost:9104/metrics
 
2๋‹จ๊ณ„ - Service ํ™•์ธ (ServiceMonitor ์‚ฌ์šฉ ์‹œ):
  โ–ก Service ์กด์žฌ?
    kubectl get svc -n <namespace>
 
  โ–ก Service Label๊ณผ ServiceMonitor selector ์ผ์น˜?
    kubectl get svc <service-name> -o yaml
    kubectl get servicemonitor <sm-name> -o yaml
 
  โ–ก Service์˜ port name๊ณผ endpoints์˜ port ์ผ์น˜?
 
3๋‹จ๊ณ„ - ServiceMonitor ํ™•์ธ:
  โ–ก ServiceMonitor ์ƒ์„ฑ๋จ?
    kubectl get servicemonitor -n <namespace>
 
  โ–ก Namespace Label ์žˆ์Œ?
    kubectl get namespace <namespace> --show-labels
 
4๋‹จ๊ณ„ - Prometheus ํ™•์ธ:
  โ–ก Target์— ํ‘œ์‹œ๋จ?
    http://prometheus:9090/targets
 
  โ–ก Prometheus Operator ๋กœ๊ทธ
    kubectl logs -n monitoring <prometheus-operator-pod>

๐Ÿ“– 9. ํ•ต์‹ฌ ๋ฉ”ํŠธ๋ฆญ ์˜ˆ์‹œ

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฆฌ์†Œ์Šค

# Pod CPU ์‚ฌ์šฉ๋ฅ 
sum(rate(container_cpu_usage_seconds_total{pod="my-pod"}[5m])) * 100
 
# Pod ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ 
container_memory_usage_bytes{pod="my-pod"} /
container_spec_memory_limit_bytes{pod="my-pod"} * 100
 
# Pod ์žฌ์‹œ์ž‘ ํšŸ์ˆ˜
kube_pod_container_status_restarts_total
 
# Deployment replicas
kube_deployment_status_replicas_available

MySQL

# ์—ฐ๊ฒฐ ์ˆ˜
mysql_global_status_threads_connected
 
# ์Šฌ๋กœ์šฐ ์ฟผ๋ฆฌ
rate(mysql_global_status_slow_queries[5m])
 
# QPS
rate(mysql_global_status_queries[5m])
 
# ์ปค๋„ฅ์…˜ ์‚ฌ์šฉ๋ฅ 
mysql_global_status_threads_connected /
mysql_global_variables_max_connections * 100

Redis

# ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋ฅ 
redis_memory_used_bytes / redis_memory_max_bytes * 100
 
# ์ดˆ๋‹น ๋ช…๋ น ์ˆ˜
rate(redis_commands_processed_total[1m])
 
# ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ
redis_connected_clients
 
# Hit Rate
rate(redis_keyspace_hits_total[5m]) /
(rate(redis_keyspace_hits_total[5m]) + rate(redis_keyspace_misses_total[5m])) * 100

โšก 10. ๋น ๋ฅธ ์ฐธ์กฐ - ์‹œ๊ฐ„ ๋‹จ์œ„

[30s]   # 30์ดˆ
[5m]    # 5๋ถ„  (๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ)
[1h]    # 1์‹œ๊ฐ„
[1d]    # 1์ผ
[1w]    # 1์ฃผ
[1y]    # 1๋…„
 
offset 1h    # 1์‹œ๊ฐ„ ์ „
offset 1d    # 1์ผ ์ „
offset 1w    # 1์ฃผ์ผ ์ „

๐Ÿ’ก 11. ๊ฟ€ํŒ

๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ ์ธ ์ฟผ๋ฆฌ

# โŒ ๋น„ํšจ์œจ - ๋ชจ๋“  ์‹œ๊ณ„์—ด ๋กœ๋“œ
sum(metric_name)
 
# โœ… ํšจ์œจ - ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๋จผ์ € ํ•„ํ„ฐ
sum(metric_name{job="api"})

๋ ˆ์ด๋ธ” ๋งค์นญ

# ์ •ํ™•ํžˆ ์ผ์น˜
{label="value"}
 
# ์ •๊ทœํ‘œํ˜„์‹ (๋А๋ฆผ!)
{label=~"value.*"}
 
# NOT ๋งค์นญ
{label!="value"}
{label!~"value.*"}
 
# ์—ฌ๋Ÿฌ ์กฐ๊ฑด AND
{label1="value1", label2="value2"}

Recording Rules (์ž์ฃผ ์“ฐ๋Š” ์ฟผ๋ฆฌ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐ)

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: recording-rules
spec:
  groups:
  - name: api_metrics
    interval: 30s
    rules:
    - record: api:request_rate:5m
      expr: sum(rate(http_requests_total{job="api"}[5m]))

๐ŸŽฏ ๋งˆ์ง€๋ง‰ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

โ–ก ๋ฉ”ํŠธ๋ฆญ ํƒ€์ž… 4๊ฐ€์ง€ ๊ตฌ๋ถ„ ๊ฐ€๋Šฅ?
  Counter, Gauge, Histogram, Summary
 
โ–ก PromQL ๊ธฐ๋ณธ ํ•จ์ˆ˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ?
  rate(), sum(), avg(), by
 
โ–ก Native vs Operator ์ฐจ์ด ์ดํ•ด?
  Annotation vs ServiceMonitor
 
โ–ก 4 Golden Signals ์•Œ๊ณ  ์žˆ์Œ?
  Latency, Traffic, Errors, Saturation
 
โ–ก ServiceMonitor ์ž‘์„ฑ ๊ฐ€๋Šฅ?
  selector + endpoints
 
โ–ก ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ์ˆœ์„œ ์ˆ™์ง€?
  Exporter โ†’ Service โ†’ ServiceMonitor โ†’ Prometheus

๐Ÿ“š ๋” ์•Œ์•„๋ณด๊ธฐ

์ƒ์„ธ ๋ฌธ์„œ:


๐Ÿ“… ์ตœ์ข… ์—…๋ฐ์ดํŠธ: 2025-12-12 ๐ŸŽฏ ์šฉ๋„: ๋น ๋ฅธ ์ฐธ์กฐ์šฉ ์น˜ํŠธ์‹œํŠธ โฑ๏ธ ์ฝ๋Š” ์‹œ๊ฐ„: 5๋ถ„

๐Ÿ’ก Tip: ์ด ๋ฌธ์„œ๋ฅผ ๋ถ๋งˆํฌํ•˜๊ณ  ์‹ค๋ฌด์—์„œ ์ž์ฃผ ํ™•์ธํ•˜์„ธ์š”!