Mackerelのメタデータプラグインを書いてみた。
こちらのイベントに参加してきました。
Mackerel歴3ヶ月ほど、Go言語未経験(Hello, World程度は一応やったことがある)、 日々の監視について、「これで完璧」とも思っていないが、具体的に何が不足というほどの考えもまとまっていない。 という状況で、ほぼノーアイディア丸腰でのエントリーをしたので、幾分不安ではありました。
どんなイベントだったか。
ほぼconnpassに書かれているスケジュールの通りで、約3時間みんながもくもくとコードを書いていました。 自分はHackathonと銘打つようなイベントには初参加だったのですが、「Hackathonというよりはもくもく会っぽいね」というような声も聞こえました。
なぜ、メタデータプラグイン?
事前の説明や、アイディアソンの時間で、なんとなくメタデータプラグインをこれから推して行こうとしているのかな、という空気を感じたこと。 サーバー監視については素人なので、新しくプラグインをかいて何を監視すれば良いのかノーアイディアだったこと、などから、「じゃあなにか一つメタデータプラグインを書いてみよう」と手段先行で決めてしまいました。何しろ3時間しかないので悩んでいる時間はありません。
何を書いたか。
メタデータプラグインの例として紹介されたものが「サーバーにインストールされているモジュールの一覧をメタデータとして登録する」というもので、「そういえば、自分でデプロイしているアプリのモジュールのバージョンとか登録されていると便利かもしれない」という思いつきを得ました。
以下は、当日に書いたメモ書きほぼそのままです。 自分はTomcat上にwarファイルを配備するというデプロイをしているのでこういう情報をとることにしました。 (META-INF.MFがちゃんとしていないことがばれる←)
# 配備されているアプリケーションを登録するメタデータプラグイン ホストに対して、配備されているアプリケーションモジュールを登録する。 まずは業務で使っている構成で。 - デプロイ先 - `/hogehoge/censored/webapps` - デプロイ物 - hogehoge.war - 取得メータデータ - md5sum - 更新日 とりあえず、自分の業務に使えることを最優先でパスや取得物のパラメータ化とかはしてない。 むしろ、どういう切り出し方をしたら世の中に出せるのかという観点を学びたい。 パスを引数にする。 正規表現で引っかかったものを対象にする? railsとかphpとかだと1つのモジュールというのがない。 ブランチのコミットハッシュとかが対象になるのだろうか。 git pull とかで更新しているのかな? アプリのデプロイをしたときに、mkrコマンドを使ってアノテーションをしているが、1分待ってからこれで取得した値でアノテーションのdescriptionをつけるとかすると良さそう。
何で書いたか。
とりあえずシェルスクリプトでそれっぽいものができたようなので、この後はgolangを学ぶことにしよう。#mackerelio
— donsan (@_donsan_) 2017年8月19日
ということで、まずはシェルスクリプトで動くものを書いて、それからGOで調べながら書き直していました。 時間内にGOでもそれなりに動く状態になったので個人的にはちょっとした充足感が得られました。
パスとか、取得する情報とかを引数で与えるなど多少の柔軟性を持たせるところまで進めようという気持ちでいます。
今夜中に公開しないと、一生下書きのままのような気がしたのでいったんここで公開にします。