読者です 読者をやめる 読者になる 読者になる

えいのうにっき

あたまのなかのデトックスを、不定期的に。主に Web 系技術ネタ。

個人でも Mackerel を standard プランにしたので、なんとか使い倒そうとしている話

Mackerel fluentd

f:id:a-know:20160208094523p:plain

現在の業務では、サーバーリソースの各種メトリクスの取得・監視・アラートの仕組みに Mackerel を使ってる。使ってる、んだけど、そんな毎日あちこちいじくり回すようなものでもないので、「もっと慣れておきたいな」とは思ってて。そうこうしてたら、ディスカウントキャンペーンが始まってくれて。

ディスカウントキャンペーン 〜 3/25(金)まで この機会により多くのお客様にご利用頂きやすくするために、新規契約のお客様へ期間限定のキャンペーンとしてStandardプランをディスカウントいたします。 また、既存のStandardプランをご契約のお客様も、新たにプランを変更いただくことでディスカウントが適用されます。  ディスカウント価格: ¥2,000 ¥1,800/月/ホスト(税込) http://blog-ja.mackerel.io/entry/2016/01/21/180404

こいつはありがてぇ!と飛びついたのだけど、「腐っても鯛」、いや、「個人利用しても鯖」、こと Mackerel 、¥1,800/月/ホスト は伊達じゃない。なにせ、本体(監視対象)であるぼくのサーバーインスタンスと同じくらい(もしくは若干高いくらい)のお値段なのだ。w

f:id:a-know:20160208094856p:plain

そんなら使い倒さないと勿体無いよね、ってことで、ここ1,2週間は Mackerel であれこれやってみている。最近それがようやくちょっと面白くなってきた(ぼくが)ので、取り組み内容をここでも紹介してみる。

このブログに関するメトリクスを Mackerel に送る

使い倒す、とはいっても、本来の目的で「使い倒す」ことはほぼ叶わない。本来の目的、つまり、負荷とかレイテンシの監視とか、メトリクスを収集しスケールアップ・スケールアウトの指標に取り入れる、とか。...なぜなら、今回 Mackerel の監視対象とするサーバにホストしているものは、オープンにはしているものの、いつも閑古鳥だからだ。w(以下、このサーバのことを「閑古鳥」と呼ぶ)

一方で、ぼくのこのブログであれば、とりあえず「1日に1人の訪問者もない」といったことはまぁ無いので(白目)、それを監視してみようと思い至った。グラフ化すればモチベーションにも繋がるだろうし。

そんな「このブログに関するメトリクス」だけど、今のところ収集しているのは下記のようなもの。

もともと、似たようなことは以前からやろうとしてた。去年やった dashing なんかがそう。

blog.a-know.me

f:id:a-know:20160208093849p:plain

これ↑の Today PageViews Current Visitors とかがそれ。

なんだけど、この dashing で遊んでたときに、同僚でもある id:masutaka26 から「私もあれに近いことを、GrowthForecast でやってますね」と言われて、「あー、グラフにするの、いいな」 ってなって。それが全てのきっかけともいえる。

話を戻して。これらの「ブログに関するメトリクス」は、どれも API によってその数値を取得している。なので、その API を叩く何かが必要になるのだけど、それは今回は Rails が乗っている閑古鳥サーバに実装することにした。

例えばこれは、ブログへのリアルタイム訪問者数を Google AnalyticsAPI を叩いて取得、fluentd に投げてる API の実装 PR。

github.com

さいきんこのブログで「fluentd がー」って言ってたのは、主にこれのせい。

わざわざ一度 fluentd に投げてるのも、まぁ会社の構成がそうだから、っていうのもあるけど、「Mackerel だけじゃなく、BigQuery にも送っておきたい」と思ったから。(Mackerel でのデータ保持期間も、最近365日から400日になって、個人利用にはもう十分すぎるほどなんだけど。)

結果が、こんな↓かんじ。

f:id:a-know:20160208093949p:plain

f:id:a-know:20160208093959p:plain

人体も監視対象にしてみる

まだまだ監視できるものがあった。さっきの dashing の画像を見てピンと来た人もいるかもだけど、そう、ぼく自身

去年の夏に dashing で遊ぶために買った fitbit を、今でも無意識に装着し続けているので、これがそのまま使える。

API の実装にあたっては、去年の夏の dashing のときの実装が大変役に立った。ありがとう僕。

github.com

f:id:a-know:20160208094106p:plain

受けた fluentd では、fluent-plugin-mackerel を使ってそれを Mackerel に送ってる。

fluentd に送られた当日の歩数を BigQuery と Mackerel に送る by a-know · Pull Request #70 · a-know/a-know-home-server · GitHub

メトリクスを収集・fluentd に送るための API リクエストも Mackerel にさせる

上記のような「API を叩くなにか」は、いろいろ考えた結果、それ自体を Web API として閑古鳥サーバに実装した。なので、何がしかから定期的にその API をリクエストしてもらわなきゃいけないんだけど、cron とかダルいなーということで、これも Mackerel にやってもらうことにした。Mackerel の外形監視の機能。API を Mackerel 以外からはアクセスできないようにして。

f:id:a-know:20160208094135p:plain

これなら毎分リクエストしてくれるし、同時に、2xx 以外のステータスならアラートも上げてくれるので一石二鳥! ...あっ、毎分リクエストが来ることで閑古鳥サーバが多少閑古鳥じゃない感じになって寂しくない気にもなれるから一石三鳥だ!!

f:id:a-know:20160208094210p:plain

...だんだん、怒られそうな気がしてきた。

メトリクスをカスタムダッシュボードにまとめる

こうして Mackerel に送ったものは、全てがサービスメトリックという形でまとめられるので、その数が増えるとちょっと視認性に欠けるものがある。

ので、「ブログのメトリクス」とか「自分のメトリクス」みたいな単位でカスタムダッシュボードを作っちゃう。これも standard プランだからこそできること!

f:id:a-know:20160208094252p:plain

ここんとこブクマされてないので、グラフは寂し目だけど。。(グラフの種類は差分グラフにしてる)

感想

仕事では「好きなだけ Mackerel を触る」ことは難しくても(他のお仕事もあるので...)、「自宅で好きなだけ Mackerel を触る」ことならできるので、それができるようになったのは、素直にウレシイところ。UI 、グラフがシュッとしてて、使っててきもちいい。

あと、Mackerel にメトリクスを送るのも、fluent-plugin-mackerel さえあれば怖くない、っていうこのかんじね。今後もまた何か送れそうなものを思いついたらどんどん送っちゃおう。

グラフ、シュッとしてて好きなんだけど、画像化したりするとちょっともっさりした感じになるのが惜しいなぁと思った(だからこのブログのグラフもスクショにしちゃった)。でも、それくらいかなぁいまのところ。Mackerel は毎週何かしらのアップデートを継続していて、同じアプリケーション開発に携わる者としても身が引き締まる思い。

今後の野望

年始の抱負にも書いたりしてたんだけど、ちょうどラズパイとかにも興味があるので、それで部屋の温度とか飛ばして監視してみたりしたいなと思ってる。

あと、今回はとりあえず数値を送りはじめることが先決だったので、書いたコードのリファクタリングをしとかないとなぁとも思ってる。思ってますはい。

参考

follow us in feedly