そーだいなるらくがき帳

そーだいが自由気侭に更新します。

MongoDBの監視 ~ mackerel-plugin-mongodbを読み解く

この記事は Mackerel プラグインアドベントカレンダー(全部CRE) の14日目です。

qiita.com

soudai.hatenablog.com

それでは14日目は mackerel-plugin-mongodb です。

mackerel-plugin-mongodbはドキュメント指向データベースのNoSQL MongoDB の専用プラグインです。

github.com

インストールと設定手順

MongoDBのプラグインは db.serverStatus() の中身を可視化してくれるプラグインです。

本プラグインはプラグイン集として提供しているパッケージの mackerel-agent-plugins に含まれています。 インストール先は /usr/bin/mackerel-plugin-mongodb です。

次にMackerelのプラグインはコマンドですので実行する事ができます。

※MongoDBのバージョンは3.2を使っています。

-- /usr/bin はPATHが通っているので省略出来ます
# mackerel-plugin-mongodb
mongodb.opcounters.opcounters_insert    0.000000        1513220008
mongodb.opcounters.opcounters_query     0.000000        1513220008
mongodb.opcounters.opcounters_update    0.000000        1513220008
mongodb.opcounters.opcounters_delete    0.000000        1513220008
mongodb.opcounters.opcounters_getmore   0.000000        1513220008
mongodb.opcounters.opcounters_command   720.000000      1513220008
mongodb.connections.connections_current 1.000000        1513220008

設定ファイルであるmackerel-agent.confは標準では /etc/mackerel-agent/mackerel-agent.conf にインストールされます。 こちらに下記のとおり追記しましょう。

[plugin.metrics.mongodb]
command = "mackerel-plugin-mongodb"

以上を行った上でmackerel-agentを再起動してください。

見れるメトリック

MongoDBのserverStatusはとても多くの情報がとれますがmackerel-plugin-mongodbはシンプルに使いやすい情報にフォーカスして収集しています。

serverStatus — MongoDB Manual 3.6

各グラフ定義ごとに説明します。 それでは各グラフ定義ごとに説明します。 また表に出てくるdiffとはプラグイン上で差分値計算をするかどうかです。 ◯ となっている項目はプラグインで前回の実行時の値と差分値計算して出力しています。

MongoDB Connections

メトリック名(ラベル) プラグインの出力名 diff 説明
current mongodb.connections.connections_current ー 接続数

こちらはMongoDBに接続している数です。 MongoDBは勿論データベースですので接続数を監視は大事です。 しかしMongoDBののmaxConnsのデフォルト値は20000です。 (3.6ではこの上限も廃止されているので無制限です) そうするとどうなるかと言うと先にOSのプロセス数の上限にひっかかります。 UNIXのプロセス数の上限は ulimit -u で確認できますので合わせて確認しましょう。

# ulimit -u
3904

上限制限を調整したい人向けにMongoDBの公式ドキュメントも出ています。

UNIX ulimit Settings — MongoDB Manual 3.6

このようにMongoDBはコネクションがOSの限界まで使いがちですのでMongoDBのコネクション数と合わせてシステムメトリックスも確認しましょう。 メモリのエラーが出ているのでMongoDB Connectionsを確認したらすごいコネクションを貼っていたということもありえます。

MongoDB opcounters

メトリック名(ラベル) プラグインの出力名 diff 説明
Insert mongodb.opcounters.opcounters_insert ◯ 一分間あたりのInsert数
Query mongodb.opcounters.opcounters_query ◯ 一分間あたりのQuery数
Update mongodb.opcounters.opcounters_update ◯ 一分間あたりのUpdate数
Delete mongodb.opcounters.opcounters_delete ◯ 一分間あたりのDelete数
Getmore mongodb.opcounters.opcounters_getmore ◯ 一分間あたりのGetmore数
Command mongodb.opcounters.opcounters_command ◯ 一分間あたりのCommand数

こちらはMongoDBで実行されているそれぞれの数です。 これによってコネクションの割にQueryはそんなに捌いてなかったり、更新の量が多いなど何が起こっているか一目瞭然です。 アプリケーションをリリースした直後などは振る舞いが変わりやすいところですので確認したりすると良いでしょう。

14日目はドキュメント指向データベースのMongoDBプラグインについての説明でした。 みなさんiptablesは使ってますか?明日はiptablesの ip_conntrack の監視です。 引き続き、Mackerel プラグインアドベントカレンダーをお楽しみに!

15日目 mackerel-plugin-conntrack