관리 메뉴

HAMA 블로그

[OpenTSDB] 어떻게 OpenTSDB 는 동작하나? 본문

오픈소스, 미들웨어

[OpenTSDB] 어떻게 OpenTSDB 는 동작하나?

[하마] 이승현 (wowlsh93@gmail.com) 2015. 7. 19. 10:46
http://opentsdb.net/overview.html를 번역했다. OpenTSDB 는 사물인터넷 분야에서 많이 사용되며, 잘 알려진 에너지 IoT 기업인 OPower (http://blog.opower.com/category/technology/) 에서도 사용중이다.


OpenTSDB 는 타임 시리즈 데몬(
Time Series Daemon (TSD)) 들로 구성된다.(몇몇 커맨드라인 유틸리티셋 포함)
OpenTSDB  상호작용은 TSD 하나 혹은 그 이상이 작동하면서 이루어진다. 각각의  TSD 는 독립적이며 
상태공유없이 돌아가기때문에 여러가지 일들을 하기위해  여러 TSD 들에게 일거리를 던져주는데 아무 문제없다.

각각의 TSD 는 HBase 오픈소스 데이타베이스를 사용하며 타임시리즈데이터를 가져와서 저정한다. HBase 스키마는 저장공간을 줄이기위해 비슷한 타임시리즈를 빠르게 집약하는것에 대해 최적화 되어있다. TSD 유져들은 HBase 에 직접적으로 접근할 필요가 없다. 간단한 텔넷 스타일 프로토콜/HTTP API/ 간단한 빌트인 GUI 등을 경유해서 TSD 와 커뮤니케이션할수있다. 모든 커뮤니케이션들은 동일한 포트상에서 발생한다. (TSD 는 처음 몇바이트를 읽어서 클라이언트의 프로토콜을 이해한다.)




쓰기


OpenTSDB 를 사용하는 첫번째 단계는 TSDs 에 타임시리즈 데이터를 보내는것이다.   여러가지 툴(tools )들이  다양한 소스로부터 데이터를 꺼내서 OpenTSDB 에 넣기위해  존재한다. 만약 당신이 필요한 툴을 찾지 못한다면 직접 스크립트를 짤 필요가 있다.  (e.g. by reading interesting metrics from /proc on Linux, collecting counters from your network gear via SNMP, or other interesting data from your applications, via JMX for instance for Java applications) 그리고 TSDs 중 하나에 데이터 포인트들을 주기적으로 푸시하면 된다.

StumbleUpon 는  tcollector  라 불리는 파이썬 프레임워크를 썼는데(wrote) , Linux 2.6, Apache's HTTPd, MySQL, HBase, memcached, Varnish 등으로 부터 수천가지의 계측데이터를 모으기위해 사용되었다. 
이런 적은 영향(
low-impact)을 주는 프레임워크는 몇가지 쓸만한 컬렉터들을 포함하고, 그 커뮤니티는 꾸준히 그 이상의 기능을  제공한다. OpenTSDB 와 상호작용하는 프레임워크들은  Collectd /  Statsd  / the Coda Hale metrics emitter 를 지원하며 포함한다. OpenTSDB 에서 , 타임시리즈 데이타 포인트는 다음과 같이 구성된다:


  • 계측(Metric) 이름.
  • UNIX 타임스탬프 (seconds or millisecinds since Epoch).
  • 값 (64 bit integer or single-precision floating point value).
  • 태그들의 셋  (key-value 쌍 )  포인트에 해당하는 타임시리즈를  나타낸다.

태그들은 다른 소스들 또한 연계된 엔터티들로 부터 유사한 데이터 포인터들을 구분하기위해 사용된다.  그래서 당신은 쉽게 그들을 개별적으로 또는 그룹으로 나타낼수 있다. 태그는 머신의 이름을 가진 주석된 데이터 포인트들로 구성된다. (머신이 포함된 pool 또는 클러스터의 이름도~) 이것은 당신이  서버의 논리적 풀의 집약상태를 보여주는 데쉬보드 뿐만아니라 추가적으로 서버당 당신의 서비스의 상태를  나타내는 데쉬보드를 쉽게 만들수있게한다.

mysql.bytes_received           1287333217 327810227706             schema=foo host=db1
mysql.bytes_sent                  1287333217 6604859181710           schema=foo host=db1
mysql.bytes_received           1287333232 327812421706             schema=foo host=db1
mysql.bytes_sent                  1287333232 6604901075387           schema=foo host=db1
mysql.bytes_received           1287333321 340899533915             schema=foo host=db2
mysql.bytes_sent                  1287333321 5506469130707           schema=foo host=db2

이 예는 4개의 다른 타임 시리즈에 속한 6개의 데이터포인트를 보여준다. 각각의  계측과 태그의 컴비네이션들은 다른 타임 시리즈를 만들어낸다.  
4개의 타임시리즈 모두는 2개의 계측(
metrics) 은mysql.bytes_received or mysql.bytes_sent중 하나이다.

 데이터 포인트는 최소한 하나의 태그를 가져야하고  계측에 대한 매 타임 시리즈들은 동일한 숫자의 태그(역주: 위의 예는 2개) 를 가져야한다.  데이터 포인트당 6~7개 이상의 태그를 갖는건 추천하지 않는다. 새로운 데이터 포인트와 연계된 비용이 포인트 넘어 태그의 숫자에 지배되기 때문이다.

위의 예의 태그를 가지고서  쉽게 호스트 또는 스키마당 MySQL 의 네트워크 액티비티를 보여주는 그래프나 데쉬보드를 생성할수있을것이다. OpenTSDB 2.0 은 계측의 질과 메타데이터를 추적하는  데이터 포인트들과 함께 non-numeric 주석을 저장할수있게됬다. 


읽기

타임시리즈 데이터는 라인 그래프로 보통 그려질수있다. 그래서 OpenTSDB  는 그래프를 생성기위해  하나 혹은 그 이상의 계측과 태그를 선택하는 빌트인 심플 유저인터페이스를 제공한다.

 HTTP API 는  monitoring frameworks /  dashboards / statistics packages or automation tools 같은 외부  시스템들과  묶여서  OpenTSDB 에서 활용된다. 관련된 툴들을 보기위해  resources 페이지로 가자.  


Comments