[Prometheus] ์‹œ์ž‘

Prometheus๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๋‹ค.
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ „์šฉ์€ ์•„๋‹ˆ๊ณ , ๋ฒ”์šฉ์ด๋‹ค.

2012๋…„์— ์ฒ˜์Œ ๋‚˜์™”๊ณ , Go๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค.

๋‹จ๋…์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š๊ณ , ์‹œ๊ฐํ™”๋ฅผ ์œ„ํ•ด์„œ grafana ๋“ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ณค ํ•œ๋‹ค.

์ด๋ฒคํŠธ ์ค‘์‹ฌ์˜ ๋กœ๊ทธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ํŠนํ™”๋˜์–ด์žˆ์œผ๋ฉฐ, ๊ทธ๋ž˜์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ์‹œ๊ณ„์—ด DB๋ฅผ ์จ์„œ ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•œ๋‹ค.




๊ตฌ์กฐ

์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค ์‹œ์Šคํ…œ์€ ์ด๋Ÿฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

์กฐ๊ธˆ ํŠน์ดํ•œ ๋ถ€๋ถ„์€, ์—ฌํƒ€ ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ๋“ค์€ ์—์ด์ „ํŠธ->๋ชจ๋‹ˆํ„ฐ๋ง์„œ๋ฒ„ ๋ฐฉํ–ฅ์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š”๋ฐ ๋ฐ˜ํ•ด, ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง์„œ๋ฒ„->์—์ด์ „ํŠธ์˜ ์—ญ์ˆœ์œผ๋กœ ์ง์ ‘ ์ ‘์†ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธ์–ด๊ฐ€๋Š” ํ˜•ํƒœ๋ผ๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ๋ž˜์„œ ๊ฐ ๋จธ์‹ ์— ๊น”๋ฆฐ ์—์ด์ „ํŠธ๋ฅผ Exporter๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , ๋ฉ”ํŠธ๋ฆญ์„ ๋•ก๊ฒจ์˜จ๋‹ค(pull)๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์—†์ด Docker conteiner๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ€๋ณ๊ฒŒ ์จ๋ณด๋ฉด์„œ ๊ทธ ์‚ฌ์šฉ๊ตฌ์กฐ๋ฅผ ์ตํ˜€๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.




Prometheus ๋„์šฐ๊ธฐ

์šฐ์„  ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค์˜ ์„ค์ • ์ •๋ณด๋ฅผ prometheus.yml๋กœ ์ž‘์„ฑํ•ด์ค˜์•ผ ํ•œ๋‹ค.

# ์ „์—ญ ์„ค์ •
global:
  scrape_interval:     15s # 15์ดˆ๋งˆ๋‹ค ๋งคํŠธ๋ฆญ์„ ์ˆ˜์ง‘ํ•œ๋‹ค. ๊ธฐ๋ณธ์€ 1๋ถ„.
  evaluation_interval: 15s # 15์ดˆ๋งˆ๋‹ค ๊ทœ์น™์„ ํ‰๊ฐ€ํ•œ๋‹ค. ๊ธฐ๋ณธ์€ 1๋ถ„.

  # ์™ธ๋ถ€ ์‹œ์Šคํ…œ์— ํ‘œ์‹œํ•  ์ด ์„œ๋ฒ„์˜ ๋ ˆ์ด๋ธ”
  external_labels:
      monitor: 'codelab-monitor'

rule_files:
  # - "first.rules"
  # - "second.rules"

scrape_configs:
  - job_name: 'prometheus'

    static_configs:
      - targets: ['localhost:9090']

๋”ฑ ๊ธฐ๋ณธ์„ค์ •๋งŒ ์žˆ๋Š” ๊ตฌ์„ฑ์ด๋‹ค.

์ €๋Œ€๋กœ Dockerfile์„ ์จ์„œ ๋ง์•„์ค€๋‹ค.

FROM prom/prometheus
ADD prometheus.yml /etc/prometheus/

docker build -t prom .

๊ทธ๋ฆฌ๊ณ  9090ํฌํŠธ๋กœ ์‹คํ–‰ํ•ด์ฃผ๋ฉด

docker run -p 9090:9090 prom

์ ‘์†์ด ๋  ๊ฒƒ์ด๋‹ค.

๊ทผ๋ฐ ์ด๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์•„๋ฌด๊ฒƒ๋„ ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.
์ˆ˜์ง‘ํ•  ์—์ด์ „ํŠธ, exporter๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•œ๋‹ค.




exporter ์ถ”๊ฐ€ํ•˜๊ธฐ

exporter์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. MySQL server exporter, RabbitMQ exporter, HAProxy exporter, Docker Hub exporter, AWS CloudWatch exporter ๋“ฑ๋“ฑ...

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ€์žฅ ๋ฒ”์šฉ์ ์ด๊ณ  ๊ธฐ๋ณธ์— ์ถฉ์‹คํ•œ Node Exporter๋ฅผ ์จ๋ณด๊ฒ ๋‹ค.
Node Exporter๋Š” CPU์™€ ๋ฉ”๋ชจ๋ฆฌ, ๋””์Šคํฌ ์ˆ˜์น˜ ์ •๋„๋งŒ ์ˆ˜์ง‘ํ•œ๋‹ค.

์•„๋ž˜ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ”๋กœ ๋„์šธ ์ˆ˜ ์žˆ๋‹ค.

docker run -d -p 9100:9100 prom/node-exporter

๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค์—๋„ ์ € exporter ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

  - job_name: 'test-server'

    scrape_interval: 10s

    static_configs:
      - targets: ['host.docker.internal:9100']

์ง€๊ธˆ ๋‚ด ๊ฒฝ์šฐ์—๋Š” ๊ฐ™์€ host๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์žˆ์–ด์„œ host.docker.internal๋ฅผ ํ†ตํ•ด localhost๋กœ ๊ฝ‚์•„๋†จ๋Š”๋ฐ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ์—์„œ ์‹ค์ œ๋กœ ์“ธ ๋•Œ๋Š” ๋‚ด๋ถ€ IP๋ฅผ ๋ฐ•๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ๋ฉ”ํ…Œ์šฐ์Šค๋ฅผ ์žฌ๋ถ€ํŒ…ํ•ด์„œ

์ด๋ ‡๊ฒŒ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ์— ์ถ”๊ฐ€๋˜๋ฉด ์ž˜ ์ถ”๊ฐ€๋œ ๊ฒƒ์ด๋‹ค.




๋ฉ”ํŠธ๋ฆญ ์กฐํšŒํ•˜๊ธฐ

๊ทธ๋ž˜ํ”„ ํŽ˜์ด์ง€์—์„œ ์ € ๊ฒ€์ƒ‰์ฐฝ์„ ์‚ฌ์šฉํ•˜๋ฉด query๋กœ ์ง€ํ‘œ๋ฅผ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜๋Š” active ์ƒํƒœ์ธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฐ”์ดํŠธ๋กœ ๋ณด์—ฌ์ค€๋‹ค.

๊ทผ๋ฐ ์ด๊ฒŒ ๊ธฐ๋ณธ ์ œ๊ณต ์ง€ํ‘œ๋Š” ์•„๋ฌด๋ž˜๋„.. ์ธ๊ฐ„์ด ๋ณด๊ธฐ์—๋Š” ์ข€ ํž˜๋“ค๋‹ค.

๊ทธ๋ž˜์„œ ์ข€๋” ๊ฐ€๊ณตํ•ด์„œ ๋ณด๋Š”๊ฒŒ ์ข‹์€๋ฐ, ์•ฝ๊ฐ„ functionalํ•œ ํ‘œํ˜„์‹์œผ๋กœ ์—ฐ์‚ฐ์„ ๋”ํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜๋Š” CPU ์‚ฌ์šฉ๋Ÿ‰์„ ๋ฐฑ๋ถ„์œจ๋กœ ๋„์šฐ๊ณ 

(1 - avg(irate(node_cpu_seconds_total{mode="idle"}[10m])) by (instance)) * 100

์ด๊ฑด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ฐฑ๋ถ„์œจ๋กœ ๋„์šด๋‹ค.

100 * (1 - ((avg_over_time(node_memory_MemFree_bytes[10m]) + avg_over_time(node_memory_Cached_bytes[10m]) + avg_over_time(node_memory_Buffers_bytes[10m])) / avg_over_time(node_memory_MemTotal_bytes[10m])))

query ๋ฌธ๋ฒ•์— ๋Œ€ํ•œ๊ฑด ์ „์šฉ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.
https://prometheus.io/docs/prometheus/latest/querying/basics/



์ฐธ์กฐ
https://hub.docker.com/r/prom/prometheus
https://blog.outsider.ne.kr/1254