💡 DB의 종류
1.관계형 데이터베이스(Related Database)
-> SQLite, MySQL 등
2.비관계형 데이터베이스(NoSQL)
-> Firebase 등
3.시계열 데이터베이스(TSDB, Time Series Database)
-> Influx DB 등
시계열 데이터베이스(TSDB, Time Series Database)
Docker를 이용한 Influx DB 설치
실행
$ docker run \
-p 8086:8086 \
-v myInfluxVolume:/var/lib/influxdb2 \
influxdb:latest
❗ 완료되면 새로 토큰을 발급해줄텐데 그것을 꼭 저장해두어야한다.
사용
import "influxdata/influxdb/sample"
option task = {
name: "Collect NOAA NDBC sample data",
every: 15m,
}
sample.data(set: "noaa")
|> to(bucket: "example-bucket")
RUN
을 누르면 저장된 데이터를 모두 불러온다.🔷 그렇다면 그래프는?
Flux
라는 언어를 사용한 쿼리문을 사용하면 그래프를 그릴 수 있다.import "experimental/aggregate"
import "influxdata/influxdb/sample"
option task = {
name: "Collect USGS sample data",
every: 15m,
}
sample.data(set: "usgs")
|> to(bucket: "test")
|> range(start: 2023-04-20T00:00:00.000Z, stop: now())
|> filter(fn: (r) => r._measurement == "earthquake")
|> filter(fn: (r) => r._field == "depth")
|> group(columns: ["depth"], mode: "by")
|> aggregateWindow(every: 1h, fn: max)
|> map(fn: (r) => ({_value: r._value, _time: r._time, _field: "발생 깊이"}))
range
: 데이터를 확인할 시간 범위를 지정한다.filter
: 'earthquake' measurement와 'depth' field를 지정하여 지진이 일어났을 때의 그 depth를 확인한다.group
: "depth" 열에 해당하는 정보만 그룹화하여 볼 수 있다.aggregateWindow
: 시간 간격과 함수를 지정하여 그래프로 보여주는데 여기서 함수를 max로 사용하면 그 시간 내의 최댓값을 표시하고 sum을 사용하면 그 시간 동안 관측된 값의 합계를 표시한다.map
: 그래프에 표시할 것들 중 필드의 이름을 "depth"에서 "발생 깊이"로 바꾼다.그래프 형식을 정하고 RUN을 누르면 추출한 데이터가 그래프로 시각화된다.
💡
메트릭(metric)
타임스탬프와 보통 한두 가지 숫자 값을 포함하는 이벤트
Docker를 이용한 grafana 설치
docker run -d -p 3000:3000 grafana/grafana
실행
admin
이다.http://host.docker.internal:8086
을 입력한다.❗ 아래 URL은 Influx DB를 열었던 포트번호가 들어간 URL을 입력할 수도 있다. (localhost:8086)
하지만 만약 위처럼 docker를 이용해 Influx DB를 빌드한 경우에는 localhost를 이용한 URL을 넣을 경우 다른 OS와의 호환이 되지 않기 때문에 읽어들이지 못한다. 비슷한 오류가 발생한 사람들은 참고하길 바란다.
import
를 통해 이미 제작된 탬플릿을 가져올 수도 있다.import
-> 다운 받은 JSON파일을 넣거나 복사한 ID를 입력한다.