My Note

自己理解のためのブログ

MackerelにPython3とboto3を使ってagent経由でカスタムメトリクスをPostしてグラフ化する

やりたいこと

  • mackerel-agentを利用して、Mackerelのダッシュボードに独自 ( カスタム )メトリクスを投稿してグラフ描画する。

    • awsアカウントのEC2インスタンスの起動中・停止中の台数をグラフ化してみる。
  • 環境

    • Ubuntu16.04
      • IAMロールを付与
      • mackerel-agent
      • Python3
      • boto3
  • 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'

結果

f:id:yhidetoshi:20190617221128p:plain
mackerel-custom-python

まとめ

mackerel-agent経由で、pythonでMackerelのダッシュボードに独自のメトリクスを投稿して描画することができた。 これで可視化・監視したいデータをMackerelに投稿して、可視化や監視をすることができる。 mackerelのプラグインをGoで書いて、カスタムメトリクスをグラフ化することにも取り組みたいと思います。