Prometheus: ๊ทœ์น™ ์„œ์‹ ๋„๊ตฌ.

์— ๋งŒ๋“  2013๋…„ 01์›” 04์ผ  ยท  41์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: prometheus/prometheus

Go์šฉ "gofmt"์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ Prometheus์šฉ "promfmt"๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์ด ํŽธ์ฐจ์™€ ํ•™์Šต ๊ณก์„ ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ท ์ผํ•œ ์Šคํƒ€์ผ์„ ์ƒ์„ฑํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค.

YAML ๊ทœ์น™ ํŒŒ์ผ๋กœ ์™„์ „ํžˆ ์ด๋™ํ•œ ํ›„ ์—…๋ฐ์ดํŠธ : PromQL ํ‘œํ˜„์‹์˜ ํ˜•์‹์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ PromQL ํ‘œํ˜„์‹๊ณผ YAML ํŒŒ์ผ ๋ชจ๋‘์— ๋Œ€ํ•œ ์ฃผ์„์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ณ ์ • ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋„๋ก YAML ํŒŒ์ผ์˜ ํ˜•์‹์„ ์ง€์ •ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

componenpromtool kinenhancement prioritP3

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

promfmt ๋„๊ตฌ์˜ ์š”์ ์€ ์‹œํ–‰ํ•˜์ง€ ์•Š๋”๋ผ๋„ gofmt ์™€ ๋งค์šฐ ์œ ์‚ฌํ•œ ํŠน์ • "์ •์‹" ํ˜•์‹์„ ๋’ค์— ์ „์ฒด ์ธ์ˆ˜ ๋ฌธ์ž์—ด๊ณผ ํ•จ๊ป˜ "๋ณด์ฆ"ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  41 ๋Œ“๊ธ€

:+1: * :100:

๋„ค, ์ข‹์Šต๋‹ˆ๋‹ค. ์ฃผ์„์„ ๋ณด์กดํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€์žฅ ํฐ(๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ์œ ์ผํ•œ) ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ํ‘œํ˜„์„ ์—ฌ๋Ÿฌ ์ค„๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋™์˜.

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ promtool์— ์ถ”๊ฐ€ํ•˜๋Š” ์ค‘์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๋ช‡ ๊ฐ€์ง€ ๊ด€์ฐฐ:

  • 2.x ๊ทœ์น™ ํ˜•์‹(PromQL์„ ํฌํ•จํ•˜๋Š” YAML)์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๊ฒƒ์ด YAML ํŒŒ์ผ์—์„œ๋„ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.
  • YAML๊ณผ PromQL์—์„œ ๋‘ ์ฃผ์„์„ ๋ชจ๋‘ ๋ณด์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค(๋‹จ์ˆœํ•œ ์ค„ ๋ฐ”๊ฟˆ์ด ์•„๋‹˜).
  • ์ž…๋ ฅ์˜ ํŠน์ • ์ค„ ๋ฐ”๊ฟˆ์ด ์ถœ๋ ฅ์—์„œ โ€‹โ€‹์œ ์ง€๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค( gofmt ๊ฐ€ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ฐธ์กฐ).
  • ๊ทœ์น™์ด ๋ Œ๋”๋ง๋  ๋•Œ๋งˆ๋‹ค ํŠนํžˆ Prometheus ์›น UI์˜ _Alerts_ ๋ฐ _Rules_ ํƒญ์—์„œ ๋™์ผํ•œ ํ˜•์‹์ด ์ ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ AST๊ฐ€ ์ฃผ์„์„ ์œ ์ง€ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(๋ฐ ํŠน์ • ์ค„ ๋ฐ”๊ฟˆ, ์ด์ „ ํ•ญ๋ชฉ ์ฐธ์กฐ).

YAML์—์„œ ๋‘ ์ฃผ์„์„ ๋ชจ๋‘ ๋ณด์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ํ˜„์žฌ YAML ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ํ•˜์ง€ ์•Š์ง€๋งŒ "๊ณง" ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด gsoc ์ œ์•ˆ์„œ์— ์ด๊ฒƒ์„ ํฌํ•จํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. @brian-brazil, ์–ธ๊ธ‰ํ•˜๋Š” YAML ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

https://github.com/go-yaml/yaml ํ•˜์ง€๋งŒ ์ด ๋ฒ”์œ„๋ฅผ PromQL๋กœ๋งŒ ์ง€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@brian-brazil ํ•˜์ง€๋งŒ ๊ทœ์น™์˜ PromQL์€ ํ•ญ์ƒ YAML ํŒŒ์ผ์— ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์†Œํ•œ YAML ์ฃผ์„์€ ๋ณด์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งž์ฃ ? ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์•„๋ฌด๋„ ์„œ์‹ ์ง€์ •์˜ ์ด์ ์„ ์ž์‹ ์˜ ์˜๊ฒฌ์„ ์žƒ๊ณ  ์‹ถ์–ดํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋„๊ตฌ๊ฐ€๋ณ„๋กœ ์œ ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ข‹๊ฒ ์ง€๋งŒ ๊ทธ๊ฒƒ ์—†์ด๋„ ํ˜œํƒ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ gsoc ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ผ์ •์ด ๋ถˆ๋ถ„๋ช…ํ•œ ๊ฒƒ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

PromQL ๋ถ€๋ถ„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ฃผ์„ ๋ฐ ์—ฌ๋Ÿฌ ์ค„ ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ |2 ๋“ค์—ฌ์“ฐ๊ธฐ ํžŒํŠธ๋ฅผ ๋ณด์กดํ•˜๋ฉด YAML ๋ถ€๋ถ„์€ ๊ฑฐ์˜ ๊ฐ„๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ™•์ธ!

์ด ๋ชจ๋“  ๊ฒƒ์„ ํ—ˆ์šฉํ•ด์•ผ ํ•˜๋Š” YAML ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ v3์ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ๊ตฌ์„ฑ์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ทœ์น™

(
    kube_job_status_failed > 0
    UNLESS kube_job_status_succeeded > 0
)
* on (namespace, job_name) group_left(maintainer) label_replace(kube_job_labels, "maintainer", "$1", "label_maintainer", "(.*)")
* on (namespace, job_name) group_left(pager) label_replace(kube_job_labels, "pager", "$1", "label_pager", "(.*)")
* on (namespace, job_name) group_left(paging) label_replace(kube_job_labels, "paging", "$1", "label_paging", "(.*)")

VS ์›น UI์˜ ๊ฐ€๋น„์ง€ ํ‘œํ˜„

(kube_deployment_status_replicas_available
  / kube_deployment_spec_replicas * 100) * on(namespace, deployment) group_left(maintainer)
  label_replace(kube_deployment_labels, "maintainer", "$1", "label_maintainer",
  "(.*)") * on(namespace, deployment) group_left(pager) label_replace(kube_deployment_labels,
  "pager", "$1", "label_pager", "(.*)") * on(namespace,
  deployment) group_left(paging) label_replace(kube_deployment_labels, "paging",
  "$1", "label_paging", "(.*)") < 100

@sylr ์›น UI์—์„œ ๋‹ค๋ฅธ ๊ทœ์น™์„ ๊ฒŒ์‹œํ•œ ๊ฒƒ @beorn7 ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ๊ทœ์น™์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

(kube_job_status_failed
  > 0 unless kube_job_status_succeeded > 0) * on(namespace, job_name) group_left(maintainer)
  label_replace(kube_job_labels, "maintainer", "$1", "label_maintainer",
  "(.*)") * on(namespace, job_name) group_left(pager) label_replace(kube_job_labels,
  "pager", "$1", "label_pager", "(.*)") * on(namespace,
  job_name) group_left(paging) label_replace(kube_job_labels, "paging", "$1",
  "label_paging", "(.*)")

