LoginSignup
9
5

More than 5 years have passed since last update.

[Grafana] Grafanaで、AWSのリザーブドインスタンス(RI)を監視してみた。

Posted at

こんにちは。
最近開発にも手を出し始めた元インフラのjkkitakita。

とりあえず
何か書きたい衝動に駆られたので
ちょっと前に、遊び感覚でやっていたことをつらつらと。

はじめに

ざっくりでも以下の知識があるとよいかも。

  1. リザーブドインスタンス
  2. Grafana + Influxdb
  3. telegrafのExec Input Pluginについて

各種サービスのバージョン

  • Telegraf - Version 0.10.3
  • InfluxDB shell 0.10.3
  • Grafana v 2.6.0

背景

  1. EC2、RDS、Redshiftの台数が増えてきて、コストが結構かかる。
  2. Trusted Advisorを見れば、現状の最適化は検討できるが、次いつリザーブドを購入すればいいのか把握したい。(cf. 会社のキャッシュフロー)
  3. 現状のオンデマンド/リザーブドの比率をグラフで一目で確認したい。

特に3.が大きい。
「毎月1回、EC2の画面を見て、1日かけて確認する」
的な運用でカバーはまず論外で

その他、頑張ってやろうとすると
- Cost Visualizerを導入する
https://dev.smt.docomo.ne.jp/?p=common_page&p_name=cost_visualizer
- エクセルとかで、毎日編集する

とかって話になって、それはそれで、コスト・手間がかかる。
ぶっちゃけ、これもだるい。めんどくさい。(笑)

めんどくさいなーめんどくさいなーと
ボソボソ言いながら、ふと

「もうサーバーの傾向監視を
telegraf + influxdb + Grafanaでやってるから
RIもそこに入れて、ダッシュボードにしちゃえ!!!!」

ってことで
取り急ぎ、telegraf + bashでいけそうだったので
telegrafの設定開始(`・ω・´)キリッ

telegrafの設定してみる

とりあえず、confにinput.execを追記。

/etc/telegraf/telegraf.conf

# EC2
[[inputs.exec]]
  command = "/etc/telegraf/telegraf.d/exec/count-instances"
  data_format = "influx"
  interval = "3600s"

[[inputs.exec]]
  command = "/etc/telegraf/telegraf.d/exec/reserved_instance.sh"
  data_format = "influx"
  interval = "3600s"

# RDS
[[inputs.exec]]
  command = "/etc/telegraf/telegraf.d/exec/rds_reserved_nodes.sh"
  data_format = "influx"
  interval = "3600s"

# Redshift
[[inputs.exec]]
  command = "/etc/telegraf/telegraf.d/exec/redshift_reserved_nodes.sh"
  data_format = "influx"
  interval = "3600s"

あとは、bashをちょこちょこ書くだけ。

■ EC2
1.全体(オンデマンドとリザーブド)の数

/etc/telegraf/telegraf.d/exec/count-instances.sh
#!/bin/bash

### check instance status is running
/usr/bin/aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" |
jq -r  '[ .Reservations[] | .Instances[] | { InstanceType } ]| group_by(.InstanceType) | .
[]|.[0] + { "Count": length}| .InstanceType, .Count'|sed 'N;s/\n/ value=/'|sed 's/^/instan
ces,instance_type=/'

2.リザーブドの数

/etc/telegraf/telegraf.d/exec/reserved_instance.sh
#!/bin/bash

/usr/bin/aws ec2 describe-reserved-instances --filters "Name=state,Values=active" | jq -r
'.ReservedInstances[] | [.InstanceType, .AvailabilityZone, (.InstanceCount|tostring), .End
] | join(",")' | sed 's/T.*//g' | awk -F, '{print "reserved_instances,instance_type=" $1 "
,AvailabilityZone=" $2 ",end_date=" $4 " RI_count=" $3}' | sed 's/=,/=-,/g'

■ RDS
・全体(オンデマンドとリザーブド)とリザーブドの数

/etc/telegraf/telegraf.d/exec/rds_reserved_nodes.sh
#!/bin/bash

# count of rds db instaces group by instance_type
/usr/bin/aws rds describe-db-instances --output json | jq -r '[.DBInstances[] | { DBInstan
ceClass }] | group_by(.DBInstanceClass) | .[] | .[0] + { "Count": length } | [.DBInstanceC
lass, (.Count|tostring)] | join(",")' | sed 's/^/rds_db_instances,db_instance_type=/g'| aw
k -F, '{print $1 "," $2 " values=" $3}'

# count of reserved rds db instances group by instance_type
/usr/bin/aws rds describe-reserved-db-instances --output json | jq -r '.ReservedDBInstance
s[] | select(.State == "active") | [.DBInstanceClass, (.DBInstanceCount|tostring), .StartT
ime] | join(",")' | sed -E 's/^(.*T.*)\..*$/\1/g' | awk -F, '{print "rds_reserved_instance
s,db_instance_type=" $1 ",start_time=" $3 " RI_count=" $2}'

■ Redshift(dc1.largeのみ)
・全体(オンデマンドとリザーブド)とリザーブドの数

/etc/telegraf/telegraf.d/exec/redshift_reserved_nodes.sh
#!/bin/bash

# count of redshift nodes
/usr/bin/aws redshift describe-clusters --output json | jq -r '[.Clusters[] | select(.Node
Type == "dc1.large") | .NumberOfNodes] | add' | sed 's/^/redshift_cluster_nodes,node_type=
dc1.large values=/g'

# count of reserved redshift nodes
/usr/bin/aws redshift describe-reserved-nodes --output json | jq -r '.ReservedNodes[] | se
lect(.State == "active") | [.NodeType, (.NodeCount|tostring), .StartTime] | join(",")' | s
ed -E 's/^(.*T.*)\..*$/\1/g' | awk -F, '{print "redshift_reserved_nodes,node_type=" $1 ",s
tart_time=" $3 " RI_count=" $2}'

jq,sed,awkでワンライナーでごり押し。(笑)

もっといい感じにかけるはずだけど
まぁ一旦現状、こんな感じでいけそう。

telegrafの再起動。

/etc/init.d/telegraf restart

InfluxDBの中身確認してみる。
とりあえず、うまくいってそう。

  • EC2

influxdb_instances.png

influxdb_reserved_instances.png

  • RDS

influxdb_rds_instances.png

influxdb_rds_reserved_instances.png

  • Redshift

influxdb_redshift_nodes.png

influxdb_redshift_reserved_nodes.png

Grafanaでダッシュボードつくる

1.各種サービスのリザーブド終了日付を一覧で把握
Grafana_RI_1.png

2.各種サービスのリザーブド数の傾向監視(EC2は、インスタンスタイプ毎)- オンデマンド - リザーブド
Grafana_RI_2.png

お、おう。。。めっちゃコスト削減できそう。。。
とりあえず、私の給料分の何倍かは。。。笑

さいごに

やはり、なんかあったら、Grafanaが一番。笑
特にモニタリングするには。

しかも
Kapatitorとか使えば
AWSサービスとか他のSaaSではできない
詳細なコスト監視も実現できそうなので
本格的に運用する気持ちになったらやってみようと思います!

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5