인플 럭스 Db | [엑셈 웨비나] 시계열 데이터베이스 ‘Influxdb’ 24 개의 새로운 답변이 업데이트되었습니다.

당신은 주제를 찾고 있습니까 “인플 럭스 db – [엑셈 웨비나] 시계열 데이터베이스 ‘InfluxDB’“? 다음 카테고리의 웹사이트 ppa.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://ppa.maxfit.vn/blog/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 엑셈TV 이(가) 작성한 기사에는 조회수 4,215회 및 좋아요 76개 개의 좋아요가 있습니다.

인플 럭스 db 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 [엑셈 웨비나] 시계열 데이터베이스 ‘InfluxDB’ – 인플 럭스 db 주제에 대한 세부정보를 참조하세요

[엑셈 웨비나] 시계열 데이터베이스 ‘InfluxDB’
– 최근 급증하고 있는 시계열 데이터 저장에 최적화되어 있는
InfluxDB의 사용법을 알아보고, Grafana를 이용하여
InfluxDB에 저장된 데이터를 시각화하는 방법을 소개합니다.
* 강의 : 유성현(엑셈 빅데이터사업본부)

인플 럭스 db 주제에 대한 자세한 내용은 여기를 참조하세요.

인플럭스DB(InfluxDB) #1 – 개요 및 특징 – 안드로이드 발자취

InfluxDB는 높은 쓰기 및 쿼리로드를 처리하도록 설계된 시계열 데이터베이스입니다. · InfluxDB는 DevOps 모니터링, 응용 프로그램 메트릭, IoT 센서 …

+ 여기에 더 보기

Source: andro-jinu.tistory.com

Date Published: 9/8/2022

View: 325

InfluxDB: Open Source Time Series Database | InfluxData

InfluxDB is the platform for building & operating time series applications. Monitor metrics & events, get real-time visibility into stacks, …

+ 여기를 클릭

Source: www.influxdata.com

Date Published: 2/11/2022

View: 9947

[TSDB] InfluxDB란? 핵심 개념, 내부 구조 및 특징 – (2/2)

Influx DB의 핵심 목적은 시간에 따른 데이터(시계열 데이터)의 처리이다. InfluxDB는 데이터를 처리하여 새롭게 저장하는 Down Sampling(다운 샘플링)을 …

+ 여기에 더 보기

Source: mangkyu.tistory.com

Date Published: 9/25/2022

View: 6525

인플럭스DB(influxdb) tag key, field key를 활용 Query 작성시 …

인플럭스DB는 시계열형태의 데이터베이스 입니다. 데이터를 시간단위로 넣는 비관계형 데이터베이스이며, 각종 로그나 시간별로 쌓이는 데이터 처리에 …

+ 여기에 보기

Source: lts0606.tistory.com

Date Published: 10/6/2021

View: 667

인플럭스DB를 이용해 텔레메트리 모니터링 확장하기 – ITWorld

인플럭스DB 클라우드는 완전 관리형 탄력적 시계열 데이터 플랫폼으로, 신속하게 시작해서 요구사항에 맞게 손쉽게 확장할 수 있다. 흡수된 데이터는 인플 …

+ 여기에 보기

Source: www.itworld.co.kr

Date Published: 5/7/2022

View: 9533

InfluxDB – 위키백과, 우리 모두의 백과사전

InfluxDB는 인플럭스데이터가 개발한 오픈 소스 시계열 데이터베이스(TSDB)이다. Go 언어로 작성되었으며 운영 모니터링, 애플리케이션 매트릭스, 사물인터넷 센서 …

+ 여기에 자세히 보기

Source: ko.wikipedia.org

Date Published: 6/3/2021

View: 2390

influxDB의 flux를 활용하여 기간별 통계 그래프 만들기(grafana)

InfluxDB는 인플럭스데이터가 개발한 오픈 소스 시계열 데이터베이스(TSDB:Time-series Database)입니다. 시계열 데이터 베이스 란? 데이터를 저장할 때 …

+ 여기에 더 보기

Source: danawalab.github.io

Date Published: 5/26/2021

View: 7456

시계열 DB (OpenTSDB , 인플럭스 DB , Graphite ) 정리

시계열 DB (OpenTSDB , 인플럭스 DB , Graphite ) 정리. [하마] 이승현 ([email protected]) 2015. 10. 22. 15:50. 만약 자신의 집에서 사용중인 전기를 측정하는 …

+ 여기에 자세히 보기

Source: hamait.tistory.com

Date Published: 10/30/2022

View: 140

주제와 관련된 이미지 인플 럭스 db

주제와 관련된 더 많은 사진을 참조하십시오 [엑셈 웨비나] 시계열 데이터베이스 ‘InfluxDB’. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

[엑셈 웨비나] 시계열 데이터베이스 'InfluxDB'
[엑셈 웨비나] 시계열 데이터베이스 ‘InfluxDB’

주제에 대한 기사 평가 인플 럭스 db

  • Author: 엑셈TV
  • Views: 조회수 4,215회
  • Likes: 좋아요 76개
  • Date Published: 2019. 8. 27.
  • Video Url link: https://www.youtube.com/watch?v=a00l1GxJszM

인플럭스DB(InfluxDB) #1 – 개요 및 특징

728×90

이번 포스팅은 요즘 핫한 InfluxDB에 대하여 작성하도록 하겠습니다.

InfluxDB 역시 작년 기상청 프로젝트에서 전국에서 관측되는 데이터를 효과적으로 처리하기 위하여 검토되었고 그때 자료조사를 한 내용입니다.

순서는

2020/06/11 – [개발관련 자료] – InfluxDB #1 – 개요 및 특징

2020/06/11 – [개발관련 자료] – InfluxDB #2 – 주요 개념

2020/06/11 – [개발관련 자료] – InfluxDB #3 – 용어 정리

2020/06/11 – [개발관련 자료] – InfluxDB #4 – SQL DB와 비교

2020/06/11 – [개발관련 자료] – InfluxDB #5 – Schema설계 및 데이터Layout

2020/06/11 – [분류 전체보기] – InfluxDB #6 – In-Memory Indexing과 TSM(Time-Structured Merge Tree)

2020/06/11 – [개발관련 자료] – InfluxDB #7 – TSI(Time Series Index) 개요

2020/06/11 – [개발관련 자료] – InfluxDB #8 – TSI(Time Series Index) 세부 정보

2020/06/11 – [개발관련 자료] – InfluxDB #9 – Linux CentOS 설치

2020/06/12 – [개발관련 자료] – InfluxDB #10 – 사용법

으로 진행되며 도입 검토 차원에서 이루어진 조사라서 실무적용 보다는 InfluxDB란 어떤 것인지 파악하는 정도로만 생각하시면 될듯합니다.

1. 개요

InfluxDB 는 높은 쓰기 및 쿼리로드를 처리하도록 설계된 시계열 데이터베이스입니다 .

InfluxDB 는 DevOps 모니터링 , 응용 프로그램 메트릭 , IoT 센서 데이터 및 실시간 분석을 포함하여 많은 양의 타임스탬프가 적용된 모든 유스케이스의 백업 저장소로 사용됩니다 .

