[Grafana] Grafanaで、AWSのリザーブドインスタンス(RI)を監視してみた。
こんにちは。
最近開発にも手を出し始めた元インフラのjkkitakita。
とりあえず
何か書きたい衝動に駆られたので
ちょっと前に、遊び感覚でやっていたことをつらつらと。
はじめに
ざっくりでも以下の知識があるとよいかも。
- リザーブドインスタンス
- Grafana + Influxdb
- telegrafのExec Input Pluginについて
各種サービスのバージョン
- Telegraf - Version 0.10.3
- InfluxDB shell 0.10.3
- Grafana v 2.6.0
背景
- EC2、RDS、Redshiftの台数が増えてきて、コストが結構かかる。
- Trusted Advisorを見れば、現状の最適化は検討できるが、次いつリザーブドを購入すればいいのか把握したい。(cf. 会社のキャッシュフロー)
- 現状のオンデマンド/リザーブドの比率をグラフで一目で確認したい。
特に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を追記。
# 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.全体(オンデマンドとリザーブド)の数
#!/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.リザーブドの数
#!/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
・全体(オンデマンドとリザーブド)とリザーブドの数
#!/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のみ)
・全体(オンデマンドとリザーブド)とリザーブドの数
#!/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
- RDS
- Redshift
Grafanaでダッシュボードつくる
2.各種サービスのリザーブド数の傾向監視(EC2は、インスタンスタイプ毎)- オンデマンド - リザーブド
お、おう。。。めっちゃコスト削減できそう。。。
とりあえず、私の給料分の何倍かは。。。笑
さいごに
やはり、なんかあったら、Grafanaが一番。笑
特にモニタリングするには。
しかも
Kapatitorとか使えば
AWSサービスとか他のSaaSではできない
詳細なコスト監視も実現できそうなので
本格的に運用する気持ちになったらやってみようと思います!
Author And Source
この問題について([Grafana] Grafanaで、AWSのリザーブドインスタンス(RI)を監視してみた。), 我々は、より多くの情報をここで見つけました https://qiita.com/jkkitakita/items/6155ff7899eb9d701611著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .