MackerelにPython3とboto3を使ってagent経由でカスタムメトリクスをPostしてグラフ化する
やりたいこと
mackerel-agentを利用して、Mackerelのダッシュボードに独自 ( カスタム )メトリクスを投稿してグラフ描画する。
環境
- Ubuntu16.04
- IAMロールを付与
- mackerel-agent
- Python3
- boto3
- Ubuntu16.04
Mackerel公式サイトのカスタムメトリクスを投稿する場合について
作成したコード ( Python3 )
- /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 = "XXXXXXXXXXXXXXXXXXXXX" include = "/etc/mackerel-agent/*"
/etc/mackerel-agent/get_instance_num
[plugin.metrics.ec2num]
command = 'python3 /usr/local/yhidetoshi/get_instance_num.py'
結果
まとめ
mackerel-agent経由で、pythonでMackerelのダッシュボードに独自のメトリクスを投稿して描画することができた。 これで可視化・監視したいデータをMackerelに投稿して、可視化や監視をすることができる。 mackerelのプラグインをGoで書いて、カスタムメトリクスをグラフ化することにも取り組みたいと思います。