InfluxDB 는 data store 를 위해 구글이 만든 key/value database library 인 LevelDB 를 사용하고 있습니다 . 따라서 , 다음과 같은 LevelDB 의 특징을 가지고 있습니다 .( 다음버전에는 RocksDB 로 이동예정 )

– 기본적으로 데이터를 compression하기 때문에 읽기와 삭제에 다소 느릴 수 있습니다. 그러나 LevelDB와 다르게 SQL-like query language를 지원합니다.

– group by, join, 또 복수개의 time series를 merge하는 것도 가능합니다.

2. 주요 특징

시계열 데이터를 위해 특별히 작성된 사용자 정의 고성능 데이터 스토어 TSM 엔진은 높은 수 신 속도 및 데이터 압축을 허용함 .

전체적으로 Go 로 작성되었습니다 . 외부 종속성 없이 단일 바이너리로 컴파일됨 .

간단하고 고성능의 HTTP API 작성 및 쿼리 .

집계된 데이터를 쉽게 쿼리 할 수 ​​ 있도록 맞춤 설정된 표현형 SQL 과 유사한 쿼리 언어 .

태그를 사용하면 빠르고 효율적인 쿼리를 위해 시리즈를 인덱싱 할 수 있음 .

보존 정책은 유효하지 않은 데이터를 자동으로 만료시킴 .

연속 쿼리는 자동으로 집계 데이터를 계산하여 자주 쿼리를 하는 것 보다 효율적임 .

distributed and scale horizontally 하게 설계되었음 . 따라서 , cluster 에 새로운 node 만 추가하면 쉽게 scale-out 할 수 있음 . (Enterprise 버전 )

3. InfulxDB 1.x 버전

○ Telegraf

Telegraf 는 메트릭을 수집하고 보고하는 플러그인 기반 서버 에이전트입니다 . Telegraf 플러그인은 실행되는 시스템에서 직접 다양한 메트릭을 가져오고 타사 API 에서 메트릭을 가져 오거나 StatsD 및 Kafka 소비자 서비스를 통해 메트릭을 수신합니다 .

또한 InfluxDB, Graphite, OpenTSDB, Datadog, Librato, Kafka, MQTT, NSQ 및 기타 여러 데이터 스토어 , 서비스 및 메시지 대기열에 메트릭을 전송하는 출력 플러그인이 있습니다 .

○ InfluxDB

InfluxDB 는 높은 쓰기 및 쿼리로드를 처리하기 위해 처음부터 빌드 된 시계열 데이터베이스입니다 .

InfluxDB 는 타임 스탬프 데이터 전용으로 작성된 맞춤형 고성능 데이터 저장소이며 특히 DevOps 모니터링 , IoT 모니터링 및 실시간 분석과 같은 사용 사례에 유용합니다 .

정의 된 시간 동안 데이터를 보관하도록 InfluxDB 를 구성하고 시스템에서 불필요한 데이터를 자동으로 만료 및 삭제하여 시스템의 공간을 절약합니다 .

또한 InfluxDB 는 데이터와 상호 작용할 수있는 SQL 과 유사한 쿼리 언어를 제공합니다 .

○ Chronograf

– Chronograf 는 스택의 관리 사용자 인터페이스 및 시각화 엔진입니다 .

이를 통해 인프라에 대한 모니터링 및 경고를 쉽게 설정하고 유지 관리 할 수 ​​ 있습니다 .

사용이 간편하며 데이터를 실시간으로 시각화하여 대시 보드를 빠르게 작성하고 경고 및 자동화 규칙을 쉽게 작성할 수있는 템플릿 및 라이브러리가 포함되어 있습니다 .

○ Kapacitor

Kapacitor 는 원시 데이터 처리 엔진입니다 .

InfluxDB 에서 스트림 및 배치 데이터를 모두 처리 할 수 ​​ 있습니다 .

Kapacitor 를 사용하면 동적 임계값을 사용하여 경고를 처리하고 패턴의 메트릭을 일치 시키며 통계적 이상을 계산하고 동적로드 재조정과 같은 이러한 경고를 기반으로 특정 작업을 수행하는 사용자 정의 논리 또는 사용자 정의 함수를 연결할 수 있습니다 .

Kapacitor 는 HipChat, OpsGenie, Alerta, Sensu, PagerDuty, Slack 등을 통합합니다

InfluxDB 1.x

4 . InfulxDB 2.0 버전

○ 시간 단축 (Faster time to awesome)

InfluxDB 2.0 에는 single binary – multi-tenanted time series database, UI 및 대시 보드 도구 , 백그라운드 처리 및 모니터링 에이전트 등이 모두 단일 API 로 제공되는 시계열 플랫폼에서 필요한 모든 것이 있습니다 .

InfluxDB 1.x 에서 온 사람들에게는 TICK Stack 의 “I, C, K” 가 기본적으로 하나의 이진 파일로 축소되었습니다 .

우리는 공유 할 수 있는 대시 보드 , 경고 및 특정 작업 부하 및 솔루션에 최적화 된 쿼리를 보유하고 있습니다 .

○ 깊은 통찰력과 분석 (Deep insights and analytics)

Flux 는 현재 InfluxDB 1.x 에서 사용할 수 있지만 InfluxDB 2.0 에서는 Flux 의 모든 기능을 사용할 수 있습니다 .

Flux 는 데이터 스크립팅 , ETL, 모니터링 및 경고용으로 설계된 4 세대 프로그래밍 언어입니다 .

○ 개발자 생산성 최적화 (Optimized for developer productivity)

Inbound, 쿼리 , 저장 및 시각화와 같은 InfluxDB 의 모든 기능이 이제 통합 API 에서 액세스 할 수 있습니다 .

플랫폼의 모든 내용을 프로그래밍 방식으로 액세스하고 제어 할 수 있으므로 개발자가 시간을 단축할 수 있습니다 .

InfluxDB Cloud 2.0 을 사용하면 단일 바이너리로 다운로드하거나 free tier 에 액세스 할 수 있으며 통합 대시 보드 , 경고 및 모니터링 에이전트의 모든 기능을 바로 사용할 수 있습니다 .

Go, Java, PHP 및 Python 과 같은 인기있는 언어로 된 강력한 클라이언트 라이브러리를 사용하면 개발자가 몇 분 안에 실행됩니다 .

○ 네이티브 프로메테우스 지원 (Native Prometheus support)

InfluxDB 는 Prometheus 설명 형식에 대한 일등급 지원을 제공하며 메트릭 스크레이퍼의 역할을 수행하여 푸시 및 풀 모델을 모두 지원합니다 .

우리는 올해 말에 출시 될 기본 PromQL 지원을 위해 노력하고 있습니다 .

InfluxDB 2.0

728×90

InfluxDB: Open Source Time Series Database