@geekodour ์˜ˆ, ๋‘ ๊ฐ€์ง€ ๊ทœ์น™์„ ํ˜ผ๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์•„์ง ์—ด๋ ค ์žˆ๊ณ  ํ–ฅํ›„ GSOC(https://github.com/cncf/soc#rule-formatting-tool)์— ๋Œ€ํ•œ ํ”„๋กœ์ ํŠธ ์•„์ด๋””์–ด์— ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— GSOC ๋™์•ˆ ์ด ์ž‘์—…์„ ์™„๋ฃŒํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด์— ๊ด€ํ•œ ์ตœ์‹  ์—…๋ฐ์ดํŠธ ๋ฐ ์ถ”๊ฐ€ ์ •๋ณด๋Š” @codesome @brian-brazil @juliusv @geekodour @simonpasquier @sylr์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
์ฃผ์„ ๋ฐ ๊ธฐํƒ€ ์ฐธ์กฐ ๋งํฌ๋ฅผ ์ฝ์€ ํ›„ ๋‹ค์Œ ์ž‘์—… ํฌ์ธํŠธ๋Š” promQL AST๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ promQL ํ‘œํ˜„์‹์„ ์œ„ํ•œ ํฌ๋งทํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@haibeey ์ด๋ฏธ ๊ทธ ๋ฐฉํ–ฅ์œผ๋กœ ์•ฝ๊ฐ„์˜ ์ง„์ „์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํฌ๋งทํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ์ด๋ฏธ ์—ฌ๊ธฐ์— ๊ตฌํ˜„๋œ ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์ ์ ˆํ•œ ๊ณต๋ฐฑ๊ณผ ์ฃผ์„ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์ด ๊ณง ์ถœ์‹œ๋  PromQL ์–ธ์–ด ์„œ๋ฒ„ ์™€ ํ†ตํ•ฉ๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ธ์–ด ์„œ๋ฒ„ ์ฝ”๋“œ ๋‚ด๋ถ€์—๋Š” YAML ํŒŒ์ผ์˜ ํ˜•์‹์„ ์ง€์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋งŽ์€ ํ•ญ๋ชฉ์ด ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฉฐ ์ผ๋ถ€๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ดœ์ฐฎ์€! @slrtbtfs ๊ฐ์‚ฌ

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@haibeey ๋Š” ์ด๋ฏธ ์–ด๋–ป๊ฒŒ๋“  ์ด ์ž‘์—…์„ ๊ณ„ํšํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@roidelaluie ๋‚˜๋Š” ์ด๋ฏธ ๊ทธ ์ผ๋ถ€๋ฅผ ์ด์ „์— ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์•˜์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ๊ตฌ์„ฑ์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ทœ์น™

(
    kube_job_status_failed > 0
    UNLESS kube_job_status_succeeded > 0
)
* on (namespace, job_name) group_left(maintainer) label_replace(kube_job_labels, "maintainer", "$1", "label_maintainer", "(.*)")
* on (namespace, job_name) group_left(pager) label_replace(kube_job_labels, "pager", "$1", "label_pager", "(.*)")
* on (namespace, job_name) group_left(paging) label_replace(kube_job_labels, "paging", "$1", "label_paging", "(.*)")

VS ์›น UI์˜ ๊ฐ€๋น„์ง€ ํ‘œํ˜„

(kube_deployment_status_replicas_available
  / kube_deployment_spec_replicas * 100) * on(namespace, deployment) group_left(maintainer)
  label_replace(kube_deployment_labels, "maintainer", "$1", "label_maintainer",
  "(.*)") * on(namespace, deployment) group_left(pager) label_replace(kube_deployment_labels,
  "pager", "$1", "label_pager", "(.*)") * on(namespace,
  deployment) group_left(paging) label_replace(kube_deployment_labels, "paging",
  "$1", "label_paging", "(.*)") < 100

์ด ์„œ์‹ ์Šคํƒ€์ผ์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๊นŒ? @codesome @juliusv @brian-brazil @beorn7
์ด ์Šคํƒ€์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ์•ˆ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌ๋งท ํ›„ ์ตœ์ข… ํ‘œํ˜„์€ GSoC ๊ธฐ๊ฐ„ ๋™์•ˆ ๋…ผ์˜๋˜๊ณ  ๊ฒฐ์ •๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” (๋ชจ๋“  GSoC ์ง€๋ง์ž๋“ค์—๊ฒŒ) ์ด๊ฒƒ์„ _์–ด๋–ป๊ฒŒ_ ๋‹ฌ์„ฑํ•  ๊ฒƒ์ธ๊ฐ€์— ์ดˆ์ ์„ ๋งž์ถœ ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

https://prometheus.io/docs/practices/rules/ ๋Š” ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

goyacc ๋ฌธ๋ฒ• ๊ทœ์น™์„ ์•ฝ๊ฐ„ ๋ณด๊ฐ•ํ•˜์—ฌ ์ฃผ์„์„ ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๋žต์ ์ธ ํ”„๋กœํ† ํƒ€์ž…์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์ปค๋ฐ‹ํ•˜์‹ญ์‹œ์˜ค. https://github.com/haibeey/prometheus/commit/885566786ac20bfd400b2e7db470c92545919690

๊ทœ์น™ ํŒŒ์ผ
์›น UI์˜ ๋…น์Œ ๊ทœ์น™

๊ทธ๊ฒƒ์€ ์˜ณ์ง€ ์•Š์•„ ๋ณด์ž…๋‹ˆ๋‹ค. ์šด์˜์ž๋Š” ์ž์‹ ์˜ ๋ผ์ธ์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์–ด ๊ทธ๋ž˜. ๊ทธ ์ปค๋ฐ‹์€ ํฌ๋งท์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ธ์‡„๋ฅผ ์œ„ํ•ด ํ‰๊ฐ€ํ•œ ํ›„ promql expr์˜ ์ฃผ์„์„ ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด์ „ ๋ฒ„์ „์€ ํ‰๊ฐ€ ํ›„ ๋ชจ๋“  ์ฃผ์„์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

goyacc ๋ฌธ๋ฒ• ๊ทœ์น™์„ ์•ฝ๊ฐ„ ๋ณด๊ฐ•ํ•˜์—ฌ ์ฃผ์„์„ ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๋žต์ ์ธ ํ”„๋กœํ† ํƒ€์ž…์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ปค๋ฐ‹ [haibeey@8855667]

AST์— ์ฃผ์„์„ ๋„ฃ๋Š” ๊ฒƒ์€ ํ•ฉ๋ฆฌ์ ์ธ ์ƒ๊ฐ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๊ฑฐ๊ธฐ์— ๊ตฌํ˜„์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์˜๊ฒฌ์„ ๋‚จ๊ฒผ์Šต๋‹ˆ๋‹ค.

https://prometheus.io/docs/practices/rules/ ๋Š” ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์„ ์‹œํ–‰ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

sum without (instance)(instance_path:requests:rate5m{job="myjob"})

~ ์œ„์—

sum(instance_path:requests:rate5m{job="myjob"}) without (instance)

๊ทธ๋ฃนํ™” ์ˆ˜์ •์ž๋ฅผ ๋จผ์ € ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ฉฐ ์ด๋ฏธ ์ธ์‡„ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ค‘์š”ํ•˜์ง€ ์•Š์€ ํ‘œํ˜„์‹์„ ์ฝ๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๋„ค, ์ €๋Š” ์ฒ˜์Œ์— ์ด๊ฒƒ์— ๋Œ€ํ•ด ๊ฐ•ํ•œ ์˜๊ฒฌ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์— Prometheus๋Š” sum(x) by(y) ๋งŒ ์ง€์›ํ–ˆ๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š” ์ €์—๊ฒŒ ๋” ์˜์–ด์ฒ˜๋Ÿผ ์ฝํ˜€์„œ ์ €๋Š” ํ›จ์”ฌ ๋” ์„ ํ˜ธํ–ˆ์ง€๋งŒ, ์‚ฌ์†Œํ•œ x ๊ฒฝ์šฐ ์–ด๋–ค ์ฐจ์›์„ ์ง‘๊ณ„ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ณด๊ธฐ๊ฐ€ ์ •๋ง ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค. / ์œ ์ง€. ์ฒ˜์Œ๋ถ€ํ„ฐ sum by(y) (x) ๋กœ ๋งŒ๋“ค๊ณ  ์œ ์ผํ•œ ๋ฒ•์  ๋ณ€ํ˜•์œผ๋กœ ๋งŒ๋“ค์—ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์•„์ง๋„ ์ „ํ˜€ ์ข‹์•„ํ•˜์ง€ ์•Š์•„ ์ •ํ™•ํ•œ ์„œ์‹ sum by (y)(x) ์„ ํ˜ธ ์ •๋„์™€ sum by(y) (x) (๋‚˜์—๊ฒŒ ๋งŽ์€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค), ์šฐ๋ฆฌ๋Š” ๋ฌธ์„œ์—์„œ ํ›„์ž์— ๊ฐˆ ๊ฒƒ์„ ์„ ํƒํ•˜์ง€ ์•Š๋„๋ก ์ด์œ .

๋‚˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ด๊ฒƒ์— ๋Œ€ํ•ด ์ž์‹ ์˜ ์˜๊ฒฌ์„ ๊ฐ€์งˆ ์ž๊ฒฉ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ "๋ชจ๋ฒ” ์‚ฌ๋ก€"๊ฐ€ ๋”์ฐํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๋ชจ๋“  ๊ตฌ๋ฌธ์ด ํ•ฉ๋ฒ•์ด๋ฏ€๋กœ ํ•˜๋‚˜๋ฅผ ๋‹ค๋ฅธ ๊ตฌ๋ฌธ ์œ„์— ์ ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

promfmt ๋„๊ตฌ์˜ ์š”์ ์€ ์‹œํ–‰ํ•˜์ง€ ์•Š๋”๋ผ๋„ gofmt ์™€ ๋งค์šฐ ์œ ์‚ฌํ•œ ํŠน์ • "์ •์‹" ํ˜•์‹์„ ๋’ค์— ์ „์ฒด ์ธ์ˆ˜ ๋ฌธ์ž์—ด๊ณผ ํ•จ๊ป˜ "๋ณด์ฆ"ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ, gofmt ์˜ ํ˜•์‹์€ ์•„๋ฌด๋„ ์ข‹์•„ํ•˜์ง€ ์•Š์ง€๋งŒ ์ตœ์†Œํ•œ ๊ทธ ์ž์ฒด๋กœ ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๋งŽ์€ ๋‹ค๋ฅธ ์Šคํƒ€์ผ๋ณด๋‹ค๋Š” ํ•˜๋‚˜์˜ ์ผ๊ด€๋œ ์Šคํƒ€์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ด๊ฒƒ์€ GSoC์—์„œ ์ ๊ทน์ ์œผ๋กœ ์ถ”๊ตฌ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. @haibeey GSoC ์—๋„ ๊ด€์‹ฌ์ด ์žˆ์œผ์‹ ๊ฐ€ ๋ด…๋‹ˆ๋‹ค. ์ง€๊ธˆ ํ•ด์ฃผ์‹  ์„ ํ–‰ ์ž‘์—…์— ๊ฐ์‚ฌ๋“œ๋ฆฌ๋ฉฐ GSoC์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ โ€‹โ€‹์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก GSoC ์ œ์•ˆ ๋˜๋Š” ๊ธฐํƒ€์—์„œ ๊ณต๊ฐœ ํ† ๋ก ๊ณผ ๋””์ž์ธ ๊ณต์œ ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. :)

