• 作成:

Mackerelを実験として自宅サーバに導入しました

サーバのCPU使用率やネットワーク利用率とかをモニタリングしたい

最近思うことがありまして(詳しくは片付いてからサイトに書きます), サーバのCPU使用率やネットワーク利用率をモニタリングしたいと思うようになりました.

また仕事で運用しているサーバも監視したくて, それの実験としてまず自宅サーバで試してみようとという思いもありました.

既にAWSのRoute53 ヘルスチェックのhttps外形監視は導入していますが, CPUなどのデータもわかりやすく見ておきたいですね. AWSのデフォルトのグラフ見づらくないですか?

そこで無料のサーバ監視ツールを導入しようとして, 対象になったのがMackerelです.

Mackerel(マカレル): 新世代のサーバ管理・監視サービス

他にも色々あるようですが, 多くの人がこれを勧めているので使ってみることにしました.

登録

登録はGitHubアカウント持ってれば即座に済むので, 1分で済みました. 流石にメールアドレスの確認は必要でしたが. こういうサービスにありがちな, 勤務先などの個人情報をとにかく引っ張ろうとするようなフォームじゃないのはとても良いですね. 必要な情報だけを要求します.

インストール

Mackerelを使うにはサーバにエージェントをインストールする必要がありますが, 残念ながらGentoo(portage)にはパッケージが無いみたいですね.

Gentoo Portage Overlays - Newsに登録されているoverlayにも存在しません.

「その他Linux」という項目があるのでここからtar.gzをダウンロードしましょう.

私はいつも実行バイナリは~/.local/bin/に入れるのですが, このエージェントはrootで動くので/usr/local/bin/に入れることにしました.

セットアップは極めて簡単でMackerelのCLIにwebページに載ってるAPIキーを入力するだけです. 簡単すぎてビビりました.

さてエージェントをデーモン化する必要があるのですが, 「その他Linux」のtar.gzにはsystemdのサービスファイルが入っていません.

ならばUbuntu向けのdebをダウンロードしてきてdpkgパッケージインストールしてapackで解凍じゃい.

atoolを使えばtar, gzip, zip, 7zなどの複数のツールのコマンドラインオプションを覚える必要が無くなります - ncaq

そしてサービスファイルを手に入れました.

これを「その他のLinux」の環境に移すためにエージェント本体のパスと設定ファイルのパスを変更します.

編集した結果がこちら.

[Unit]
Description=mackerel.io agent
Documentation=https://mackerel.io/
After=network-online.target nss-lookup.target

[Service]
Environment=MACKEREL_PLUGIN_WORKDIR=/var/tmp/mackerel-agent
Environment=ROOT=/var/lib/mackerel-agent
EnvironmentFile=/etc/mackerel-agent/mackerel-agent.conf
ExecStartPre=/bin/mkdir -m 777 -p $MACKEREL_PLUGIN_WORKDIR
ExecStart=/usr/local/bin/mackerel-agent supervise --root $ROOT $OTHER_OPTS
ExecStopPost=/bin/sh -c '[ "$AUTO_RETIREMENT" = "" ] || [ "$AUTO_RETIREMENT" = "0" ] && true || /usr/bin/mackerel-agent retire -force --root $ROOT $OTHER_OPTS'
ExecReload=/bin/kill -HUP $MAINPID
LimitNOFILE=65536
LimitNPROC=65536

[Install]
WantedBy=multi-user.target

これを/etc/systemd/system/に送り込んでデーモン化完了です.

ちなみに私はAWSではUbuntuかAmazon Linux 2を使うのでこの面倒な作業は仕事では必要ありません. systemdのサービスファイルインストールした次点で入ってるので起動するだけでしょうね.

サービスとロールの概念がよくわからなかったけれどすぐにわかりました

「サービス」と「ロール」の概念がよくわかりませんでしたがすぐにわかりました.

サービス、ロールを作成する - Mackerel ヘルプに詳しく書いてました.

サービスは複数のホストをまとめて管理するための機能ですね. 自宅サーバは1つしかないので全く無意味なのですが, 普通のwebアプリケーションはwebサーバやアプリケーションサーバやDBサーバが分かれているので, 纏めるのに必要です.

サービス名に悩みましたが自宅サーバは1つしかないので諦めてホスト名そのままつけました.

ロールはサーバと1対1対応する関係性のようですね. webとかdbとか名付ける. まあこれも自宅サーバには1つしか無いのですが…

外形監視の導入