const {InfluxDB, flux} = require(‘@influxdata/influxdb-client’) // const url = “https://us-west-2-1.aws.cloud2.influxdata.com”; const url = “http://localhost:9999”; const token = ‘my-token’ const org = ‘my-org’ const bucket = ‘my-bucket’ const client = new InfluxDB({url: url, token: token}) const queryApi = client.getQueryApi(org) const query = flux`from(bucket: “${bucket}”) |> range(start: -1d) |> filter(fn: (r) => r._measurement == “weatherstation”)` queryApi.queryRows(query, { next(row, tableMeta) { const o = tableMeta.toObject(row) console.log(`${o._time} ${o._measurement}: ${o._field}=${o._value}`) }, error(error) { console.error(error) console.log(‘Finished ERROR’) }, complete() { console.log(‘Finished SUCCESS’) }, }) c const { InfluxDB, Point } = require(“@influxdata/influxdb-client”); // const url = “https://us-west-2-1.aws.cloud2.influxdata.com”; const url = “http://localhost:9999”; const token = “my-token”; const org = “my-org”; const bucket = “my-bucket”; const client = new InfluxDB({ url: url, token: token }); const writeApi = client.getWriteApi(org, bucket); const point = new Point(“weatherstation”) .tag(“location”, “San Francisco”) .floatField(“temperature”, 23.4) .timestamp(new Date()); writeApi.writePoint(point); writeApi .close() .then(() => { console.log(“FINISHED”); }) .catch((e) => { console.error(e); console.log(“Finished ERROR”); }); c from influxdb_client import InfluxDBClient url = ‘https://us-west-2-1.aws.cloud2.influxdata.com’ token = ‘my-token’ org = ‘my-org’ bucket = ‘my-bucket’ with InfluxDBClient(url=url, token=token, org=org) as client: query_api = client.query_api() tables = query_api.query(‘from(bucket: “my-bucket”) |> range(start: -1d)’) for table in tables: for record in table.records: print(str(record[“_time”]) + ” – ” + record.get_measurement() + ” ” + record.get_field() + “=” + str(record.get_value())) c from datetime import datetime from influxdb_client import WritePrecision, InfluxDBClient, Point from influxdb_client.client.write_api import SYNCHRONOUS url = ‘https://us-west-2-1.aws.cloud2.influxdata.com’ token = ‘my-token’ org = ‘my-org’ bucket = ‘my-bucket’ with InfluxDBClient(url=url, token=token, org=org) as client: p = Point(“weatherstation”) \ .tag(“location”, “San Francisco”) \ .field(“temperature”, 25.9) \ .time(datetime.utcnow(), WritePrecision.MS) with client.write_api(write_options=SYNCHRONOUS) as write_api: write_api.write(bucket=bucket, record=p) c package main import ( “context” “fmt” influxdb2 “github.com/influxdata/influxdb-client-go/v2” ) func main() { url := “https://us-west-2-1.aws.cloud2.influxdata.com” token := “my-token” org := “my-org” bucket := “my-bucket” client := influxdb2.NewClient(url, token) queryAPI := client.QueryAPI(org) query := fmt.Sprintf(`from(bucket: “%v”) |> range(start: -1d)`, bucket) result, err := queryAPI.Query(context.Background(), query) if err != nil { panic(err) } for result.Next() { record := result.Record() fmt.Printf(“%v %v: %v=%v

