IIJ Machinist ことはじめ


IIJ Machinist とはなにか

IIJ が提供している、データを可視化するダッシュボードサービスです。

https://machinist.iij.jp/

10メトリック、1ヶ月だけ保存する条件ならフリーで、もっとメトリックを増やしたり、保存期間を伸ばしたいなら費用を支払うという仕組みのようです。
メトリックというのは、あるセンサーなどで計測した数値の集合(キッチンにある温度計の温度、とか)です。
メトリックの送信は HTTPS リクエストを送るだけなのでとても楽そう。ということで試してみました。

基本的にはここの. Getting Started のままで、これを Python コードにしたものです

https://machinist.iij.jp/getting-started/

Python でデータを送ってみる

アカウント作成と API キーの作成

IIJ Machinist のページにログインして、 https://machinist.iij.jp/ アカウントを作成します。

ログインした後、画面右上の「アカウント設定」を表示すると、 API キーが表示されます。
(この API キーは秘密情報なので 他の人と共有しないでください

送信プログラムの作成

こういうクラスを定義すると、api_key と エージェント名を設定して、 send で送信できるようになります。

class Machinist:
    def __init__(self, api_key, agent:str):
        self.api_key = api_key
        self.agent = agent
        
        self.url = "https://gw.machinist.iij.jp/endpoint"
        self.headers = {
            "Content-Type": "application/json",
            "Authorization": f"Bearer {api_key}",
        }
    def send(self, metrics: list):
        ret = requests.post(url, 
            json={
              "agent": self.agent,
              "metrics": metrics
            },
            headers=self.headers
        )
        assert ret.status_code == 200, ret.text

こんなふうにデータを送れます。
この場合、 グループ名 Environment Sensor、 メトリック名 temperature という計測データに対して、 27.6 + ランダムな値を送信しているということになります。

import random
machinist = Machinist("YOUR_API_KEY", "Home")
machinist.send([
    {
        "name": "temperature",
        "namespace": "Environment Sensor",
        "data_point": {"value": 27.6 + random.uniform(-5, 5)}
    }
])

何回か実行すると、こんな風に自動的にグラフがアップデートされていきます。温度の変動みたいですね。

グラフ表示以外の使い方:監視とアクション

データをグラフで表示して見るというのもいいですが、他にも使い方があるようです。

監視

監視というのは、特定のメトリックが特定の条件を満たしたかをチェックしてくれる機能です。

アクション

アクションというのは、 IIJ Machinist が何らかの外部への通信をする機能です。
今のところは、 Microsoft Teams と Slack の Webhook への送信か、メールの送信ができるようです。

監視とアクションを組み合わせる

監視とアクションを組み合わせると、「ある条件を満たしたら自動的に何らかのアクションを行う」ということができます。

「過去5分間の平均気温が30℃を超えたら、自分にメールを送る」という部屋の管理とか
「笑顔度合いが過去5分間十分低かったら、Slack で上司に報告する」という邪悪な応用とか
ができそうです。