opentsdb 소스(https://github.com/OpenTSDB/opentsdb )를 살펴보니.. 큰 특징은 다음과 같다.
<내용>
1. grafana를 지원한다. (사실 이것 때문에 쓰는 것임)
2. hbase 쿼리 튜닝은 되어 있지 않다(start, end로 해서 읽어옴, 대용량 데이터에 엄청 취약)
3. gpgl 이다. (소스를 건들 수 없다)
OpenTSDB is free software and is available under both LGPLv2.1+ and GPLv3+.
4. 성능을 위해 async hbase(Defered)를 사용했다. (그러나 성능 이슈는 앱의 쓰레드 부분이 아니라 쿼리 부분에서 발생한다)
5. 야후 개발자 한명이 혼자 다 개발한다. 따라서 확장성에서 취약하다. 아저씨 코드이다.
6. 현재 3.0 개발중(google bigtable도 깔끔하게 지원될 것 같다)
7. 데이터가 많아지면 트래픽에 굉장히 취약하다. 대용량 환경에서는 druid가 답이다.
7. 2.3까지 pre-aggregation, google big table/cassandra 지원은 완벽하지 않다. hbase 빼고는 답이 없다. (대용량에 취약하다.)
8. druid vs opentsdb
https://community.hortonworks.com/questions/89810/druid-vs-opentsdb-for-tick-data.html
https://www.popit.kr/time-series-olap-druid-%EC%9E%85%EB%AC%B8/ (람다 아키텍처 지원)
https://groups.google.com/forum/#!topic/druid-development/bPJbWO-g4aw
https://java.libhunt.com/compare-opentsdb-vs-druid
<세부 내용>
1. 원래 opentsdb의 의도는 한 대의 host, network를 모니터링을 위해 만들어졌다. kafka* 이런식의 모아보기 용은 아니다.
2. 키 구성
row key : metric_uid + timestamp + tagk1 + tagk2 + <tagkN> + <tagvN>
timestamp
tagk1=tagv1
tagk2=tagv2
3. 키 검색 순서
time range -> metric -> tags
따라서 동일한 그룹핑 단어가 많아지면 성능은 좋지 않다.(data. agg. 으로 시작하는 단어)
4. opentsdb 2.0부터 4개의 테이블이 생성된다.
data
uid
tree
metadata 테이블 : name <--> id 매핑
5. tagk 길이 제한
rowkey에 저장해야 하기에 5개 태그 미만으로 저장해야 한다.
6. opentsdb가 api에 예민(host 정보 없으면 에러 출력), 성능이 약해서 opentsdb 앞단에 opentsdb compatible api g/w를 사용해야 잘 감싸는 서버가 필요하다. 따라서 custom, 모아보기 기능도 쉽게 진행할 수 있다.
<opentsb를 활용한 프로젝트>
https://github.com/turn/splicer : 여러 opentsdb 클러스터와 redis를 두어 모니터링(더이상 운영 안됨)
https://github.com/facebookarchive/beringei : facebook에서는 인메모리 TSDB용으로 개발(더이상 운영 안됨)
<참고>
Opentsdb 좋은 공부 자료
http://tsunanet.net/~tsuna/hbasecon-2014-opentsdb-2.0.pdf
http://opentsdb.net/misc/opentsdb-oscon.pdf
http://Marp의 opentsdb 튜닝가이드 https://mapr.com/blog/hbase-key-design-opentsdb/
http://opentsdb.net/docs/build/html/user_guide/backends/bigtable.html
다음은 opentsdb를 분석하며 대충 그려놓은 그림이다. 자료가 없어서 이를 참조하면 좋을 것 같다.