ํนํ Singlestat ํจ๋์ ๊ฒฝ์ฐ null์ 0์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ ์ฉํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด null ๊ฒฐ๊ณผ๋ก ํจ๋์ ์์น ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
transformNull ํจ์๋ Graphite๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ ์๋ํฉ๋๋ค.
๋ด ๋ฐฑ์๋์ ๋ํด ์ง๊ธ ๋ณผ ์ ์๋ ์ฑ์ฐ๊ธฐ ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค.
๋ฌด์์ ๋๊น?
ํ๋ก๋ฉํ ์ฐ์ค
ํ๋ก๋ฉํ ์ฐ์ค์ ๋ณํ ๊ธฐ๋ฅ์ด ์์ต๋๊น? ์์ง ์๋ํ์ง ์์์ต๋๋ค(์ ๋ง ํ๊ณ ์ถ์ ๋ง์, Prometheus๋ฅผ ๊ณต์ ๋ฐ์ดํฐ ์์ค ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ถ๊ฐํ ์ ์์)
๊ฝค ๊ด์ฐฎ์ ์ ํ: http://prometheus.io/docs/querying/functions/
grafana 2.1์์ 'null' ๊ฐ์ ์ฑ์์ ๊ดํ ํ 0 ๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค(null์ด #1166์์์ ๊ฐ์ด ํ ์คํธ์ ๋งคํ๋๋๋ผ๋).
์ข ๋ ๋์ ์ ์ผ๋ก ๋ง๋ค๋ ค๋ฉด: ๋ฎ์์๋ก ์ข์ง๋ง 0/1/3์์ ๋ น์/์ฃผํฉ์/๋นจ๊ฐ์์ ๋ํ ์๊ณ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค. ์ฆ, >3 ๊ฐ์ ์ฝ์ต๋๋ค(ํ์ง๋ง null๋ ๋นจ๊ฐ์์ด์ด์ผ ํจ). ๋ฐ๋ผ์ null ๊ฐ์ ๋ น์์ด ๋์ง๋ง ๋นจ๊ฐ์์ด์ด์ผ ํ๋ค๊ณ ์ฃผ์ฅํ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ #1319์ ํจ๊ป ๊ณ ๋ คํด ๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ ์คํธ ๋งคํ์ ๋ํ ๋ฒ์๋ฅผ ๊ตฌํํ๊ณ ์ด๋ฌํ ํ ์คํธ์ ๋ํ ์์ ์ฝ๋ฉ์ ์ง์ ํ์ฌ ๋์์ ํด๊ฒฐํ ์ ์์ต๋๋ค(๊ฐ์ ์์์ ๊ฐ์ ์ ์ผ๋ก ์ง์ ๋๋ฏ๋ก ๋ ์ ์ฐํ์ง๋ง ํ๋ฆผ์์ด ๋ ๋ณต์กํฉ๋๋ค).
@torkelo @feliksik์ ๋์ํ๊ณ ์ด๊ฒ์ ๋ฒ๊ทธ๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๊น์ง ํฉ๋๋ค. ๋ชจ๋ํฐ๋ง๋๋ ๋ ธ๋ ์ค ํ๋๊ฐ ์คํ๋ผ์ธ ์ํ๊ฐ ๋๋ฉด ๋ก๋ ํ๊ท ์ ์ฟผ๋ฆฌํ๋ฉด null์ด ๋ฐํ๋ฉ๋๋ค. singlestat ํจ๋์ null์ 0์ผ๋ก ๋์ฒดํ๊ธฐ ๋๋ฌธ์ ํจ๋์ ๋ น์์ผ๋ก "N/A"๋ฅผ ํ์ํ๋๋ฐ, ์ค์ ๋ก๋ ๋นจ๊ฐ์์ด๋ ๋ฌด์์ด์ด์ผ ํฉ๋๋ค(๊ตฌ์ฑ ์ต์ ์ ๋ฐ๋ผ ๋ค๋ฆ).
ํธ์ง: ์ด ๊ธฐ๋ฅ์ ์ด์ ์ ์กด์ฌํ์ง๋ง(#1130) cc21c66b3a128ea680be2e491cb89f8da90b2677์์ ์ ๊ฑฐ๋์์ต๋๋ค. ํ ๋ก ์ #1130์ผ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
+1 @n-st ๋ฐ @feliksik์ ๋์ํฉ๋๋ค. ํ์ฌ ์ฐ๋ฆฌ ๋์๋ณด๋๋ N/A์ ๋ํด '๋นจ๊ฐ์'์ผ๋ก ํ์๋๊ณ ์๋๋ฐ ์ฌ์ค N/A๋ ๋ฐ์ดํฐ ์์/ํ๋ ์์์ ์๋ฏธํ๋ฏ๋ก ์ด์์ ์ผ๋ก๋ ๋ฌด์์ด์ด์ผ ํฉ๋๋ค.
OR ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ Prometheus์์ null
์ ๋ํด 0์ ๋ฐํํ ์ ์์ต๋๋ค. ๋ฉํธ๋ฆญ ํํ์์ด ์๋ฌด ๊ฒ๋ ๋ฐํํ์ง ์์ผ๋ฉด exression OR on() vector(0)
๋ 0์ ๋ฐํํฉ๋๋ค. @pdf @torkelo
๋๋ถ๋ถ์ TSDB ๋ฐฑ์๋์๋ ์ฟผ๋ฆฌ์์ null์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด ์์ผ๋ฏ๋ก ์ด๊ฒ์ ๋ซ์ต๋๋ค.
@grobie
ํํ์์ด null์ธ ๊ฒฝ์ฐ OR ์ฐ์ฐ์๊ฐ ์ด๋ฅผ ์์ ํ๋ ๊ฒ์ ์ฌ์ค์ ๋๋ค. ๊ทธ๋ฌ๋ ๋จ์ผ ํต๊ณ ํ์ด์ง์์ ์ด๊ฒ์ null ๊ฐ์ ์์์ ์์ ํ์ง๋ง null์ด ์๋ ์ธก์ ํญ๋ชฉ์ ๊ฒฝ์ฐ ์ด๋ฅผ ์ค๋จํฉ๋๋ค. ์ค์ ๊ฐ๊ณผ prometheus ํํ์์ ์ํด ์ถ๊ฐ๋ {} ๊ฐ์ด ์ฌ๋ฌ ๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ณด๊ณ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ๋ค์ ์ด๋๋ก ์ ์ํ ์ ์์ต๋๊น?
@boeboe ์์ ๋๊ธ์์ ๋ด ํํ์ ์ ๋ฐ์ดํธํ์ต๋๋ค. ์ด๊ฒ์ ๋น์ ์ ์ํด ์๋ํด์ผํฉ๋๋ค.
์ค๋ช
: Prometheus๋ ํํ์์์ ๋ ์ด๋ธ ์ผ์น๋ฅผ ์ฌ์ฉํฉ๋๋ค. expression
๊ฐ ๋ ์ด๋ธ์ด ์๋ ํญ๋ชฉ์ ๋ฐํํ๋ ๊ฒฝ์ฐ vector(0)
์์ฑํ ์๊ณ์ด๊ณผ ์ผ์นํ์ง ์์ต๋๋ค. ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ค๋ฉด on()
๋ฅผ ์ถ๊ฐํ์ฌ ๋ ์ด๋ธ๊ณผ ์ผ์นํ์ง ์๋๋ก ๋ช
์์ ์ผ๋ก Prometheus์ ์ง์ํด์ผ ํฉ๋๋ค.
@grobie๋ , ์ค๋ช
๊ฐ์ฌํฉ๋๋ค. ๋ถํํ๋ Prometheus ๋ฌธ์๋ on()
์ฐ์ฐ์์ ์ฌ์ฉ์ ๋ํ ๋ช
ํํ ์๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค(https://prometheus.io/docs/querying/operators)
๋ด ํ์ฌ ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
counter_services_active_sessions_responses_4xx_total{kubernetes_namespace="dev-appservicebase"} OR vector(0)
๋ฉํธ๋ฆญ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ(์ด ๊ฒฝ์ฐ ๋ง์ดํฌ๋ก์๋น์ค์ HTTP 4xx ์๋ต์ด ๋ฐํ๋จ) ์ค๋ณต์ ํผํ๊ธฐ ์ํด ์ด๊ฒ์ ๋ค์ ์์ฑํด์ผ ํฉ๋๋ค. ํ์ฌ ์ฟผ๋ฆฌ๋ ๋ค์ 2๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
counter_services_active_sessions_responses_4xx_total{instance="172.24.27.130:8081",job="kubernetes-pods",kubernetes_namespace="dev-appservicebase",kubernetes_pod_name="active-sessions-dp-32102991495" -24-24",pod_template_hash="3210291495",type="ํ์ฑ ์ธ์ ์ ํ"} 1173
{} 0
@grobie๋ ๋ด ๋ง์ง๋ง ์๊ฒฌ์
๋๊ตฌ๋ ์ง MySQL์ ๋ํ ์ฟผ๋ฆฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
@TheFrogDaddy ๋ณํฉ ๊ธฐ๋ฅ ๊ณผ ํจ๊ป ๋ฐ/๋๋ ํจ๊ป ์ ํ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
@TheFrogDaddy ๋ณํฉ ๊ธฐ๋ฅ ๊ณผ ํจ๊ป ๋ฐ/๋๋ ํจ๊ป ์ ํ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ , ๋นจ๋ฆฌ ๋์์์ค์ ๊ณ ๋ง์. ๋๋ ์ด๊ฒ์ด ์๋ํ์ง ์์ต๋๋ค. ๋ด๊ฐ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ต๋๊น?
์ด๊ฒ์ ์๋:
SELECT
$__timeGroup(updated, '1h', 0) AS time,
COALESCE(SUM(1),0) as value,
'Errors' AS metric
FROM
mytable
WHERE
$__timeFilter(updated)
AND error_message IS NOT NULL
GROUP BY 1;
์ด
SELECT
$__timeGroup(updated, '1h', 0) AS time,
CASE ISNULL(SUM(1))
WHEN TRUE THEN 0
ELSE SUM(1)
END AS value,
'Errors' AS metric
FROM
myTable
WHERE
$__timeFilter(updated)
AND error_message IS NOT NULL
GROUP BY 1;
๊ฐ์ฌ ํด์
@TheFrogDaddy sum(1)
๋ก ์์ฝํ๋ ค๋ ๊ฒ์ ๋ฌด์์
๋๊น? ๋์๊ฒ ์๋ฏธ๊ฐ ์์ต๋๋ค. ์ปค๋ฎค๋ํฐ ์ฌ์ดํธ , ํนํ mysql ํ๊ทธ์ ๋ํ ํ ๋ก ์ ๊ณ์ํ ๊ฒ์ ์ ์ํฉ๋๋ค. ๊ฑฐ๊ธฐ์์ ์ ์ฃผ์ ๋ฅผ ์ด๊ณ @ + mefraimsson์ผ๋ก ์ ์๊ฒ ํ์ ๋ณด๋ผ ์ ์์ต๋๋ค.
OR ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ Prometheus์์
null
์ ๋ํด 0์ ๋ฐํํ ์ ์์ต๋๋ค. ๋ฉํธ๋ฆญ ํํ์์ด ์๋ฌด ๊ฒ๋ ๋ฐํํ์ง ์์ผ๋ฉดexression OR on() vector(0)
๋ 0์ ๋ฐํํฉ๋๋ค. @pdf @torkelo
ํ์ฑ ์ธ์คํดํธ ์ต์ ์ ์์ง ๋ง์ธ์ !!
๋ฉ์ง๋ค
OR ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ Prometheus์์
null
์ ๋ํด 0์ ๋ฐํํ ์ ์์ต๋๋ค. ๋ฉํธ๋ฆญ ํํ์์ด ์๋ฌด ๊ฒ๋ ๋ฐํํ์ง ์์ผ๋ฉดexression OR on() vector(0)
๋ 0์ ๋ฐํํฉ๋๋ค. @pdf @torkelo
์ข์. ํ์
OR ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ Prometheus์์
null
์ ๋ํด 0์ ๋ฐํํ ์ ์์ต๋๋ค. ๋ฉํธ๋ฆญ ํํ์์ด ์๋ฌด ๊ฒ๋ ๋ฐํํ์ง ์์ผ๋ฉดexression OR on() vector(0)
๋ 0์ ๋ฐํํฉ๋๋ค. @pdf @torkelo
์ด๊ฒ์ by (label)
์์๋ ์๋ํ์ง ์์ง๋ง ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค.
expression OR up*0
sum by (label) (data_metric) - sum by (label) (nodata_metric or up*0)
์ฌ๊ธฐ ๋ด 2์ผํธ๊ฐ ์์ต๋๋ค.
sum(expression) by (label) -
sum(expression offset $__interval OR expression * 0) by (label)
์ด๊ฒ์ ๋ชฉํ ๊ฐ๊ฒฉ์์ 2 ํํ์์ ์ฐจ์ด๋ฅผ ์ค ์ ์์ต๋๋ค. ์๊ณ์ด์ด ์์ผ๋ฉด ๊ฐ์ 0์ผ๋ก ๊ฐ์ฃผํ์ฌ ๊ณ์ฐ์ ์ํํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
OR ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ Prometheus์์
null
์ ๋ํด 0์ ๋ฐํํ ์ ์์ต๋๋ค. ๋ฉํธ๋ฆญ ํํ์์ด ์๋ฌด ๊ฒ๋ ๋ฐํํ์ง ์์ผ๋ฉดexression OR on() vector(0)
๋ 0์ ๋ฐํํฉ๋๋ค. @pdf @torkelo