RDS의 각 테이블의 성장을 Datadog에서 볼 수있게했습니다.
목적
매일 성장해가는(=데이터량이 늘어나는) RDS를 지켜보기 위해, 보이게 하고 싶다!
그 때문에 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라는 그래프도 표시시키고 있습니다.
Reference
이 문제에 관하여(RDS의 각 테이블의 성장을 Datadog에서 볼 수있게했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/toku345/items/62ca0decd8e219f6d3d2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
지표 (= 모니터링하려는 정보) 보내기
수단 그 1(REST API 경유)
처음에는 메트릭 전송에
REST API
를 사용해 보았습니다.Datadog API Reference
DATADOG_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라는 그래프도 표시시키고 있습니다.
Reference
이 문제에 관하여(RDS의 각 테이블의 성장을 Datadog에서 볼 수있게했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/toku345/items/62ca0decd8e219f6d3d2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)