์ƒˆ๋กœ์šด go-yamlv3 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ฃผ์„ ๋ณด์กด ๊ธฐ๋Šฅ์ด ์ด๋ฏธ ์ž˜ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„์ด ๋„ˆ๋ฌด ์™„๋ฒฝํ•˜์—ฌ ์ฃผ์„์˜ ์†์‹ค์ด ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๊ฑฑ์ • ์—†์ด Prometheus ์ฝ”๋“œ์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ดœ์ฐฎ์€. ๋‚ด ์ œ์•ˆ ์ดˆ์•ˆ GSoC ์ œ์•ˆ์„ ๊ณต์œ ํ•  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

์ตœ์ข… ์ดˆ์•ˆ์ด ์ž‘์„ฑ๋˜๊ธฐ ์ „์— ๊ฒ€ํ† ํ•ด ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”

@Harkishen-Singh ๋‘ ๊ฐ€์ง€ ์ˆ˜์ค€์˜ ์ฃผ์„์ด ์žˆ์Šต๋‹ˆ๋‹ค. YAML ์ฃผ์„๊ณผ PromQL ํ‘œํ˜„์‹ ๋‚ด์˜ ์ฃผ์„์ž…๋‹ˆ๋‹ค. https://github.com/prometheus/prometheus/issues/21#issuecomment -604213849๋Š” PromQL์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ YAML๋„ ๋ณด์กดํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค).

