RDS의 각 테이블의 성장을 Datadog에서 볼 수있게했습니다.

13383 단어 루비Datadog

목적



매일 성장해가는(=데이터량이 늘어나는) RDS를 지켜보기 위해, 보이게 하고 싶다!
그 때문에 Datadog에 메트릭스를 보내 그래프화 해 보았습니다!

가정하는 대상



아래와 같은 쪽을 읽어도 알 수 있는 것을 목표로 하고 있습니다
  • Datadog 계정이 있습니다 (가지고 있습니다)
  • Datadog 계정이 없지만 분위기 만 알고 싶습니다

  • ※ 계정 작성에 관해서는 Developers.IO 님의 기사가 상세합니다
    Amazon Linux를 Datadog로 모니터링해 보았습니다.

    원래 Datadog 란?



    매우 유연한 모니터링 서비스로 Saas의 형태로 제공됩니다.
    그래프가 매우 아름답게 할 수 있습니다.tag 라는 것이 있고, 그것을 사용하면 다차원으로 해석할 수도 있습니다.

    한마디로, 정말로 대단한 놈입니다!

    출처



    Datadog 본가

    Datadog에 대해서도 조금 깊이 파고 싶은 분은,
    내 코코로 스승 🌸 님의 처음 datadog

    Datadog tag의 대단함, 다차원으로 해석에 대해서는,
    @jhotta 님의 Datadog의 진정한 매력이란 무엇입니까? 를 참조해 주세요.

    가시화를 위해



    지표 (= 모니터링하려는 정보) 보내기



    수단 그 1(REST API 경유)



    처음에는 메트릭 전송에 REST API를 사용해 보았습니다.

    Datadog API ReferenceDATADOG_KEY , DATADOG_APP_KEY 는 이쪽에서 → htps : // 아 p. 다만 ghq. 코 m / 아코 톤 t / 세친 gs # 아피

    코드는 이런 느낌↓

    rds_tables.rb
    #! /usr/bin/env ruby
    require 'dogapi'
    
    DATADOG_KEY     = 'XXXXXXXXXX'
    DATADOG_APP_KEY = 'XXXXXXXXXX'
    
    def emit_datadog(metric, v, tags)
      dog = Dogapi::Client.new(DATADOG_KEY, DATADOG_APP_KEY)
      dog.emit_point(metric, v, host: 'my.host', tags: tags)
    end
    
    SQL = 'SELECT TABLE_NAME, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH FROM information_schema.tables WHERE TABLE_SCHEMA="myapp";'
    
    records = `mysql -uwho -ppassword -h hogehoge.ap-northeast-1.rds.amazonaws.com my_database -BN -e '#{SQL}'`
    records.split("\n").each do |record|
      table_name, table_rows, data_length, index_length = record.split("\t")
      emit_datadog 'myapp.mysql.table_rows',   table_rows.to_i,   ['mysql', "table_name:#{table_name}", 'table_rows']   # テーブル行数
      emit_datadog 'myapp.mysql.data_length',  data_length.to_i,  ['mysql', "table_name:#{table_name}", 'data_length']  # テーブルサイズ
      emit_datadog 'myapp.mysql.index_length', index_length.to_i, ['mysql', "table_name:#{table_name}", 'index_length'] # インデックスサイズ
    end
    

    그냥 위의 코드에 문제가있었습니다 😥
    각 테이블 × 메트릭마다 전송해야하므로,
    약 300 테이블 × 3 메트릭스 = 약 900 회 https 통신이 발생하여 9 분 정도 걸렸습니다. . .
    실시간성이 부족하기 때문에, 매우 감시에 잡을 수 없었던 것이 아닙니다.

    수단 그 2(DogStatsD 경유)



    그래서 DogStatsD를 통해 전송하도록 변경해 보았습니다.

    DogStatsD를 사용하면メトリクスをUDPを使って受信し、集計した後、グラフ化表示のために定期的にDatadog側に送信 가능해지고,
    약 300 테이블 있는 정보를 1분 간격으로 송신해도 특히 트러블이 일어나지 않게 되었습니다!

    DogStatsD 해설

    ※ 참고로 DogStatsD를 사용하기 위해서는 Datadog Agent 의 셋업이 필요합니다.
    Datadog Agent 입문

    rds_tables2.rb
    #! /usr/bin/env ruby
    require 'statsd'
    
    statsd = Statsd.new('localhost')
    
    SQL = 'SELECT TABLE_NAME, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH FROM information_schema.tables WHERE TABLE_SCHEMA="myapp";'
    
    records = `mysql -uwho -ppassword -h hogehoge.ap-northeast-1.rds.amazonaws.com my_database -BN -e '#{SQL}'`
    statsd.batch do |s|
      records.split("\n").each do |record|
        table_name, table_rows, data_length, index_length = record.split("\t")
        s.gauge 'myapp.mysql.table_rows',   table_rows.to_i,   tags: ['mysql', "table_name:#{table_name}", 'table_rows']   # テーブル行数
        s.gauge 'myapp.mysql.data_length',  data_length.to_i,  tags: ['mysql', "table_name:#{table_name}", 'data_length']  # テーブルサイズ
        s.gauge 'myapp.mysql.index_length', index_length.to_i, tags: ['mysql', "table_name:#{table_name}", 'index_length'] # インデックスサイズ
      end
    end
    

    그래프화



    다음은 모은 메트릭스의 그래프화!

    그래프 준비



    먼저 수집한 지표 중 어떤 지표를 사용하여 그래프를 그릴지 지정합니다.

    사이드 메뉴에서 Metrics -> Explorer를 선택합니다.


    [그래프] 열에 메트릭 이름을 지정하여 그래프를 원하는 수 (이번에는 하나)를 선택하여 새 대시 보드를 만듭니다.




    대시보드 수정



    이전의 순서로 그래프는 할 수 있었습니다만, 또 한 번 걸면 더 편리한 것이 됩니다!

    대시보드를 열고

    Template Variable 설정


    최초로 설정한 그래프로부터 새롭게 설정한 Template Variable 를 참조하도록 변경


    화면 상단의 Template Variable를 변경하면 그 값에 따라 그래프가 변경됩니다.


    좋아요! !

    다른 메트릭도 마찬가지로 설정하고 잠시 방치하면 ↓ 같은 느낌이됩니다.
    부디, 여러분도 재미있는 것 같은 메트릭스를 추가&그래프화해 즐겨 보세요!

    ※ 아래의 이미지는 이번 작성한 그래프 외에 Top List라는 그래프도 표시시키고 있습니다.

    좋은 웹페이지 즐겨찾기