TICK stack

oasis9217·2022년 5월 3일
0

2020-archive

목록 보기
3/7

2020년에 작성한 노트를 옮겨 적은 것입니다.

Tick tldr;

  • Telegraf + InfluxDB + Chronograf + Kapacitor

    • DB 시스템 & 프론트엔드
    • 참고
  • Pros

    • Time-series data에 특화
    • 스택 정의가 잘 되어있으므로 configuration 어렵지 않다.
    • 만약 Partner Services를 위한 Data collection server를 구성한다면 스택 설치 후 관리하기 편함
    • 특정 URL에 대한 HTTP 요청 aggregation 가능
      • ex) Partner Services 서버가 /metrics 리스닝 중 앱이 주기적으로 POST services data
      • ex) 앱이 Services DB pull하는 API 제공, Partner Services 서버가 해당 URL path 리스닝 & API request to 앱 & data aggregation
    • 기본적으로 제공하는 대쉬보드 및 쿼리 페이지의 완성도가 높음
  • Concerns

    • 엄청 가볍진 않은 듯 (Amazon EC2 t2.medium is below recommendations)

    • Time-series 

      • delete, update 사용 부적절. SQL같은 기능을 원하면 부적절
      • RDBMS처럼 data consistency는 중요 x → transaction이 중요하다면 사용하면 안됨
      • Partner Services에서 데이터의 타임스탬프가 중요한가??
      • 오픈소스인데 Contact Sales & Partner/Customer 탭이 있어서 써도 되는건지 의문
  • 결론

    • Service Request 구성이 InfluxDB로 활용하기 좋지 않음

    • tags의 값들은 중복될 경우 많음

      • 만일 같은 시간에 두 포인트 입력시 merge되므로 별로인듯.
      • InfluxDB는 ns단위지만 Node가 ms단위임
    • 쿼리가 이루어지지 않을 값이 roomId 정도?

    • AWS에 구성시 2 machines for /data & /wal(cache). Each machine with a minimum of 8GB RAM 

    • ELK가 더 나은 것 같다.

Telegraf

  • System의 데이터 모으고 뱉는 agent.
  • Plugin based
    • input: 매우 다양한 소스로부터 데이터 수집 가능 (Nginx, HTTP, Redis, etc.)
    • output: 매우 다양한 리포팅 포맷 (파일, MQTT, InfluxDB, etc.)

InfluxDB

  • sort of NO-SQL
  • Time-stamped data에 성능이 좋다고 함
  • SQL-like language 제공. SQL이 아니기 때문에 사용에 제약이 있는 듯

Terminology

  • Point: 각 데이터 record
  • Measurement: SQL에서의 table
  • Tag set: 포인트에 대한 태깅
  • Field set: Field (column in SQL) & Values pairs - case-sensitive
  • Timestamp: optional. ns가 디폴트
  • Line Protocol: 위 컴포넌트들의 조합.
    • 하나의 Point의 representation. double quote, whice spaces, special characters 등 제약 많음
measurementName,tagKey=tagValue fieldKey="fieldValue" 1465839830100400200 
--------------- --------------- --------------------- ------------------- 
       |               |                  |                   | 
  Measurement       Tag set           Field set           Timestamp


measurementName,tagKey=tagValue fieldKey="fieldValue" 1465839830100400200 
                               ┬                     ┬ 
                           1st space             2nd space

Data Writing

  • UI 이용: Line Protocol을 파일로 읽어오거나 직접 입력 가능
  • Telegraph 이용
  • Scraper 이용
  • Influx CLI - 굳이 쓸 필요 x
  • InfluxDB API
    • 이 API를 도와주는 애가 scrapper인가?
    • 앱에서 직접 콜 할 수 있을 것 같다.
      curl -XPOST "http://localhost:9999/api/v2/write?org=YOUR_ORG&bucket=YOUR_BUCKET&precision=s" \
       --header "Authorization: Token YOURAUTHTOKEN" \
       --data-raw "mem,host=host1 used_percent=23.43234543 1556896326"
    • Node용 InfluxDB client있긴한데 not production ready

SQL이랑 차이? (Time-series data의 컨셉)

  • Time ordered, 
  • Read, Write 먼저. Update should never occur, Delete for purge
  • 각 point보다 dataset이 더 의미를 가짐
    • point에는 id 없음
    • 데이터셋이 infer하는 정보가 중요하지 각 데이터 자체가 중요한게 아님
    • Partner services에서 적절할까?
      • 티켓이 많이 book되는 시간대 
      • 티켓이 많이 팔리는 시간대
      • 지역별 얼마나 많이 팔리는지
      • complete ratio
      • cancel ratio

Chronograf

  • 매우 완성도 높은 Web UI
  • 쿼리 및 대쉬보드가 사용하기 편리
  • 해당 웹에서 TICK 스택 설정 가능 - user, database 관리
  • 대체재: Grafana, Kibana

Kapacitor

  • 아직 모르겠다.

0개의 댓글