search
LoginSignup
1

More than 3 years have passed since last update.

posted at

updated at

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

やりたいこと

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

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

    • AWS: 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 = "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というグラフを作成することができた。

mackerel-custommetrics-instance.png

まとめ

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

関連

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
What you can do with signing up
1