jmxで取得したメトリクスからグラフを描画

jmxで取得したメトリクスからHDFSの使用量をグラフ化してみました。

jmxでメトリクス取得

Hadoopはブラウザでhttp://xxxxx/jmxにアクセスするとメトリクスを取得できます。

HDFSの使用量を取得したいのでNameNodeのメトリクスを取得します。
https://NameNode:50070/jmxにアクセスします。
下記のようにJSON形式で値が取得出来ます。

f:id:kashigeru:20140717220137j:plain

今回使用するデータは{beans}[20]{CapacityUsedGB}です。
取得した値はCapacityUsedGB: 2になります。

Pythonjmxメトリクス取得

まずはブラウザではなくPythonで取得するようにします。
hdfs.pyという名前で下記スクリプトを作ります。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import json
import urllib2

url = 'http://NameNode:50070/jmx'

r = urllib2.urlopen(url)
rr = json.loads(r.read())
endata = json.dumps(rr)

print "Content-type: text/json"
print
print endata

GoogleChartsでグラフ描画

今回はGoogle ChartsのGauge を使ってグラフを描画します。
サンプルコードが記載されているのですが、今回はこちらを参考にしました。

36行目から39行目の箇所を自分で作成したhdfs.pyに変更しました。

 $.getJSON(('/hdfs.py', function(endata) {            
            p = endata["beans"]["20"].CapacityUsedGB;

55行目から71行目までのoptionを自分の環境に合わせて変更します。

options = {
            width: 175,
            height: 175,

            redFrom: 30000,
            redTo: 32997,

            yellowFrom: 27000,
            yellowTo: 30000,

            greenFrom: 0,
            greenTo: 27000,

            minorTicks: 10,

            min: 0,
            max: 32997,

ちなみにMaxの値もjmxから取得できます。
取得した値はCapacityTotalGB: 32997になります。

変更が完了したらブラウザからアクセスしてみます。

f:id:kashigeru:20140717222655j:plain

32TB中2GBしか使用してないグラフ描画が出来ました。
他にもjmxで色々な値が取得出来るので自分なりのグラフを作ってもるのもありですね。
今回WebサーバにApacheを使用したのでApachePythonが動くようにしておく必要があります。
(ノ´▽`)ノ{+++THANK YOU+++}ヽ(´▽`ヽ)

Hadoop徹底入門 第2版 オープンソース分散処理環境の構築

Hadoop徹底入門 第2版 オープンソース分散処理環境の構築