やりたいこと
-
mackerel-agentを利用して、Mackerelのダッシュボードに独自 ( カスタム )メトリクスを投稿してグラフ描画する。
- awsアカウントのEC2インスタンスの起動中・停止中の台数をグラフ化してみる。
-
環境
- AWS: Ubuntu16.04
- IAMロールを付与
- mackerel-agent
- Python3
- boto3
- AWS: Ubuntu16.04
-
Mackerel公式サイトのカスタムメトリクスを投稿する場合について
作成したコード ( Python3 )
-
GitHub
-
ubuntuサーバに以下のパスに配置
/usr/local/yhidetoshi/get_instance_num.py
#!/usr/local/bin/python3
import boto3
import os
import time
ec2 = boto3.client('ec2', region_name='ap-northeast-1')
def get_ec2_running_nums():
ec2_response_running = ec2.describe_instances(Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])
ec2_instances_running = len(ec2_response_running['Reservations'])
return ec2_instances_running
def get_ec2_stopped_nums():
ec2_response_stopped = ec2.describe_instances(Filters=[{'Name': 'instance-state-name', 'Values': ['stopped']}])
ec2_instances_stopped = len(ec2_response_stopped['Reservations'])
return ec2_instances_stopped
def mkr_prepare():
if (os.environ.get('MACKEREL_AGENT_PLUGIN_META') == '1'):
metrics = [
{
'name':'running',
'label':'running'
},
{
'name':'stopped',
'label':'stopped'
}
]
meta['graphs']['instance.num'] = {
'label': 'instances',
'unit': 'integer',
'metrics': metrics
}
print(json.dumps(meta))
sys.exit(0)
if __name__ == '__main__':
mkr_prepare()
print('\t'.join(['instance.num.running', str(get_ec2_running_nums()), str(time.time())]))
print('\t'.join(['instance.num.stopped', str(get_ec2_stopped_nums()), str(time.time())]))
mackerel-agentの設定
/etc/mackerel-agent/mackerel-agent.conf
apikey = "XXXXXXXXXXX"
include = "/etc/mackerel-agent/*"
/etc/mackerel-agent/get_instance_num
[plugin.metrics.ec2num]
command = 'python3 /usr/local/yhidetoshi/get_instance_num.py'
結果
- 起動中のインスタンス数が1, 停止中のインスタンス数が0というグラフを作成することができた。
まとめ
pythonで書いたスクリプトを使いmackerel-agent経由で、Mackerelのダッシュボードに独自のメトリクスを投稿して描画することができた。これで可視化・監視したいデータをMackerelに投稿することができる。
MackerelのプラグインをGoで書いて、カスタムメトリクスをグラフ化することにも取り組みたいと思います。
関連
- GoでAWSのBilling情報をグラフ化するmackerel-pluginを作った