“, record.Time(), record.Measurement(), record.Field(), record.Value()) } client.Close() } c package main import ( “context” “time” influxdb2 “github.com/influxdata/influxdb-client-go/v2” ) func main() { url := “https://us-west-2-1.aws.cloud2.influxdata.com” token := “my-token” org := “my-org” bucket := “my-bucket” client := influxdb2.NewClient(url, token) writeAPI := client.WriteAPIBlocking(org, bucket) p := influxdb2.NewPointWithMeasurement(“weatherstation”). AddTag(“location”, “San Francisco”). AddField(“temperature”, 25.7). SetTime(time.Now()) err := writeAPI.WritePoint(context.Background(), p) if err != nil { panic(err) } client.Close() } c $url, “token” => $token, “org” => $org, “precision” => WritePrecision::S]); $queryApi = $client->createQueryApi(); $query = “from(bucket: \”$bucket\”) |> range(start: -1d)”; $result = $queryApi->query($query); foreach ($result as $table) { foreach ($table->records as $record) { $measurement = $record->getMeasurement(); $field = $record->getField(); $time = $record->getTime(); $value = $record->getValue(); print “$time $measurement: $field=$value

“; } } $client->close(); c $url, “token” => $token, “org” => $org, “bucket” => $bucket, “precision” => WritePrecision::S]); $writeApi = $client->createWriteApi(); $point = Point::measurement(“weatherstation”) ->addTag(“location”, “San Francisco”) ->addField(“temperature”, 25.1) ->time(time(), WritePrecision::S); $writeApi->write($point); $client->close(); c using System; using System.Threading.Tasks; using InfluxDB.Client; namespace Examples { public class QueryExample { public static async Task Main(string[] args) { var url = “https://us-west-2-1.aws.cloud2.influxdata.com”; var token = “my-token”; var org = “my-org”; var bucket = “my-bucket”; using var client = InfluxDBClientFactory.Create(url, token); var queryApi = client.GetQueryApi(); var query = $”from(bucket:\”{bucket}\”) |> range(start: -1d)”; var tables = await queryApi.QueryAsync(query, org); tables.ForEach(table => { table.Records.ForEach(record => { Console.WriteLine( $”{record.GetTime()} {record.GetMeasurement()}: {record.GetField()}={record.GetValue()}”); }); }); } } } c using System; using System.Threading.Tasks; using InfluxDB.Client; using InfluxDB.Client.Api.Domain; using InfluxDB.Client.Writes; namespace Examples { public class WriteExample { public static async Task Main(string[] args) { var url = “https://us-west-2-1.aws.cloud2.influxdata.com”; var token = “my-token”; var org = “my-org”; var bucket = “bucket”; using var client = InfluxDBClientFactory.Create(url, token); var writeApi = client.GetWriteApiAsync(); var point = PointData.Measurement(“weatherstation”) .Tag(“location”, “San Francisco”) .Field(“temperature”, 25.5) .Timestamp(DateTime.UtcNow, WritePrecision.Ns); await writeApi.WritePointAsync(point, bucket, org); } } } c

[TSDB] InfluxDB란? 핵심 개념, 내부 구조 및 특징

반응형

이번에는 대표적인 TSDB 중 하나인 InfluxDB에 대해 알아보고자 합니다.

1. InfluxDB란?

[ InfluxDB란? ]

Influx DB란 많은 쓰기 작업과 쿼리 부하를 처리하기 위해 2013년에 Go 언어로 개발된 오픈소스 Time Series Database(시계열 데이터베이스) 로써 Tick Stack(Telegraf + InfluxDB + Chronograf + Kapacitor)의 필수 컴포넌트 중 하나이다. Influx DB는 많은 TSDB들(Prometheus, TimescaleDB, Graphite, 등) 중에서 가장 유명하고, 많이 사용되는 데이터베이스이다. Influx DB는 Distributed, Scale horizontally하게 설계되어 새로운 노드만 추가하면 손쉽게 scale-out할 수 있으며, Restful API를 제공하고 있어 API 통신이 가능하다.

많은 쓰기 작업과 쿼리 부하를 처리하기 위해 2013년에 Go 언어로 개발된 오픈소스 TSDB

Tick Stack의 필수 컴포넌트 중 하나

가장 유명하고, 많이 사용되는 TSDB

Distributed, Scale horizontally하게 설계되어 scale-out이 쉬우며, Restful API를 제공하고 있어 API 통신이 가능

위에서 설명한 TICK Stack이란 InfluxData에서 나온 4가지 오픈소스 컴포넌트들을 기반으로 구축한 시스템이다. 4가지 컴포넌트들은 조합되어 모니터링할 데이터를 수집하여 저장하고, 알림을 보낸다.

Telegraf: Metrics와 Events를 수집하고 리포팅하는 모듈

InfluxDB: Time Series DB(시계열 데이터베이스)

Kapacitor: Real-time 스트리밍 데이터 전송 엔진

Chronograf: 시각화 도구

[ Continuous Query(Task), Retention Policy(Retention Period) ]

InfluxDB는 2가지 핵심 기능을 제공하고 있는데, 그것은 바로 일정 주기마다 데이터를 처리하여 새롭게 저장하는 기능과 일정 주기마다 데이터를 자동으로 삭제하는 기능이다.

위의 2가지 핵심 기능은 대량으로 쌓이는 시계열 데이터를 보다 편리하게 처리할 수 있도록 제공하고 있다.

Continous Query(연속적인 쿼리), Task

Influx DB의 핵심 목적은 시간에 따른 데이터(시계열 데이터)의 처리이다. InfluxDB는 데이터를 처리하여 새롭게 저장하는 Down Sampling(다운 샘플링)을 일정 주기마다 실행되도록 하는 Continous Query(연속적인 쿼리)를 제공하고 있다.

InfluxDB2에서는 Continous Query를 대체하는 Task를 제공하고 있다.

Retention Policy(보존 정책), Retention Period

Influx DB의 핵심 목적은 시간에 따른 데이터의 삽입과 조회이므로 직접 Delete를 이용하는 경우는 거의 없다. 하지만 데이터가 계속해서 쌓이면 저장 공간 및 처리 속도 등에 문제가 생기므로 데이터를 자동으로 삭제해주는 Retention Policy(보존 정책)를 지원하고 있다.

Retention Policy란 오래된 데이터를 자동으로 삭제해주는 정책으로써 데이터베이스 단위로 정의되며 일반적으로 1개의 데이터베이스는 여러 개의 보존 정책을 가지고 있다.

만약 별도의 설정을 하지 않았다면 autogen이라는 기본 정책으로 적용된다. autogen은 보존 기간이 무제한이므로, 별도의 설정을 해주지 않으면 데이터가 계속해서 쌓이고 문제를 일으키게 된다. 그러므로 별도의 설정을 해줌으로써 오래된 데이터들을 관리하는 작업이 필요하다.

InfluxDB2에서는 Retention Policy를 대체하는 Retention Period를 제공하고 있다.

[ InfluxDB 내부 구조 및 구성 ]

InfluxDB의 구성을 RDB와 비교하여 먼저 표로 살펴보고 자세히 살펴보도록 하자. 표에 없는 그 외에 자세한 내용들은 공식 문서를 참고하도록 하자.

Database Database Table Measurement Column Key Indexed Column Tag Key (String Only) Unindexed Column Field Key Row Point

Measurement

시계열 데이터베이스에서 측정의 의미를 가지는 measurement는 관계형 데이터베이스의 table에 해당하며, RDB와 마찬가지로 하나의 데이터베이스 안에 여러 개의 measurement가 있을 수 있다. 이를 그림으로 표현하면 다음과 같다.

하지만 RDB와 차별화된 핵심 컨셉이 있는데, InfluxDB는 NoSQL의 개념을 바탕으로 만들어져서 RDB와 다르게 Schemaless(스키마가 없음) 하다는 점이다.

기존의 RDB로 개발을 할 때에는 필요한 컬럼들과 길이 및 타입 등을 설계하면서 테이블의 스키마를 구성해주어야 했다. 하지만 InfluxDB는 Schemaless 데이터베이스이므로, 새로운 데이터를 추가하는 시점에 Measurement와 관련 컬럼들이 추가되며 이러한 이유로 스키마의 변경이 매우 빠르다. InfluxDB는 이러한 구조를 가져감으로써 시계열 데이터에 유연하게 대처할 수 있도록 하였다.

Key(Tag Key, Field Key, Time Key)

컬럼의 구성은 기존의 RDB와 약간 차이가 있다. 기존의 RDB에서는 1개의 컬럼에 1개의 데이터가 저장되었는데, TSDB에서는 컬럼이 3가지 종류로 나뉘어지며, 각각의 컬럼은 (Key, Value)로 구성된다.

Tag key RDB에서 Indexed 컬럼과 유사하며, 인덱싱되어 Select 문으로 조회하는 기준이 된다. Tag의 value로는 String 타입만 가능하므로 질의 시에 따옴표(‘ ‘)로 감싸주어야 한다

Field key RDB에서 Indexed 되지 않는 컬럼과 유사하며, 저장되는 데이터는 최소 1개 이상의 field가 있어야 한다. Field value는 strings, floats, integer or Boolean 타입이 가능하며, 타입이 정해지면 변경할 수 없다.

Time key UTC를 기준으로 1970년 1월 1일 0시 0분 0초로부터 지난 시간을 microseconds 단위로 자동 입력된다. 수동으로 설정할 수도 있지만 권장하지 않는다.

데이터를 저장하기 위해서는 태그 또는 필드 중 하나를 선택해야 하는데, 이것은 매우 중요하다. 왜냐하면 태그에 있는 값들은 인덱싱되는 반면에 필드는 인덱싱되지 않기 때문이다. 그러므로 조회를 하기 위해 인덱싱이 되어야 하는 경우에는 태그를, 그렇지 않고 단순 데이터인 경우에는 필드로 선택하면 된다.

만약 불필요한 데이터까지 모드 태그로 잡는다면 인덱스 저장소(Index Structure)가 비대해져 메모리를 많이 사용하게 되고 처리 성능이 떨어지게 될 것이다.

Series

Series는 InfluxDB에만 존재하는 개념으로 조합 가능한 Tag Key의 집합에 해당한다. 예를 들어 Member라는 Measurement에 (이름, 나이)가 Tag Key로 지정되어 있다면 저장된 모든 데이터들 중에서 가능한 (이름, 나이)의 집합이 Series이다.

Shard와 Shard Group

A Shard Group은 InfluxDB bucket에 속하며, Shard Group Duration(샤드 그룹 보존 기간)에 따라 실제 데이터를 저장하는 Shard를 관리한다. Shard(샤드)에는 ShardGroup(샤드 그룹)에 정의된 기간에 속한 데이터들이 인코딩 및 압축되어 저장된다. 특정 Shard Group Duration에 저장된 모든 포인트(데이터)들은 동일한 샤드에 저장된다.

1개의 샤드는 여러 개의 Series, 디스크에 Time-Structured Merge Tree(TSM)으로 구성된다. TSM은 내부적으로 사용되는 트리 기반의 데이터 저장소라고 생각하면 된다. 데이터가 TSM에 저장되기 전에는 메모리에 있는 것이고, Shard Group Duration(샤드 그룹 보존 기간)이 만료되면 디스크에 TSM 형태로 저장되는 것이다.

InfluxDB는 Shard Group과 Shard를 이용해 데이터를 샤딩하여 데이터가 시간이 지남에 따라 증가하여도 처리량과 전체 성능을 높이는 접근 방법을 취한다. 샤드는 데이터에 대한 임시 블록을 가지고 잇어 TSM에 매핑된다.

시간을 기반으로 분리되는 Shard를 이용함으로써 시간을 제약조건으로 사용하여 메모리에 로드할 데이터의 양 자체를 줄일 수 있다. 이는 모든 TSDB들이 기본적으로 가져가는 개념이다. 이와 관련해서는 공식 문서를 참고해도 좋다.

Shard Group Duration

Shard Group Duration(샤드 그룹 보존 기간)이란 각 샤드 그룹이 메모리에 보존되고, 새롭게 생성되는 기간을 의미한다. 만약 해당 보존 기간이 지나면 샤드 그룹은 제거된다. 기본적으로 InfluxDB는 버킷의 Retention Period에 따라 샤드 그룹 보존 기간을 설정한다.

Retention Period(보존 기간) Shard Group Duration(샤드 그룹 보존 기간) less than 2 days 1 시간 between 2 days and 6 months 1 일 greater than 6 months 7 일

만약 별도의 설정을 하지 않았다면 샤드 그룹 보존 기간은 기본적으로 7일이다.

Retention Perid와 Shard Group Duration

위에서 간략히 Shard Group Duration(샤드 그룹 보존 기간)이 만료될 경우에 대해서 설명을 하였지만 위의 내용을 제대로 읽지 않았거나 다른 글들을 참고하였다면 Retention Period(Retention Policy)와 Shard Group Duration의 개념이 혼동될 수 있다. 예를 들어 보존 기간은 무한하면 샤드 그룹 보존 기간은 7일인데, 샤드 그룹 보존 기간이 만료되면 데이터가 삭제되는 것인지 아니면 남아있는 것인지 말이다.

샤드 그룹 보존 기간은 데이터가 메모리에 상주해있는 시간이다.(다른 거의 모든 글들에서 이에 대해 설명하지 안 그리고 이 만약 샤드 그룹보존 기간이 만료되면 해당 데이터는 메모리에서 디스크로 저장이 되는 것이다. 그러므로 보존 기간이 무한하다면 해당 데이터는 영구적으로 저장이 되지만, 샤드 그룹 보존 기간이 지났다면 해당 데이터를 조회하기 위해서 디스크에서부터 값을 읽어와야 하는 것이다.

관련 포스팅

참고자료

반응형

인플럭스DB(influxdb) tag key, field key를 활용 Query 작성시 유의점

반응형

인플럭스DB는 시계열형태의 데이터베이스 입니다.

데이터를 시간단위로 넣는 비관계형 데이터베이스이며, 각종 로그나 시간별로 쌓이는 데이터 처리에 능숙 합니다.

이러한 인플럭스DB에서는 데이터를 저장 할 때 태그키(tag key)와 필드키(field key) 라는 형태가 존재 합니다.

관계형 데이터베이스를 기준으로 설명하면 일종의 컬럼 입니다.

두 키의 차이를 보기 위해 인플럭스DB에서 데이터베이스와, measurement를 만들어서 진행 해 보겠습니다.

* 데이터베이스 이름 : hello_ifx

* measurement 이름 : test_table

hello_ifx 라는 데이터베이스를 만듭니다. test_table이라는 measurement를 생성 하였습니다.

measurement는 관계형 데이터 베이스 기준으로 일종의 table을 의미 합니다.

여기서는 test_table이라는 이름으로 데이터를 생성하여 보았습니다.

이제 데이터를 좀더 넣고 간단하게 쿼리를 동작시켜 봅니다.

* 명령어 : select * from test_table

동작 쿼리도 매우 비슷하네요!

그러면 이제 테그키와 필드키가 무엇인지 알아보겠습니다.

* 테그키(tag key) 보는 명령어 : show tag keys from test_table

* 필드키(field key) 보는 명령어 : show field keys from test_table

테그키는2개, 필드키는 3개네요

테그키는 2개이며, 필드키는 3개가 나온 것을 볼 수 있습니다.

데이터를 넣는 insert 문법에서의 샘플을 분석하면 테그키와 필드키를 구분하여 넣는 방법을 확인 할 수 있습니다.

* 명령어 샘플 – insert test_table,text=qqqq,name=refff value=2,number1=112,number2=66 * 분석 1) insert 는 등록을 의미 합니다. 2) insert 뒤에 오는 명칭은 등록 할 measurement 이름을 의미 합니다. 3) measurement뒤의 콤마는 필드키 입니다. 4) 콤마 없이 띄어쓰기를 하고 값을 대입한 구간부터 태그키를 의미 합니다. -> 요기부터 : value=2,number1=112,number2=66 5) 태그키는 숫자 형식만 대입 할 수 있습니다.

위 내용이 이해가 되었다면 이제 태그키와 필드키의 차이를 살펴보겠습니다.

아래 사진은 각각의 키 값을 구분하여 조회(select)를 한 모습 입니다.

어…중간에 테그키만 가지고 한 쿼리는 아무런 동작결과가 없습니다??

사진을 보면 테그키(tag key)만 가지고 한 쿼리는 빈 값을 반환하는 것을 볼 수 있습니다.

그리고 필드키(field key)가 참조된 쿼리는 데이터가 나오는 것을 볼 수 있습니다.

인플럭스(influxdb)에서의 가장 핵심인 부분이 바로 “검색 대상에 태그키만 가지고는 조회(select), 그룹(group)이 되지 않는다, 태그키는 검색을 위한 색인의 목적이 크다” 입니다.

아래 where절 조건이 붙은 사진을 보면 좀 더 쉽게 확인이 가능 합니다.

테그키와 필드키의 차이입니다!

위 사진은 태그키인 name만 검색했을 때 아무런 결과를 보여주지 않는 쿼리와,

태그키 namer과 필드키 number1를 같이 검색하였을 때 결과를 보여주는 쿼리의 모습 입니다.

정리를 하면,

숫자 이외의 데이터, 쿼리의 인덱스를 위해서는 태그키를 사용 합니다.

측정된 값 데이터는 필드키(숫자만 허용)를 사용합니다.

검색 및 그룹화하여 데이터를 확인하려면 찾는 대상 값에 반드시 필드키가 1개라도 있어야 합니다.

이상으로 살펴본 인플럭스DB(influxdb) tag key, field key를 활용하여 질의문 작성 시 유의해야되는 점 이였습니다.

궁금한점 또는 틀린부분은 언제든 연락주세요! 👻

인플럭스DB를 이용해 텔레메트리 모니터링 확장하기

Offcanvas

