見出し画像

サーバー監視システムを電子工作した話 その1

こんにちは!

先日、Arduinoという汎用マイコンを使ってサーバーの監視装置を作ってみたので、今回はそのことについて書いていきます! 全体的にちょっと長くなりそうなので、おそらく3分割くらいになるかなぁと思うので、続きは気長にお待ちいただければと思います。


サーバーの監視システム

冒頭にも書いたとおり、今回作るのはサーバーの監視システムです。これまでの記事で紹介してきたように、現在のサーバーマシンにはSamba(ファイル共有)、Apache(WEBサーバー)、x11vnc(リモートデスクトップ)などの色々なサーバーソフトを動かしているわけですが、外からだとそれらがきちんと動いているのかどうかがわかりにくいという問題がありました。

このサーバーマシンは通常時はモニターに繋いでいませんし、マウスやキーボードも接続していません。なので、中の動作を確認するにはモニター等を接続するか、sshやリモートデスクトップで侵入するかしなければならず、これが地味に面倒なんですよね。

ということで今回、外から見てもサーバーの各ソフトが正常に動いているかどうかを調べるためのシステムを作ることにしました。動作自体は非常にシンプルで、各ソフトの動作状態を示すランプ(LED)を設置して、なにか異常があればそのランプが光ってエラーを教えてくれると言うものです。気がついたらPCがシャットダウンしていたり、ソフトが落ちていたりするので、それがLEDランプでパッと確認できるようになると便利だなーと思ったわけです。

あとは、以前クリス・アンダーソンという方の「Makers」という本を読んだ時に「Arduino」という汎用マイコンについて知ったので、それを使ってみたかったという側面もありますね。まだまだ上手く使えているという感じではありませんが、まあこういうのは「とりあえず使ってみる」のが大事だと思うので、よしとしましょうw とりあえず思いたったものから実装することで勉強にもなるでしょうしね。

今回のその1では、この「Arduino」の紹介とシステムの全体像を解説したいと思います。


オープンソースマイコン・Arduino

今回利用した「Arduino(アルデュイーノ)」とは、誰でも手軽に使えることを重視したオープンソースの汎用マイコンです。そもそも「マイコン」という言葉自体にあまり聞き慣れない人が多いかも知れませんが、気軽に外部とのやりとりが出来るコンピューターと考えていただくとわかりやすいかも知れません。一般に「コンピューター」という言葉から連想されるPCなどは、入力としては「キーボード」と「マウス」、出力としては「ディスプレイ」のみであることが一般的ですが、「マイコン」と呼ばれるコンピューターは少し勝手が違います。

詳しい話をするととても長くなるので割愛しますが、ようするに電子機器の制御に特価したタイプのコンピュータと考えていいと思います。センサーからの入力を受け取って、なにかしらの出力(モーターを動かしたりLEDを光らせたり)をするようなコンピューターですね。詳細は下記のwikipediaの記事が詳しいので、興味のあるかたはそちらをご覧ください。

このマイコンは安価で色々な制御ができる便利なものなのですが、個別機能に最適化されている関係で、なかなか専門家以外にとっては扱いにくいのが難点です。実際に、僕自身も電気電子が専門ではないこともあって、これらのマイコンを使うのはちょっとハードルが高いと感じます。

その課題を解決してくれるのが、今回利用した「Arduino」。c言語をベースとしたシンプルなプログラミング環境と各種部品のパッケージ化によって、電気についての中学生レベルの知識とプログラミングの基礎知識さえあれば、誰でもが扱えるという特徴を持ったマイコンです。このArduinoの登場によって電気電子の専門家でなくともアイデアを手軽にプロトタイピングできるようになったり、デザインの専門の人がテクノロジーを駆使することで新たな表現ができるようになったりしたようです。こちらも詳しくはWikipediaの記事をどうぞ。

このArduinoの面白いところは、その構成がオープンソース化されていることです。Arduinoの正規の組織が提供している公式ボードももちろんあるのですが、(主に中国製の)安価なコピー品や一部を改良した製品も大量に出回っています(Amazonなんかで検索すると色々見つかります)。

当然それらは違法コピーというわけではなく、ガイドラインにさえ従っていれば法律上の問題は特にありません。オープンソースというとプログラム等のソフトウェアに適用されるものだと思っていましたが、この「Arduino」はオープンソース「ハードウェア」を自称しているらしく、こんな世界もあるのかと驚かされました。まさに、メイカーズの精神の体現って感じですね。すでにこのArduinoを使って色々と電子工作をしたりしていますが、公式版は導入で一度買ったのみで、それ以外はだいたい中国製の類似品を使っていたりしますw

実際に購入して動かしてい見た時の写真がこちら。これはArduino Unoという最もスタンダードなタイプのArduinoで、USB経由でパソコンからLEDを光らせるプログラムを書き込んでいます。いわゆる「Lチカ(LEDをチカチカさせるの略らしい)」という非常に単純なものですが、自分で書いたプログラムで実世界のものを動かすというのはなかなかロマンがあると感じますねw

画像1


システムの仕様

ということで、今回はこのAruduinoを使ってサーバーの異常検出システムを作ります。個人的にほしいと思う機能は…

- 異常検出システム自体が動いているかどうかをLEDの点灯で示す

- 監視する具体的なソフトは「ssh(リモートシェル)」、「x11vnc(リモートデスクトップ)」、「softetherVPN(vpnサーバー)」、「apache(ウェブサーバー)」、「samba(ファイル共有サーバー)」、の5つ

- 各ソフトに一つずつLEDを割り当て、止まっていたらLEDを点灯させる

こんな感じですね。まあ、冒頭に書いたとおり、システムとしては極めてシンプルです。RGB LED(色を制御できるタイプのLED)を使ってソフトごとに色を割り当てると言う手もあるのですが、色とソフトの対応を覚えるのが面倒くさいのでやめましたw 色で判断させるほうがLEDの数が減るのでハードウェア的には楽になるのですけどね(ソフトウェア的には多分ちょっと複雑になります)。

データの流れとしてはこんな感じ。サーバー内の各ソフトの稼働状況をチェックして、その情報をシリアル通信でArduinoに転送、Arduinoがその情報を元にLEDを光らせると言った形ですね。ちなみにこの図にあるSystemDとは、Linuxのプロセス監視を行っているプロセスのことで、サーバーの状況を確認するためにこのSystemDにアクセスするというわけです。

画像2

具体的に使うソフトウェア(プログラミング言語)やハードウェアについては、その2以降で書くつもりです。現時点ではその2はソフトウェア編、その3がハードウェア編と言う形でまとめる予定です。需要は無いとは思いますが、実際のソースコードについても公開する予定なので、興味のある方は引き続き読んでいただければと思います。


まとめ

今回はサーバー監視システムの構築に関して、オープンソースの汎用マイコンであるArduinoの紹介と、システム全体の構成について書きました。今回は全体の構想の話なので、実際のプログラミングや電子工作についてはあまり触れていませんが、そのあたりは次回以降書いていければなと思います。

それでは、また!


>2020/10/3 追記。続きはこちらです↓


この記事が気に入ったらサポートをしてみませんか?