sangoとmqttcliでMQTTを使うMicroServiceを作る¶
MicroServiceが微妙にバズりつつあるところですが、ここで sango と mqttcli でMQTTを使ったMicroServiceを作ってみましょう。
(注意1: MicroService の定義はよく 知りません)
(注意2: mqttcliはわりとやっつけなところも多いので、問題がおきても広 い心で見てください)
準備¶
事前にちょっとした準備が必要です。
1. sangoアカウントを作成¶
まずは sango からアカウントを作成しま す。GitHubアカウントがあればすぐに作成できます。
ダッシュボードを開くと、
接続先 : mqtt://<MQTTサーバーのアドレス>:1883
アクセス先トピック: shirou@github/#
ユーザー名: shirou@github
パスワード: ひみつ <-- クリックすると表示されます
という箇所がありますので、これらを覚えておきます。
2. mqttcliをダウンロード¶
https://github.com/shirou/mqttcli から辿れる drone.io に各種アーキテク チャ用のバイナリが置いてありますので、ダウンロードします。
必要に応じて chmod ugo+x
などで実行権限を付けてください。
3. 設定ファイルを記載¶
~/.mqttcli.cfg
を作成し、以下の内容を記載します。
{
"host": "mqtt.shiguredo.jp", <--- MQTTサーバーのアドレス
"username": "shirou@github", <--- ユーザー名
"password": "<パスワード>"
}
以上で終わりです。接続テストしてみましょう。
4. 接続テスト¶
mqttcli sub -t "shirou@github/#" -d
と打って、
INFO[0000] Broker URI: tcp://mqtt.shiguredo.jp:1883
INFO[0000] Connecting...
INFO[0000] Connected
INFO[0000] Topic: shirou@github/#
と出てくればOKです。
MircoServiceをつくろう¶
では、MicroServiceを作ってみましょう。
$ tail -f /var/nginx/access.log | mqttcli pub -t "shirou@github/nginx/log" -s
これで nginxのログを"shirou@github/nginx/log"というトピックに送る MicroServiceの出来上がりです。
別端末で以下のように入力してください。nginxのログはLTSVで記載しています。その他の人は適宜変えてください
$ mqttcli sub -t "shirou@github/nginx/log" | \
grep "status:500" --line-buffered | \
mqttcli pub -t "shirou@github/nginx/log/500" -s
はい、これで statusが500のリクエストだけを"shirou@github/nginx/log/500"に送る
MicroServiceが出来上がりました。( --line-bufferd
を付けないとバッファされてすぐには分かりません)
あとはお好きなように。例えば、ファイルに書き出してもいいですね。
$ mqttcli sub -t "shirou@github/nginx/log/500" > /var/log/error.log
もちろんこれらはすべて同じホストで実行しても構いませんし、別のホストでも構いません。
さらに¶
現在sangoではコネクションを6つまでしか張れません。しかし、今後予定して いる有料版ではもっと多くのコネクションが可能です(現在の予定は50本)。
そうすると、
400だけじゃなくて他のステータスコードも扱う
複数のサーバーのログを同じtopicに送ってまとめる
ファイルに書き出すだけではなく、メールしたりslackに送ったりする
などというMicroServiceを作成できます。トピックも nginx/log/4/400
と nginx/log/4/400
というように別々に送っておき、
nginx/log/4/#
をsubscribeしてまとめる、なども出来ます。
これらのMicroServiceを topic とtopicに対する Pub/Sub 、そして #
と +
をいろいろな
形に組み合わせると、より多くなことが出来るのではないでしょうか。
まとめ¶
今回はsangoとmqttcliを使って
nginxのログを送る
ステータスが500のリクエストだけを取り出して送り直す
受け取ってファイルに書き出す
という3つのMicroServiceを作りました。
標準入力と出力なのでいろいろな応用が効きますね。ホストを分けてもちろん 問題ありません。しかも軽量なMQTTでレスポンスは非常に速いです。
ぜひsangoを使っていろいろなことを試してみてください!
余談¶
こうしてみると、MQTTはstreaming処理と相性がいいように見えてきますね。 spark streaming とか?
Comments
comments powered by Disqus