Some text as placeholder. In real life you can have the elements you have chosen. Like, text, images, lists, etc.

위키백과, 우리 모두의 백과사전

InfluxDB는 인플럭스데이터가 개발한 오픈 소스 시계열 데이터베이스(TSDB)이다. Go 언어로 작성되었으며 운영 모니터링, 애플리케이션 매트릭스, 사물인터넷 센서 데이터, 실시간 분석 등 분야에서 시계열 데이터의 고속의 고가용성(HA)의 저장 및 검색에 최적화되어 있다. 그래파이트로부터 데이터를 처리하는 기능도 지원한다.[1]

역사 [ 편집 ]

Y 콤비네이터의 지원을 받는 Errplane[2]은 2013년 말 성능 모니터링 및 경보 처리를 위한 오픈 소스 프로젝트의 하나로서 InfluxDB를 개발하기 시작했다. Errplane은 2014년 11월 메이필드 펀드와 트리니티 벤처스가 주도하는 $8.1M 시리즈 A 파이낸싱 수익을 거두었다.[3] 2015년 말, Errplane은 공식적으로 사명을 InfluxData Inc로 변경하였다. InfluxData는 2016년 9월 $16M의 시리즈 B 펀딩 라운드 수익을 거두었다.[4] 2018년 2월, InfluxData는 사파이어 벤처스 주도의 $35,000,000 시리즈 C 라운드 펀딩을 마무리했다.[5]

기술 개요 [ 편집 ]

InfluxDB는 외부 의존성이 없으며[6] SQL 계열 언어를 제공하고 8086 포트를 리스닝하며,[7] 메저먼트(measurement), 시리즈(series), 포인트(point)으로 구성되는 자료 구조를 조회하기 위한 시간 중심 함수를 내장하고 있다. 각 포인트는 필드셋으로 불리는 여러 키-값 쌍, 그리고 타임스탬프를 구성한다. 키-값 쌍으로 함께 묶으면 이를 태그셋(tagset)이라 부르며 이를 통해 시리즈를 정의한다. 끝으로, 문자열 식별자를 통해 시리즈를 함께 묶으면 메저먼트가 된다.

값은 64비트 정수, 64비트 부동소수점, 문자열, 불리언(참/거짓)이 될 수 있다. 포인트는 시간과 태그셋으로 인덱싱된다.

influxDB의 flux를 활용하여 기간별 통계 그래프 만들기(grafana)

influxDB의 flux를 활용하여 기간별 통계 그래프 만들기(grafana)

최현복

개요

influxDB로 시계열 데이터를 수집하여 grafana를 통해서 시각화하여 모니터링에 사용중이였습니다. prometheus를 통해서도 수집을 하는 데이터가 있지만, 특정 기간을 그룹핑하는데는 influxDB에 강점이 있다고 판단되어 influxDB 사용하게 되었습니다. flux query을 사용하여 기간별 통계 그래프를 작성하였습니다. 익숙하지 않은 query 이지만, 참고 문서를 활용하면 원하는 그래프를 그릴 수 있습니다.

influxDB 란?

InfluxDB는 인플럭스데이터가 개발한 오픈 소스 시계열 데이터베이스(TSDB:Time-series Database)입니다.

시계열 데이터 베이스 란?

데이터를 저장할 때 시간을 key로 저장하는 데이터베이스 입니다. 시간을 베이스로 조회하는 기능을 제공합니다.

flux query 를 활용하기

저장된 데이터

collection 은 상품수, index 는 동적색인, api는 검색api 호출량 입니다. 서비스를 구분하기 위해서 name으로 tag를 추가했습니다.

db measurement field tag search collection count name search index count name search api count name

A. 일간 상품수 그래프 만들기