httpsでwebサイトが生きてるか確認する外形監視は自宅サーバには Uptime Robot を既に導入しているのですが, とりあえず機能を試してみたかったので導入してみました.

親が自宅サーバを物理的に落としてくるのでTwitterで死活監視結果を送ってくれるUptime Robotを導入しました - ncaq

単なる外形監視だけではなく, 証明書の期限切れを警告してくれるのは嬉しいですね.

これならcertbot renewの結果を一々メールで通知する必要もなさそうです.

certbotをnginxを起動したままsystemdのtimerで動かして証明書を自動更新する仕組みが出来た気がします - ncaq

というかこの仕組み正しく更新できたか確認出来ないのでもうメール通知するのはやめました. 鬱陶しいので.

しかし外形監視はFreeプランだと使えないんですね…

料金 - Mackerel(マカレル): 新世代のサーバ管理・監視サービス

コストがかかるから仕方がなさそう. しかし仕事用ならともかく落ちてもさほど困らない自宅サーバ向けに1800円も月に支払う気はあまりしないですね. それどころか別に仕事向けにも外形監視はUptime Robotを使えば良いですし, そんなにホスト数多くないので仕事向けでもFreeで十分っぽい. ホスト数が5台を超えたら必要になるでしょうが.

通知について

Uptime Robotに比べてLINE通知などがありますが, 逆にTwitter通知はありません. 私はLINEアカウントを持っていないのでTwitterで通知してくれる方がありがたいです.

SyakeはSlack派なのでSlackに流せば良いですが, 自宅サーバは通知どうしましょうかね.

Chatworkにマイチャットで投稿出来ないかなと見てみたのですが, 管理者じゃないとAPI使用できないらしいです. ワークスペースとか別れていないのにこの仕様になってるの謎じゃないですか?

Discordに集約したいなあと思ってWebhookで通知できることを見て, DiscordにWebhookでいろいろ投稿する - Qiita とか見てみたんですが, サーバを作らないと通知出来ないみたいですね. ダイレクトメッセージで通知してくれれば十分と思ってましたが, 冷静に考えてみるとユーザが存在しないとダイレクトメッセージを送れるわけが無いですね.

2人でサーバ作る意味もそんなに無いので, サーバ作成はとりあえず見送りで.

通知はとりあえずUptime Robotに任せれば良いやということになりました. Twitter通知はMackerelにない強みですし. iftttとか使えば繋げられそうな気もしますが…

CPUやネットワークやIPアドレスが見れるだけで十分ということにしました.

プラグイン

Mackerelのエージェントは豊富なプラグインで拡張することが出来ます.

とりあえずLinuxなのでLinux向けのプラグインを入れてみることにしました.

mackerel-agent-plugins/mackerel-plugin-linux at master · mackerelio/mackerel-agent-plugins

フォークの数などのデータなどが見れるようになるそうです.

yumやaptが使えない環境ではGoが必要です(入ってた).

go get github.com/mackerelio/mackerel-agent-pluginsだけすれば良いと思ってましたが, よく見たらsrc中に入ってビルドしろって書いてました.

なんでそこgo getだけで入手できるようにしなかったんでしょう? mackerel-agent-plugins linuxみたいな感じでサブコマンドとして実行できるから別に良いやって考えでしょうか.

/etc/env.dのパス指定をミス知るようだったので面倒くさいのでフルパスを設定ファイルに記述しました.

そしたら

2018/11/13 19:59:29 FetchLastValues (ignore): open /tmp/mackerel-plugin-linux-da39a3ee5e6b4b0d3255bfef95601890afd80709: no such file or directory

が出てきてエラーだと思ったのですが, これってエラーメッセージじゃなくて, 「ファイルがないから作ったよ」というinfoだったんですね. no such file or directoryなんて見たらひと目でエラーだと思ってしまうから惑わされてしまいました.

これで追加のメトリックを見ることが出来るようになりました. のは良いんですが, 追加するとなんかメトリックの表示が遅れて出てきませんか? 気のせい? 元からこうだった?

他にもnginxとか使えそうなプラグインはいくつかありましたけど, 自宅サーバをそんなマジになって監視する気ないのでやめておきました. ネットワーク通信量とかでだいたいわかりますしね.

単なるコマンドとして集計結果を出せば良いので, いざとなったら自前でプラグイン割と簡単に書けそうなのも良いですね.

結論

ホストステータス

MackerelはとりあえずCPUとネットワーク使用率見たいだけみたいな用途だとめっちゃ簡単なので, 面倒臭がってないでみんなも導入しましょう.