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

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


やりたいこと


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



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

  • 環境



    • AWS: Ubuntu16.04
    • IAMロールを付与
    • mackerel-agent
    • Python3
    • boto3

  • Mackerel公式サイトのカスタムメトリクスを投稿する場合について




作成したコード ( Python3 )

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


関連

コメント

このブログの人気の投稿

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-04-30 23:37:32 RSSフィード2021-04-30 23:00 分まとめ(42件)

投稿時間:2023-02-05 02:09:04 RSSフィード2023-02-05 02:00 分まとめ(9件)