"오늘 00시부터 지금까지" 는 Grafana 의 시간 범위 표기로 그대로 표현된다. 시간 선택기에서 From 과 To 를 다음과 같이 둔다.
From: now/d
To: now
/d 는 해당 단위로 내림하라는 뜻이다. 자주 쓰는 형태는 다음과 같다.
| 표기 | 뜻 |
|---|---|
now/d |
오늘 00:00 |
now/d+1d |
내일 00:00 |
now-1d/d |
어제 00:00 |
now/w |
이번 주 시작 |
now/M |
이번 달 1일 00:00 |
now/y |
올해 1월 1일 |
이렇게 두면 쿼리는 $__timeFilter() 나 $__timeFrom() · $__timeTo() 매크로만 쓰면 되고, 범위를 바꿀 때 쿼리를 고칠 필요가 없다. 패널을 다른 기간으로 재사용할 수 있으므로 대부분의 경우 이쪽을 택한다.
SELECT ts, value
FROM metrics
WHERE $__timeFilter(ts)
시작만 오늘 00시로 고정하고 끝은 범위를 따르게 하려면 이렇게 쓴다.
WHERE ts >= $__timeFrom() AND ts <= $__timeTo()
대시보드 범위와 무관하게 늘 "오늘" 이어야 하는 패널이라면 SQL 쪽 함수로 계산한다. 문법은 데이터 소스마다 다르다.
-- PostgreSQL
WHERE ts >= date_trunc('day', now())
-- MySQL / MariaDB
WHERE ts >= CURDATE()
-- Trino / Presto
WHERE ts >= date_trunc('day', current_timestamp)
-- Impala / Hive
WHERE ts >= trunc(now(), 'DD')
-- SQL Server
WHERE ts >= CAST(GETDATE() AS DATE)
-- Oracle
WHERE ts >= TRUNC(SYSDATE)
PromQL 에는 이런 절삭 함수가 없다. 하루 누계가 필요하면 기록 규칙이나 increase(...[24h]) 같은 범위 벡터로 대신한다.
"오늘 00시" 가 어디 기준인지가 세 군데에서 각각 정해진다.
now() · CURDATE() 는 세션 시간대를 따른다세 값이 어긋나면 한국 기준 오전 9시에 날짜가 바뀌는 그래프가 나온다. 대시보드 설정에서 시간대를 Asia/Seoul 로 고정해 두면 보는 사람마다 다른 결과가 나오는 것은 막을 수 있고, 쿼리 쪽은 명시적으로 변환한다.
-- PostgreSQL, UTC 로 저장된 값을 KST 기준 오늘로
WHERE ts >= date_trunc('day', now() AT TIME ZONE 'Asia/Seoul') AT TIME ZONE 'Asia/Seoul'
$__timeFilter 등 매크로 전반과 now 처리.