mistioで監視内容に応じて任意の処理を行ってみる

2016.09.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

mist.ioネタ2連続の市田です。
前回紹介したmist.ioについて、今回はSSHアクセスを許可した場合にできることについて紹介したいと思います。

mist.ioでSSHアクセスでできること

SSH鍵をmist.ioに登録すると、次のことができるようになります。

管理画面上から任意のスクリプト実行

  • サーバにログインせずに実行可能です。
  • スクリプトの内容も管理画面上から入力できます。

監視内容をトリガーにした任意のスクリプト実行

  • 例:CPU80%を超えたら指定プロセスを再起動する、といったことが可能になります。

要するに、管理画面からmist.ioのサーバ経由でSSHによる各種コマンドやスクリプトを実行できるという仕組みです。

SSH鍵の登録

事前準備

SSH鍵はmist.ioのサーバに登録する形となりますが、mist.io側からSSHアクセスできることが確認されないと登録ができません。
その為、事前にmist.ioからのSSHアクセスを許可しておく必要がありますが、そのIPアドレスが不明なためSSHアクセスをSecurityGroupでAnywhereで許可しておく必要があります。

SSH鍵の登録

では管理画面から登録してみます。

mist.io TOP

最初はなにもないので、「NEW KEY」を選択します。

mist.io TOP

「Name」は任意です。「PrivateKey」の部分は直接鍵の内容を貼り付けてもいいですし、「UPLOAD」ボタンでローカルの鍵ファイルをアップロードしても構いません。
ただし、ここで「GENERATE」してもその鍵がサーバに反映される訳ではないので、ここでは「GENERATE」は選択することはないと思います。

mist.io TOP

登録には少し時間がかかります。(30秒くらい)

mist.io TOP

登録が完了すると、登録した鍵が表示されます。

mist.io TOP

SSH鍵が登録されると、「BASIC INFO」の欄にサーバリソースの情報が表示されます。SSHでアクセスできるようになった為と思われます。

mist.io TOP

Webコンソール

SSH鍵を登録すると、管理画面上からサーバにログインすることができるようになります。
先ほどのサーバの詳細画面の下部に「SHELL」という表示がクリックできるようになっています。

Web Console

クリックすると、CLIでSSHログインした状態が再現されます。mist.ioからアクセスしている状態が表示されているようです。

Web Console

画面下の「BACK」をクリックするとログアウトします。

Web Console

監視アクションの追加

mist.ioは監視項目の値によって任意のアクションを実行することができます。
先ほどのグラフ追加の項目の下にある「ADD RULE」を追加します。

no ssh

次のような設定が出てくるので、それぞれの四角になっている箇所を希望に合わせて変更します。

no ssh

「alert」になっている箇所をクリックすると、実行したいアクションを選択できます。
「ALERT」はメール通知です。ここでは「COMMAND」を選択してみます。

action

表示されるポップアップで実行したいコマンドを入力します。

AddCommand

下記の内容のルールだと「5分以内のRAMの値が20%を超えたら、apacheを再起動」という内容になります。

AddRule

登録が完了すると画面下部にある「ACTIVITY LOG」という箇所に「request」というカテゴリのログが現れます。
これは、先ほど設定したルールが登録されたことを示しています。

リクエスト

しばらくすると、監視トリガーが発動して指定のコマンドが実行されたログが表示されます。

リクエスト

実際、サーバ上で下記のようにapacheが停止していることが確認できればOKです。

$ sudo systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd(8)
           man:apachectl(8)

カスタムルールの繰り返し実行

前回のメール通知の場合と同様、手元で確認した限りでは、登録したscriptが一度実行されると、次の監視タイミングが来てもスクリプトは再実行されませんでした。

例えばメモリ使用率を5分毎に監視して、80%を超えたら指定のコマンドを実行する設定の場合、一度実行すると次の5分が経過してもスクリプトは実行されません。
再度保存し直すと、このルールが再びアクティブになりました。

独自スクリプトの実行

ダッシュボードから任意のスクリプトを実行可能です。 先ほどのブラウザ上のシェルではなく、予め登録しておいたスクリプトを実行できます。

管理画面のトップページから登録していきます。

スクリプト実行

「ADD SCRIPT」をクリックします。

スクリプト実行

Typeには、「Ansible Playbook」「Executable」が選択できます。 Sourceには、「Github」「URL」「Inline」が選択できます。

スクリプト実行

今回は、Typeに「Executable」、Sourceに「Inline」を選択しました。 実行するスクリプトは下記の通りで、動作確認しやすいものにしました。

#!/bin/bash
echo "hello world" | logger -t TestScript

登録が完了したら対象インスタンスの画面で「ACTIONS」をクリックします。

スクリプト実行

ここで先ほど登録したスクリプトを実行する為「RUN SCRIPT」を選択します。 前回のSSH鍵を登録しない場合には出てこなかった項目です。

スクリプト実行

「Script」プルダウンから先ほど登録した「TestScript」を選択します。 スクリプトの内容によってはパラメータを指定することも可能です。

スクリプト実行

この状態で「RUN」をクリックして実行すると、画面上に下記のようなポップアップが出ます。

スクリプト実行

また、サーバ側のログにスクリプトの実行結果が出ていればOKです。

$ journalctl -f

Sep 05 11:36:15 ip-172-31-24-194.ap-northeast-1.compute.internal TestScript[7010]: hello world

インスタンス作成

管理画面からはEC2インスタンスを新規に作成することも可能です。
先ほどのインスタンス一覧の画面左側にある「CREATE MACHINE」をクリックします。

EC2追加1

次のようにNameタグやAMI、インスタンスタイプなどを指定して「LAUNCH」をクリックします。
これで実際にEC2インスタンスが作成できます。

EC2追加2

インスタンス作成時の注意点

私がまだ見つけられていないだけかも知れませんが、先ほどのプルダウンにはセキュリティグループの設定がありませんでした。
実際にmist.ioから作成した後でセキュリティグループを見てみると「mistio」というグループが作成されていましたが、ポリシー内容は以下の通りでした。

全てのアクセスが全てAnywhereアクセス可能な状態です。 後で修正するようにしないと、さすがにこれは使えません。。

EC2追加3

最後に

SSH鍵を登録するだけでできることがぐっと増えました。 しかしSSH鍵を外部サービスに登録するのは抵抗を感じる方も多いのではないでしょうか?

ここはやはりオープンソース版のバージョンアップに期待したいところですね。 オープンソース版でも同様のことができるようになったら、またご紹介したいと思います。

以上です。