Machinist でメトリクスを管理する

2018年12月03日 月曜日


【この記事を書いた人】
猪俣 亮

食べることが大好きなダイエット中プログラマ。 本業はバックエンド開発だが、ここ最近はフロントエンド開発にもどっぷり浸かっている。

「Machinist でメトリクスを管理する」のイメージ

IIJ 2018 TECHアドベントカレンダー 12/3(月)の記事です】

IoTキット等が普及しつつあり、多様なセンサーデータの収集が簡単に行えるようになってきましたが、
そのデータをどのように管理するのかお困りではないでしょうか。

Machinist(マシニスト) はそうした身の回りのメトリクスを収集・整理・活用することをミッションとして掲げ、
ベータ版(無料)を先日リリースしました。

公式サイト: https://machinist.iij.jp/

Machinist にデータを送信する

APIキー発行後、以下のような curl  コマンドですぐに送信できます。
データを送信する際にメタ情報を設定することができるようになっており、メトリック名のほか、データ送信元を示すエージェント名、ネームスペース、タグなどを付与することができます。

curl -X POST \
 -H 'Content-Type: application/json' \
 -H 'Authorization: Bearer YOUR_API_KEY' \
 'https://gw.machinist.iij.jp/endpoint' -d @- << EOS
 {
   "agent": "The Machine",
   "metrics": [
     {
       "namespace": "environment_sensor",
       "name":      "temperature",
       "tags":      {
         "location": "3F"
       },
       "data_point": {
         "value": 27,
         "timestamp": 1543762800
       }
     }
   ]
 }
EOS

今回は例として温度と湿度(値はランダム)の複数メトリックを送るため、以下のような Bash スクリプトを書いてみました。
データ収集機器が複数フロアに分かれていることを想定して、タグをフロアごとに振り分けています。

#!/usr/bin/bash

function create_temperature_metric() {
  cat <<EOS
  {
    "name":      "temperature",
    "namespace": "sensors",
    "tags": {
    "location": "tokyo",
      "floor": "$1"
    },
    "data_point": {
      "value": $2
    }
  }
EOS
}

function create_humidity_metric() {
  cat <<EOS
  {
    "name":      "humidity",
    "namespace": "sensors",
    "tags": {
    "location": "tokyo",
      "floor": "$1"
    },
    "data_point": {
      "value": $2
    }
  }
EOS
}

function generate_random_value() {
  echo $(( $(od -A n -N 4 -t u4 /dev/urandom) % 100 ))
}

function create_metrics() {
  echo $(create_temperature_metric $1 $(generate_random_value)),
  echo $(create_humidity_metric $1 $(generate_random_value))
}

API_KEY=$1
test -z "$API_KEY" && echo "API key was not set" 1>&2 && exit 1

AGENT=$2
test -z "$AGENT" && echo "Agent was not set" 1>&2 && exit 1

while :
do
  json=$(cat <<EOS
    {
      "agent": "${AGENT}",
      "metrics": [
        $(create_metrics 1F),
        $(create_metrics 2F),
        $(create_metrics 3F),
        $(create_metrics 4F)
      ]
    }
EOS
  )

  curl -x "" -X POST -H "Content-Type: application/json" -H "Authorization: Bearer ${API_KEY}" -d "${json}" "https://gw.machinist.iij.jp/endpoint"
  echo ""

  sleep 60
done

スクリプトを実行します (引数にはAPIキーと任意のエージェント名を指定します)

$ bash machinist-sample.bash your_api_key sample_agent

スクリプトをしばらく動かした後、Machinist の画面を確認すると以下のように自動で可視化が行われています。

収集したメトリクスを探す場合、上部のフィルタボタンで絞り込むことができます。
下の画像は3Fのタグが付いたメトリックのみを絞り込んだ例です。

これらのフィルタを組み合わせて段階的に絞り込んでいくことも可能です。
こういった多次元でのフィルタリングによって、目当てのメトリックをすぐに探し出せることも Machinist の強みの一つです。

カスタムチャートの作成

Machinist では関連するメトリックを重ねて表示させることも可能です。
メトリック一覧画面の右上にある、「カスタムチャートを作成する」ボタンから作成可能です。

一度作成したものはカスタムチャート管理画面でいつでも確認できます。

さらに、Machinist では気になるチャートだけを一画面に集めたダッシュボードが作成可能です。

ダッシュボードの作成

ダッシュボードページの上部にある「+」ボタンでオリジナルのダッシュボードを作成できます。
作成したダッシュボード内では個別のメトリックやカスタムチャートを画面内の好きな場所へ配置し、一画面で見渡せるようになっています。

ダッシュボードは複数作成でき、用途毎に切り替えることができます。
この機能を使って自分だけのモニタリング環境を構築してみてください。

最後に

データ送信方法や可視化まわりの機能を紹介しましたが、Machinist が備える機能はこれだけではありません。
無料のベータ版にサインアップしていろいろと試していただけると幸いです。

また、12月14日に開催予定の IIJ Technical NIGHT vol.6 で Machinist の紹介を行う予定です。
会場にて利用上限を引き上げるクーポンも配布予定ですので、この記事を読んで気になった方は是非お越しください。

猪俣 亮

2018年12月03日 月曜日

食べることが大好きなダイエット中プログラマ。 本業はバックエンド開発だが、ここ最近はフロントエンド開発にもどっぷり浸かっている。

Related
関連記事