Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@yhidetoshi

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で書いて、カスタムメトリクスをグラフ化することにも取り組みたいと思います。

関連

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?