< query > from(bucket:”search”) |> range(start: -$ { start_time } , stop: now()) |> filter(fn: (r) => r._measurement == “collection”) |> filter(fn: (r) => r._field == “count”) |> filter(fn: (r) => r.name == “기준상품”) |> group(columns: [“count”], mode: “by”) |> aggregateWindow(every: 1d, fn: max) |> map(fn: (r) => ( { _value : r . _value , _time : r . _time , _field : ” 기준 상품 수 ” } )) < 설명 > bucket은 db를 기입합니다. range 범위는 (start: -$ { start_time } , stop: now()) 시작값(start)을 start_time 변수로 사용하고 종료값(stop)은 현재(now() 까지로 설정했습니다. filter 를 사용하여 measurement 는 상품수를 저장한 “collection” 을 사용합니다. 추가적인 filter 를 사용하여 count 이 외에 저장한 field가 있어서 설정을 하였습니다. tag를 사용하여 서비스 별로 name으로 구분하기 때문에 “기준상품” 을 선택했습니다. aggregateWindow 집계함수를 사용하여 every: 1d 1일간, fn: max 최대값을 사용하도록 했습니다. map을 사용하여 count로 저장된 이름을 “기준 상품 수”로 변경하였습니다.

위에 쿼리로 구성한 그래프 입니다.

* start_time 설정

grafana 대시보드 설정(Settings)에서 Variables 탭에서 설정하였습니다.

위에 동일한 쿼리를 그래프가 아닌 테이블로도 사용하고 있습니다.

다른 상품 수도 설정해서 대시보드에서는 이렇게 구성하여 사용합니다.

B. 일간 검색량 그래프 만들기

< query > from(bucket:”search”) |> range(start: -$ { start_time } , stop: now()) |> filter(fn: (r) => r._measurement == “api1” or r._measurement == “api2” or r._measurement == “api3”) |> filter(fn: (r) => r._field == “count”) |> filter(fn: (r) => r.name == “통합검색API”) |> group(columns: [“count”], mode: “by”) |> aggregateWindow(every: 1d, fn: sum) |> map(fn: (r) => ( { _value : r . _value , _time : r . _time , _field : ” 호출 수 ” } )) < 설명 > 위의 상품수와 다른 부분만 설명하자면 measurement를 api 서버별로 저장을 하기 때문에 or 를 사용하여 합쳤습니다. 집계 함수에서 fn 은 sum을 사용하여 검색량을 합산으로 계산하였습니다.

위에 쿼리로 구성한 그래프 입니다.

위와 같은 방법으로 동적색인량도 구성하였습니다.

C. 주간, 월간, 연간 그래프 만들기

< query > > 주간 – 상품수 |> aggregateWindow(every: 1w, fn: max) – 검색량, 동적색인량 |> aggregateWindow(every: 1d, fn: sum) |> aggregateWindow(every: 1w, fn: max) > 월간 – 상품수 |> aggregateWindow(every: 1mo, fn: max) – 검색량, 동적색인량 |> aggregateWindow(every: 1d, fn: sum) |> aggregateWindow(every: 1mo, fn: max) > 연간 – 상품수 |> aggregateWindow(every: 1y, fn: max) – 검색량, 동적색인량 |> aggregateWindow(every: 1d, fn: sum) |> aggregateWindow(every: 1y, fn: max) < 설명 > 집계 함수만 수정하여 기간을 다르게 하여 구성하였습니다. 상품수는 합산이 필요 없으므로, 기간 중에서 max 데이터를 사용하였습니다. 검색량과, 동적색인량 같은 경우는 합산이 필요하기 때문에 일별 합산 집계함수를 먼저 사용하여 데이터를 구성한 뒤 기간 중에 max 함수를 사용하여 일 합산 데이터로 기간중 최대값을 구하였습니다.

기간 별 대시보드를 구분하여 구성하였습니다.

정리

기간별 통계 그래프를 수동으로 작성 했었습니다. 1년 동안 상품수, 검색량이 얼마나 증가하였는지 연간 증가률이 어떻게 되는지 확인하여 의사 결정을 할때 사용하고 있었습니다. 특정 기간(1일 데이터)을 그룹핑 하여 통계 데이터를 만드는 것은 prometheus 에서는 한계가 있었습니다. 그래서 influxDB 를 사용하게 되었습니다. flux query를 사용하여 일간, 주간, 월간, 연간 데이터를 grafana를 활용하여 시각화 하였습니다. 앞으로 기간 통계 데이터를 확인할 때 편리하게 사용할 수 있습니다. DB의 쿼리처럼 flux 쿼리도 순서에 따라서 성능이 변합니다. 그렇기 때문에 filter 순서에도 신경을 써서 작업하시는 것을 추천드립니다.

참고 자료

시계열 DB (OpenTSDB , 인플럭스 DB , Graphite ) 정리

만약 자신의 집에서 사용중인 전기를 측정하는 센서가있다고 치고 , 그 센서는 1초에 한번씩 전력값을 측정한다고 치자. (사실 센서에서는 수천번 측정한다고한다.그것들의 1초 평균값을 가져온다고 생각하자. 더 상세하게 분석하려면 1초 평균값,최대피크값등등 가져오면 더 좋을것이다.물론BM에따라서는 1분당 , 1시간당 평균,최저,최고값을 사용할수도있겠다.) 이 측정 값을 분석해서 , 집안에서 사용중인 모든 가전제품등의 대기전력 및 여러가지 패턴을 알아낸다고 하자.

막간 상식 코너 ~! 와트(W) : 움직이는 전하는 일을 한다. 예를 들어 열을 발생시키거나 전동기를 회전시키는 등의 일을 한다. 일의 능률(전기에너지가 빛이나 열에너지로 바뀌는 비율)을 전력이라 한다. 전력 (P) : 단위시간(1초) 동안 전기기구에서 소모하는 전기에너지의 량. P = V (볼트) * A (암페어)

1초에 한번씩 생성되는 데이터를 시간/값 => ( “2015-10-15 10:50:30” , 563.34) 라고 하면 Postgresql 같은 일반 관계형데이터베이스에 저장한다고 치자.

timestamp or Character (20 byte) : real (4byte) 이렇게 2가지의 컬럼이 필요하겠지.

대략 25 바이트라고치고 ,

1분에 1500 byte

1시간에 90000 byte

1일에 2160000 byte (대략 2 mb)

1달에 64800000 byte (61 mb)

1년에 788400000 byte (751 mb)

집안에 센서가 여러개면 더 늘어나겠지. 일단 센서1개 로 잡고 백업,인덱스등 부산물의 데이타용량은 제외 , 데이터를 압축 등 적용안한다고 치고 대략적으로 1기가라고 잡자.

한가구에 대략 1기가로 잡고 , 만약 전기서비스를 하는 회사를 만들었다고 치고, 빅데이터들을 관리 분석한다고 할때 , 1만가구쯤을 대상으로 서비스한다고 치면 1만기가 = 9 테라바이트 정도 된다.

요즘 테라단위의 HDD 들이 나오고 있다. 10TB 도 나온듯하다. 와우~ (http://it.donga.com/21465/)

프로토타입으로 저런 데이터를 postgresql 에 모아서 ,모여진 데이터를 실시간으로 d3.js 를 이용해서 가시화 하고 있다고 하자.

이제부터 본격적인 시스템을 설계한다고 치면, 언제까지 저런 데이터를 postgresql 에 담아두고 활용할거냐는건데.. 웬지 , 용량을 더 늘려야할거 같다. 스케일 업을 할수도있고, 스케일 아웃을 할수도있겠지..스케일 아웃에 대해서 고려해면다면 couchbase / hadoop hdfs / mongodb 뭐 이런것들이 떠오른다. 분석을 생각해본다면 , Apache storm 이나 spark streaming 도 떠오른다.

여기서 한발 더 나아가서 , 저런 시계열 데이터를 특별히 다루는것들이 있는지도 살펴봐야겠는데..몇몇가지가 있더라~~ 그래서 이번 게시물에서는 그 몇몇가지에 대해서 한번 살펴본다.

그 시계열 DB 들이 couchbase / hdfs / mongodb 와 경쟁을 하게될지, 협업을 하게될지..나는 아직 잘 모른 다. 그 시계열 DB 들이 RDBMS 들과 어떤 앙상블을 이루게될지 희미하다. 따라서 일단 정리해본다. -.-v (일단 주워담고, 차근차근 정리해본다. 당분간 정신없을 게시물이될듯)

OpenTSDB (http://opentsdb.net/)

– OpenTSDB 는 타임시리즈데몬(TSD) 들로 구성된다. – 잘 알려진 에너지 회사인 OPower 에서도 사용한다. – 각각의 TSD 들은 독립적이며 상태공유 없이 돌아간다. – 각각의 TSD 는 HBase 를 사용하며, 타임시리즈데이터를 가져와서 저장한다. – HBase 스키마는 저장공간을 줄이기위해 비슷한 타임시리즈를 빠르게 집약하는것에 최적화. – TSD 유저들은 HBase 에 직접적으로 접근할 필요가 없다.

InfluxDB ( https://influxdb.com/)

0) 2013년 첫 릴리즈

1) InfluxDB는 data store를 위해 구글이 만든 key/value database library인 LevelDB를 사용하고 있습니다. 따라서, 아래와 같은 LevelDB의 특징을 가지고 있습니다.(다음버전엔 RocksDB 로 이동예정)

– 기본적으로 데이타를 compression하기 때문에 읽기와 삭제에 다소 느릴 수 있습니다.

(출처: http://obfuscurity.com/2013/11/My-Impressions-of-InfluxDB, https://code.google.com/p/leveldb/)

– 그러나, LevelDB와 다르게 SQL-like query language를 지원합니다. group by, join, 또 복수개의 time series(RDBMS에서 테이블이라고 이해하시면 됩니다.)를 merge하는 것도 가능합니다.

2) InfluxDB는 distributed and scale horizontally하게 설계되었습니다. 따라서, cluster에 새로운 node만 추가하면 쉽게 scale-out 할 수 있습니다.

3) Continuous Queries를 지원합니다. 이게 뭐냐면, 정해준 시간마다 해당 query를 실행해서 그 결과 값을 지정하는 테이블의 특정 칼럼으로 저장하게 해줍니다. 보통 분석, 통계 데이타를 쌓을 때 스케줄러를 통해 많이 하는 작업(downsampling 같은 작업)인데요. InfuxDB는 이런 작업을 Continuous Query 한방으로 해결해줍니다.

4) MongoDB 처럼 Schemaless design입니다.

