Grafana라는 모니터링툴과 InfluxDB라는 시계열 데이터베이스를 연동해보자!
테스트 용도로 엑셀에 있는 데이터 샘플을 InfluxDB에 넣어보자

Google Sheet에서 파일 -> 다운로드 -> .csv
먼저 InfluxDB에서 bucket을 생성해주자
Load Data -> Buckets -> + Create Bucket
influx cli에서 write 해주자
# influx write -b 버킷이름 -f csv파일.csv --header "measurement헤더" --header "datatype헤더"
influx write -b buc1 -f cell3.csv --header "#constant measurement,cell" --header "#datatype long,dateTime:RFC3339,double,double,double,double,double,double"
measurement, datatype 헤더란?
InfluxDB에서 csv를 import하려면 Annotated CSV이란 포맷을 써야하는데, 보통 measurement, datatype 헤더가 필요하다. measurement는 db에서 테이블이름 같은거고, datatype은 말그대로 데이터타입을 나열한 것이다.
#constant measurement,cell은 measurement 이름으로 cell을 사용하겠다는 뜻
#datatype long,dateTime:RFC3339,double,double,double,double,double,double은 csv 컬럼 순서로 다음 데이터 타입을 사용하겠다는 뜻이다.
참고로 long타입은 int, dateTime:RFC3339은2023-06-01T01:20:30.296Z같은 datetime 형식을 뜻한다. 그 외로는 다음 공식문서를 참고하자.
https://docs.influxdata.com/influxdb/cloud/reference/syntax/annotated-csv/
Home -> Connections -> Data Sources -> + Add new data sourceFlux 선택대쉬보드 생성 후 Data source로 아까 만든 InfluxDB 데이터소스 선택
그 후 flux 쿼리로 데이터 지지고 볶고 하시면 되겠슴니다~~
아니 grafana에서 influxdb를 가져오면 row 하나에 column 하나씩밖에 안뜬다. 그래서 row 하나에 어떻게 여러개의 column(field)를 보여주지 생각하면서 기능 여러개 만져보니까 join을 하면 되더라...
Transform Data -> Join by field 로 하면 time값에 맞춰져서 column들이 하나의 row에 보임
이거는 내가 여러가지 시도해 본게 있는데
Query options 에서 Time shift 는 여러개 쿼리를 쓸데 한번에 다 적용되서 안된다. 나는 하나 쿼리만 time shift 하고싶음
flux 쿼리에서 timeShift() 함수는 time range를 바꾸는게 아니라 그냥 보이는 시간만 바뀌는 거라서 안됨
결국 정답은 flux쿼리에서 직접 date.add() 함수로 timerange를 더하면 된다. 다음은 예시코드이다.
import "date"
a = date.add(d: 21d, to: v.timeRangeStart)
b = date.add(d: 21d, to: v.timeRangeStop)
from(bucket: "buc1")
|> range(start: a, stop: b)
|> filter(fn: (r) => r._measurement == "cell1")
이건 아직 정확하게 해결이 안되서 야매 해결법인데, _measurement를 rename했다. 약간 이상하게 작동하는 것 같지만 It Works for me ㅎㅎ
import "date"
a = date.add(d: 21d, to: v.timeRangeStart)
b = date.add(d: 21d, to: v.timeRangeStop)
from(bucket: "buc1")
|> range(start: a, stop: b)
|> filter(fn: (r) => r._measurement == "cell1")
|> rename(columns: {_measurement: "cell234"})
timeShift(duration: -9h) 를 flux 쿼리에 추가해주자. 이건 그냥 보이는 시간만 바꾸는 건데 어쩔수 업자나... 문제가 없으면 안해도됨