Masteries

技術的なことや仕事に関することを書いていきます.

EdgeRouter Xでmackerel-agentを動かす

この記事は, 「Mackerel Advent Calendar 2017」の17日目の記事です.

qiita.com

EdgeRouter Xでmackrel-agentを動かす

EdgeRouter Xは, ネットワーク機器ベンチャーUbiquiti Networksというところが開発しているルータ製品の1つです. 安価な割にいろいろ遊ぶことができて, 秋あたりからいろいろと設定して遊んでいます. ちなみに最近はAmazonでも買えるようになったみたいです.

Ubiquiti Networks Edgerouter ER-X(日本国内)

Ubiquiti Networks Edgerouter ER-X(日本国内)

EdgeRouter Xの上にはMIPSが乗っており, すなわちMIPS向けにビルドすればEdgeRouter Xでもmackerel-agentが動く...! という情報を, 同僚の id:astj さんから伺ったので, 実際にやってみたというのがこの記事の内容です.

astj.hatenablog.com

この記事で紹介した方法を使えば, (Go言語が対応している)任意のアーキテクチャでmackerel-agentを動かすことができそうです.

mackerel-agentをビルドする

mackerel-agentをビルドするには, リポジトリをcloneした後,

$ make build

すればOKです. 今回の場合, EdgeRouter XのためにMIPS(正確にはリトルエンディアンのMIPS)でビルドしたいので,

$ GOOS=linux GOARCH=mipsle make build 

このようにしましょう. すると, buildディレクトリ下にmackerel-agentが生成されますので, scpなどを利用して, EdgeRouter Xに持っていきます.

後は, EdgeRouter X側で,

$ sudo su -
# mv /path/to/mackerel-agent /usr/bin/mackerel-agent

のようにして, /usr/bin/mackerel-agentに配置しましょう.

設定ファイルの設置

mackerel-agentの設定ファイル, mackerel-agent.confも設置しなければなりません.

# mkdir /etc/mackerel-agent/

のように, ディレクトリを用意して,

# vi /etc/mackerel-agent/mackerel-agent.conf

で, APIキーなどを書き込みましょう.

自動起動の設定

これで, /usr/bin/mackerel-agentで, mackerel-agentが起動するようになりました. 次は, EdgeRouter Xを再起動した際, 自動的にmackerel-agentが起動するようにしてみましょう.

いろいろと方法はありますが, 今回は起動時に/etc/rc.localが実行されることを利用して, ここでmackerel-agentを起動する方法を取ります.

# vi /etc/rc.local

でファイルを開き,

/usr/local/bin/mackerel-agent supervise  >> /var/log/mackerel-agent.log 2>&1 &

のように, mackerel-agentがバックグラウンドで実行されるように設定します.

これで, 何らかの事情でEdgeRouter Xがシャットダウンしても, mackrel-agentが自動的に起動するようになりました.

Mackerelから見たEdgeRouter X

f:id:papix:20171112230013p:plain

こういう感じで, 普通に各種パラメータが取得できます. 途中一部データが途切れているのは, EdgeRouter Xを再起動したときにmackerel-agentが再起動することを確認したときの様子です.

EdgeRouter Xでプラグインも動かす

Goで実装されたプラグインであれば, ここまで紹介してきた方法を使い, GOOS=linuxかつGOARCH=mipsleとしてビルドすれば, EdgeRouter Xで動かすことができます.

papix.hatenablog.com

実は, 先日こちらの記事で紹介したMackerelのnasne用プラグインも, Goで実装されていたので, ビルドしてEdgeRouter Xの上で動かしたりしています...!

EdgeRouter Xであれば, 意外とPerlも5.14.2が使えるようになっているので, コアモジュール縛りをすればPerlでプラグインを書いて... ということもできそうです.

まとめ

EdgeRouter Xでmackerel-agentを動かす方法を紹介しました. mackerel-agentはGo言語で実装されているので, こういった時に適切なアーキテクチャでビルドすれば, シュッと動かすことができて便利ですね!

Mackerelは, 無料プランでも5ホストまで監視することが出来るので, EdgeRouter Xを使っている方は是非Mackerelを使った監視にもチャレンジしてみて下さい.

「Real World HTTP」読んだ

id:Songmu さんもイチオシの, 「Real World HTTP」を読みました. だいぶ前に買っていたのだけれど, 積んでいて, 最近ちまちま読み進めていたという感じです.

Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術

Real World HTTP ―歴史とコードに学ぶインターネットとウェブ技術

ちょうど同僚の id:hakobe932 さんも最近読まれていたようでした:

hakobe932.hatenablog.com

感想

もはやHTTPは「あって当然」の技術になっていて, 日常の中でまさに「息をするように」使っている技術と言えると思います. ただ, ライブラリやブラウザ等が「よしなに」やってくれる部分が非常に多いので, 基本的な知識がなくてもやっていける部分は非常に大きいですし, 自分自身振り返ってみて, あまりしっかりと把握出来ていない部分が多いなー, と思っていました.

「Real World HTTP」は, HTTPとその周辺技術について, Go言語を題材にしながら, 歴史に沿いつつ, 丁寧に紹介されていて, そういう悩みを持っている人の入り口にはとても良い本だと思いました. 最近だとHTTP2が熱くなってきているけれど, そういった新しいテーマもちゃんと盛り込まれていて, 新しい技術によるワクワク感とか, HTTPという技術が進歩していく中で生まれた課題を, どのように解決していったのかとか, そういうのが垣間見えて面白かったです.