5) Primary interface로 native HTTP API를 제공하고 Java, Javascript, Ruby, Rails, Python, PHP, Node.js, Go 등 많은 library를 제공합니다.

6) Go로 작성되었습니다.

7) InfluxDB는 오픈소스입니다. 소스를 다운로드 받아서 쓰실 수 도 있고 아니면, influxdb.org에서 매달 일정 비용을 내고 호스팅 서비스를 받으실 수 있습니다.

8) Linux & OS X

9) 스키마 프리

10) HTTP API / JSON over UDP

11) Numeric data and String

12) Sharding 지원 / Selelctable replication factor

InfluxDB 는 여러모로 시계열 DB 중에 가장 널리 선택받고 사용될듯 합니다.

(저도 전력빅데이터 분석을 위해서 InfluxDB + Grafana 조합을 사용중입니다)

Graphite ( http://graphite.wikidot.com/)

Graphite 는 무엇인가?

Graphite 는 높은 확장성을 가진 실시간 그래픽 시스템이다. 당신이 관심있어하는 그래프를 그리기위한 수치 타임시리즈 데이터를 수집할수있는 어플리케이션을 만들수있으며. 그것을 Graphite 의 벡엔드로 보낼수도있다. 그 데이터들은 Carbon 이라 불리는 Graphite 의 특별한 데이터베이스에 저장될것이다. 그리고나서 Graphite 의 웹 인터페이스를 통해 가시화될수있을것이다.

Graphite 는 수치 타임시리즈 데이터를 다루기위해 특별히 디자인되었으며, 따라서 주식을 나타내는데 도 좋다. 오직 수백건을 표현하기위해서라면 Graphite 는 지나치다. 수백개의 서버에서 나타내는 수많은 성능 지표들을 나타내기위해서 적절하다.

어떻게 스케일 확장가능한가?

CPU 관점에서 Graphite 는 프런트엔드 와 백엔드 양쪽모두 수평적으로 확장할수있다. 이 말은 당신은 그저 더 많은 서버를 추가하기만 하면 된다는것이다. 그것은 벡엔드 서버가 고장났을때, 데이터 손실을 야기하는 상황에서 내고장성을 가지고있다는뜻이며, 만약 충분한 수용능력이 있을경우 시스템 운용에 지장받지 않는다는것이다.

I/O 관점에서 봤을때, under load Graphite 는 매우 빠르게 많은 다른 파일들상에서 작은 I/O 오퍼레이션을 수행한다. 이것은 Graphite 로 보내는 각각의 distinct metric 들이 자신의 데이터베이스 파일에 저장되기 때문이다.

Graphite 의 벡엔드는 만약 디스크가 크기가 작은 수많은 쓰기 연산을 다룰수 없을때 들어오는 데이터를 캐쉬한다. (대부분의 디스크들은 초당 수천 I/O 연산을 할수없다.비록 각각의 데이타포인트가 오직 수 바이트일지라도. 추가: HDD의 경우 초당 랜덤 엑세스가 100~200회 밖에 되지 않는다. TPS가 1,000이 넘어가는 요청은 랜덤 엑세스로는 처리하기가 어렵다. MySQL InnoDB의 경우 Sequential write를 통해 초당 2,000회 정도의 Insert가 가능하다.) . 그런 현상이 발생했을때 Graphite 의 데이터베이스 엔진 (Whisper) 은 카본에 한번에 여러개의 데이터포인트를 쓰는것을 허용한다. 그리하여 전반적인 처리량을 증가시킨다.

– 2006 년 첫 릴리즈

– 최근 릴리즈는 0.9.10 (12년 5월 31일. 업데이트가 안되는듯?)

– python 으로 만들어진 오픈소스이다. (python 관련 라이브러리를 잔뜩 설치해야한다)

– webapp 은 Django 로 만들어졌으며 , ExtJS 를 사용한다. 그래프 랜더링은 Cairo 를 사용함.

– 주요모듈은 carbon / whisper / graphite-web 이다.

– Linux / Unix (설치가 비교적 복잡한 편)

– 데이터 스키마 있음

– HTTP API / Sockets

– Numeric data only

– Sharding / replication factor 없음

– Apache 2.0 License. (굉장히 자유스러운 라이센스)

Collector는 Graphite에 어떠한 데이터를 쌓기 위한 모듈입니다. 여기에 대한 특별한 제한은 없습니다만, 시계열 데이터베이스의 특성상 기본적으로 데이터가 저장될 네임스페이스와 시간, 데이터 이렇게 3가지 데이터가 필요합니다. 이러한 정보를 Graphite의 모듈인 Carbon-Cache에 보냅니다. Carbon-Cache는 Collector가 보낸 데이터를 받아 Whisper에 저장합니다. Carbon-Cache가 데이터 수집기라면 Whisper는 실제로 데이터를 파일시스템에 저장하고 읽어오는 모듈입니다. 자 이제 Whisper를 통해 데이터가 파일 시스템에 저장되었습니다. 그렇다면 이 데이터를 어떻게 가져올 수 있을까요. 이 시점에서 등장하는 게 Graphite-Web입니다. Graphite-Web은 http 프로토콜을 통해서 Whisper에 저장된 데이터를 읽어와 이미지 파일이나, 데이터 형식으로 출력합니다. Graphite-Web은 기본적으로 데이터를 제공하는 API와 대시보드 기능 두 가지를 제공하고 있습니다. 여기서 제공하는 대시보드 기능을 그냥 사용해도 무방합니다만, 기본적으로 그렇게 편리하지는 않습니다. 직접적인 Graphite 프로젝트는 아닙니다만, 이 Graphite-Web에서 대시보드를 제외하고 API 기능만을 따로 구현해둔 Graphite-api라는 모듈도 있습니다. 다른 대시보드를 사용한다면 Graphite-Web이나 Graphite-api 어느 툴을 사용해도 무방합니다.

Grafana ( http://grafana.org/)

Grafana 는 소스로 Graphite / Elasticsearch / InfluxDB 등을 이용하여 타임시리즈를 그래프 / 대쉬보드로 가시화해주는 툴입니다.

– 일라스틱서치는 키바나라는걸 주로 사용하더군요. (ELK : 일라스틱서치, 로그스태시, 키바나)

레퍼런스:

http://brad2014.tistory.com/334

http://blog.nacyot.com/articles/2014-07-17-graphite-with-dokcer/

InfluxDB – distributed time series database

키워드에 대한 정보 인플 럭스 db

다음은 Bing에서 인플 럭스 db 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 [엑셈 웨비나] 시계열 데이터베이스 ‘InfluxDB’

  • 동영상
  • 공유
  • 카메라폰
  • 동영상폰
  • 무료
  • 올리기
[엑셈 #웨비나] #시계열 #데이터베이스 #’InfluxDB’


YouTube에서 인플 럭스 db 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 [엑셈 웨비나] 시계열 데이터베이스 ‘InfluxDB’ | 인플 럭스 db, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

Leave a Comment