์ƒˆ๋กœ์šด go-yamlv3 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ฃผ์„ ๋ณด์กด ๊ธฐ๋Šฅ์ด ์ด๋ฏธ ์ž˜ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„์ด ๋„ˆ๋ฌด ์™„๋ฒฝํ•˜์—ฌ ์ฃผ์„์˜ ์†์‹ค์ด ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๊ฑฑ์ • ์—†์ด Prometheus ์ฝ”๋“œ์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PromQL ํ‘œํ˜„์‹์„ ํ‰๊ฐ€ํ•˜๋Š” ๋™์•ˆ ์ฃผ์„์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.
์ฆ‰, ํ˜•์‹ ์ง€์ •์€ ๊ทœ์น™ ํŒŒ์ผ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์›น UI์™€ ๊ฐ™์€ ์ผ๋ถ€ ์œ„์น˜์—์„œ๋„ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. @juliusv ์ด๊ฒŒ ์‚ฌ์‹ค
๋”ฐ๋ผ์„œ @slrtbtfs๊ฐ€ ์ง€์ ํ•œ

YAML ์ฃผ์„๊ณผ ๊ด€๋ จํ•˜์—ฌ Cortex์— ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” v3 ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ด ๋ฌธ์ œ๊ฐ€ ๋ชจ๋‘ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ์ถ”๊ฐ€ ๋กค์•„์›ƒ์„ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ํ˜•์‹ ์ง€์ •์€ ๊ทœ์น™ ํŒŒ์ผ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์›น UI์™€ ๊ฐ™์€ ์ผ๋ถ€ ์œ„์น˜์—์„œ๋„ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒŒ ์‚ฌ์‹ค์ด์•ผ?

์›น UI๋Š” ์™„๋ฃŒ๋˜๋Š” ์œ ์ผํ•œ ์žฅ์†Œ์ž…๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