HTTPとその周辺技術の歴史や概要を, サッと一通り抑えることができるので, 「Webサービスを作れるようになったけれど, その裏側でどういうことが起きているのか気になってきた」という学生さんはとても興味深く読み進めることが出来ると思いますし, 職業エンジニアも1冊買って置いておけば, HTTPについて疑問が浮かんだ時にまずはさっくり調べてみる, という感じで辞書的な用途にもなりそうです.

Primus 機能追加のご紹介

この記事は, 「OSS紹介 Advent Calendar 2017」の9日目の記事です.

qiita.com

空いていたので, 「よし書くか!」と思って勢い良く登録したものの, 良いネタが思い浮かばなかったので, 今回は拙作OSSの機能追加情報を紹介をしたいと思います.

Primus

ちょうど1年くらい前, Primus*1というツールを公開しました.

papix.hatenablog.com

github.com

Primusは,

  • Primus Serverが受けたリクエストを...
  • WebSocketを通してPrimus Clientに送り...
  • Primsu Clientが, 開発者の手元で動くサービスへ同じリクエストを送る

...というツールです*2. Primusを使えば, 例えばLINEやSlackのBotを開発するとき, これらのサービスから送られてくるWebhookをPrimus Serverで受け, そこからPrimus Clientを経由して開発者の手元のマシンに転送することができます.

久々にコードを眺めていた所, Primus Clientがリクエストを送る先が決め打ちになっていて, 不便すぎるのでは? と思ったので, Primus Clientからリクエストを転送する先を設定ファイルで指定できるようにしました. ついでにREADME.mdも整備したり(id:ichigotake さんありがとうございます).

[server]
host = "localhost"
port = 14300
ssl = false

[[Route]]
channel = "sample1"

host = "localhost"
port = 8080
path = "/sample/endpoint"

こういう感じに書くと, Primus Serverの http://localhost:14300/receive/sample1 にリクエストを送った時, そのリクエストと同じリクエストが, http://localhost:8080/sample/endpointに送られます. 便利ですね.

今後の展望

  • 今は, 「Webhookを受け取って転送する」ことしか出来なくて, 「Webhookを受け取って転送し, その結果であるレスポンスを返す」ことができないので, 出来るようにしたい
  • Goの勉強をしながら, まずは動かそうという気持ちで書いているのでGoの流儀に則った良いコードにしていきたい
    • 以前, id:codehex さんに手直ししてもらったけれど, 今回の機能追加でいろいろガッとやってしまっている...

といった展望があります. 現状, 「ぜんぜんわからない, 俺は雰囲気でGolangをやっている」という感じなので, ちょっとGoを勉強して慣れてきたという方は実践がてら遠慮なくPull Requestを送りつけて頂けると, 完全に他力本願で申し訳ないのですが, 喜びます(自分もGoの理解深めるところ頑張っていきます...).

感想

機能追加というか, 雑に作りすぎた部分をようやく真っ当にしただけという気もする...?

*1:名前は言うまでもなく, Triad Primusから取っています. Primus Serverのデフォルトのポート14300も, Trancing PulseのBPM(143)から取ったのでした...

*2:同じことが出来るSaaSが存在すると昔教えていただいたのですが, 名前を忘れてしまった...

Mackerelでnasneを監視する 〜mackerel-plugin-nasne〜

この記事は, 「OSS紹介 Advent Calendar 2017」です.

qiita.com

昨日の記事は, id:mackee_w さんの「Rin - Redshift data Importer by SQS messaging - のご紹介」でした.

qiita.com

ここまでのあらすじ

id:mackee_w さんに, 「何か書いてよ!」と言われたので, 最近見つけて「最高!」と思った, 小粒だけどぴりりと辛いMackerelのプラグインをご紹介します.

Mackerelのプラグイン

Mackerelですが, 最近サードパーティプラグインのインストール機能が公式から提供されたりと, プラグイン周りがめちゃくちゃ熱いですね.

mackerel.io

ただ単にmackerel-agentをインストールするだけだと, 基本的なメトリックスしか取得できませんが, そこにプラグインを利用することで, 様々なメトリクスを取得し, Mackerelで管理/可視化することができるようになります.

「どんなプラグインがあるんだろう?」と興味を持った方は, Mackerelチームが誇るCRE, id:Soudai が「Mackerel プラグインアドベントカレンダー(全部CRE) Advent Calendar 2017」というのをやっているので, そちらを見てみると良さそうです.

qiita.com

mackerel-plugin-nasne

というわけで本題で, この記事では「mackerel-plugin-nasne」の紹介をします.

github.com

その名の通り, ソニーのネットワークレコーダー/メディアストレージの「nasne」を監視するプラグインです. 設定も簡単で, プラグインをインストールしてパスを通した上で, mackerel-agent.confに,

[plugin.metrics.nasne]
command = "/path/to/mackerel-plugin-nasne 192.168.11.3"

このように, nasneのIPアドレスを引数として渡して実行してあげるとOKです.

f:id:papix:20171202131622p:plain

このように,

  • HDDの最大容量/残り容量/使用容量 (USBで接続した外付けHDDも含む)
  • 録画された番組の数/録画失敗した番組の数

...を可視化することができます. 上の画像は, カスタムダッシュボードでnasneに関するメトリックを集めている様子になります.

ここから更に, 録画を失敗したらMackerelでアラートを出すとか, HDDの残り容量が減ったらアラートを出すとか出来ると, nasneの運用が捗りそうです.

次は...

yoku0825さんの「ytkit - Yoku-san no ToolKITについて」です. お楽しみに!