この記事は Mackerel プラグインアドベントカレンダー(全部CRE) の24日目です。
それでは24日目は mackerel-plugin-json
です。
mackerel-plugin-jsonはその名のとおり、JSONを可視化するプラグインです。
インストールと設定手順
mackerel-plugin-jsonのインストールですがmackerel-plugin-jsonは公式パッケージに同梱されていません。
そのため自分でbuildする必要があります。
Goの開発環境の作り方がわかんないし、そもそもGoわからん!!って人には みんなのGo
がオススメです。
あとは僕は A Tour of Go をやりました。
これであなたもGoを完全にマスター勢です。
次にMackerelのプラグインはコマンドですので実行する事ができます。 そしてJSONはWebAPIから取得します。 まずテスト用のJSONを用意します。
# cat test.json {"hoge":19,"fuga":4,"foo":2}
そしてこのようなJSONに対し、実行すると…
※自分でbuildして/usr/binに配置しましょう。
-- /usr/bin はPATHが通っているので省略出来ます # mackerel-plugin-json -url=http://localhost/test.json custom.hoge 19.000000 1514036190 custom.fuga 4.000000 1514036190 custom.foo 2.000000 1514036190
Excellent!! 無事取得しています。 またオプション一覧は次のとおりです。
# mackerel-plugin-json -h Usage of mackerel-plugin-json: -exclude string Exclude metrics that matches the expression (default "^$") -include string Output metrics that matches the expression -insecure Skip certificate verifications -prefix string Prefix for metric names (default "custom") -url string URL to get a JSON
オプション一覧にもあるとおり -exclude
と -include
があるので任意の値に絞り込むこともできます。
# mackerel-plugin-json -url=http://localhost/test.json -include=hoge custom.hoge 19.000000 1514036432
この機能はmackerel-agent側にもありますので状況に合わせて組み合わせて使ってみてください。
見れるメトリック
このようにJSONを返すWebAPIであればどのようなデータでもグラフにしてくれます。 フォーマットの例を出します。
{ "bar": "hoge", "foo": 2, "fuga": 4, "hoge": 19, "hoge1": { "foo1": 2, "fuga1": 1 } }
# mackerel-plugin-json -url=http://localhost/test.json custom.fuga 4.000000 1514036673 custom.foo 2.000000 1514036673 custom.hoge1.fuga1 1.000000 1514036673 custom.hoge1.foo1 2.000000 1514036673 custom.hoge 19.000000 1514036673
このように入れ子のデータ構造でも対応することができます。
また数値では無く、文字列の場合は無視されます。
ちなみに hoge: [1,2,3]
のような配列の時はエラーになります。
このへんの不安定さなどがまだ公式のパッケージに含まれていない要因の一つですね。
実はこれめちゃめちゃ便利なんじゃないの?
そうめちゃめちゃ便利です。 例えば先日のH2Oはモニタリング情報をJSONで返すエンドポイントを持っていますし、mackerel-plugin-h2oでもそれを利用しています。 項目を自分でフィルタリングしたり全て使うのであればmackerel-plugin-jsonでもいいのです! ただし注意点としてmackerel-plugin-jsonはそのままの値をグラフしますのでカウンタ-値に自分で変換したい場合はやはりpluginにする必要があります。 この点は前述のmackerel-plugin-h2oの場合は大きな差ですし、既に公式のプラグインがある場合はそちらが便利です。
自分でエンドポイントを作った時
そうです、mackerel-plugin-jsonで可視化してやることができます。 勿論、自分でエンドポイントを作れる=MackerelのAPIやプラグインを直接叩くことが出来るので基本的には不要なケースの方が多いでしょう。
ではどんな時に良いでしょうか? 1つ目は直接自分の管理下に置いていないServer、つまりはレンタルサーバーなどです。 この場合はmackerel-agentのインストールが難しく、監視対象側から定期的にMackerelのAPIを叩くことが難しいでしょう。 そんな場合はモニタリング用のエンドポイントを作成してそこをmackerel-plugin-json経由で監視すればいいのです。
有効活用の可能性は無限大
エンドポイントはルータかもしれませんし、Lambdaかもしれません。 しかしJSONさえ返す事ができれば何を使ってもいいのでシンプルで便利に使うことができます。 また前回ご紹介したとおりmkrコマンドでホストを作れば監視のルールやロールも別にすることができます。 この他にも例えば顧客のシステムのエンドポイントに課金集計やユーザ数を返すエンドポイントを仕掛けておき、それを可視化するのも良いでしょう。 例えばWordPressのプラグインなんかはかなり相性が良いと考えています(まだ作ってないので誰か!!)
エンドポイントで監視する場合は前回紹介したホストを追加する方法も併せてお試しください。
id:Songmu さんも 監視のための内部的なJSON APIを作るのが良い とこないだのセミナーで言ってましたね。
このようにmackerel-plugin-jsonは夢が広がるプラグインです。 色んな環境で是非楽しんでみてください。
24日目はモニタリングの切り札としてエンドポイントの監視についてでした。 明日はいよいよ最終日、PostgreSQLの監視です。 引き続き、Mackerel プラグインアドベントカレンダーをお楽しみに!