この記事は Mackerel プラグインアドベントカレンダー(全部CRE) の5日目です。
それでは5日目は mackerel-plugin-redis
です。
ここではRedisの細かい説明は割愛します。
Redisは高速な動作が強みのインメモリデータベースです。 KVSの選択肢として最近は使うのが当たり前になってきたRedis専用のpluginです。
インストールと設定手順
RedisのプラグインはRedisコマンドである INFO
の結果を可視化してくれるプラグインです。
本プラグインはプラグイン集として提供しているパッケージの mackerel-agent-plugins
に含まれています。
インストール先は /usr/bin/mackerel-plugin-redis
です。
次にMackerelのプラグインはコマンドですので実行する事ができます。
※/usr/bin はPATHが通っているので省略出来ます
-- /usr/bin はPATHが通っているので省略出来ます # mackerel-plugin-redis redis.keys.keys 0.000000 1512270527 redis.keys.expires 0.000000 1512270527 redis.keys.expired 0.000000 1512270527 redis.keyspace.keyspace_hits 0.000000 1512270527 redis.keyspace.keyspace_misses 0.000000 1512270527 redis.memory.used_memory 819400.000000 1512270527 redis.memory.used_memory_rss 2859008.000000 1512270527 redis.memory.used_memory_peak 820424.000000 1512270527 redis.memory.used_memory_lua 37888.000000 1512270527 redis.capacity.percentage_of_memory 0.000000 1512270527 redis.capacity.percentage_of_clients 0.010000 1512270527 redis.queries.total_commands_processed 90.000000 1512270527 redis.connections.total_connections_received 30.000000 1512270527 redis.connections.rejected_connections 0.000000 1512270527 redis.clients.connected_clients 1.000000 1512270527 redis.clients.blocked_clients 0.000000 1512270527 redis.clients.connected_slaves 0.000000 1512270527
設定ファイルであるmackerel-agent.confは標準では /etc/mackerel-agent/mackerel-agent.conf
にインストールされます。
こちらに下記のとおり追記しましょう。
[plugin.metrics.redis] command = "mackerel-plugin-redis"
以上を行った上でmackerel-agentを再起動してください。
見れるメトリック
INFOで見れる情報についてはRedisの公式ドキュメントに纏まっています。
ですがもう少し具体的に見ていきましょう。
各グラフ定義ごとに説明します。
また表に出てくるdiffとはプラグイン上で差分値計算をするかどうかです。
◯
となっている項目はプラグインで前回の実行時の値と差分値計算して出力しています。
Redis Queries
メトリック名(ラベル) | プラグインの出力名 | diff | 説明 |
---|---|---|---|
Queries | redis.queries.total_commands_processed | ◯ | 1分間あたりのサーバーによって処理されたコマンドの実行数 |
こちらは名の通りRedisで実行されたクエリ(コマンド)の数です。
total_commands_processed
自体は起動してからの総数なのでプラグイン側で差分値を計算して1分当たりの値にしています。
これによりRedisへのクエリの発行状態がわかるのでどの時間にピークが来ているかなども一目瞭然です。
こちらは監視するというよりは日常的に見てRedisの状況を確認するための値です。
Redis Connections
メトリック名(ラベル) | プラグインの出力名 | diff | 説明 |
---|---|---|---|
Connections | redis.connections.total_connections_received | ◯ | 1分間あたりのサーバーが受け入れた接続数 |
Rejected Connections | redis.connections.rejected_connections | ◯ | 1分間あたりmaxclients制限のために拒否された接続数 |
アクセス数が増えれば当然クエリも多くなりますし、負荷も増えます。
Redisの負荷が高いときはQueriesと併せて比べて、接続数が多いのか、1接続あたりの実行クエリ数が多いのか判断しましょう。
後述の Redis Capacity
があるのでこちらは監視するというよりは日常的に見てRedisの状況を確認するための値です。
Redis Clients
メトリック名(ラベル) | プラグインの出力名 | diff | 説明 |
---|---|---|---|
Connected Clients | redis.clients.connected_clients | ー | クライアント接続の数(スレーブからの接続を除く) |
Blocked Clients | redis.clients.blocked_clients | ー | ブロッキングコールで保留中のクライアントの数(BLPOP、BRPOP、BRPOPLPUSH) |
Connected Slaves | redis.clients.connected_slaves | ー | 接続されているスレーブの数 |
その名の通り、今の接続状況です。 Redis Connectionsは総数なのでその中身を詳しく分類した形になります。
Redis Keys
メトリック名(ラベル) | プラグインの出力名 | diff | 説明 |
---|---|---|---|
keys | redis.keys.keys | ー | 登録されているkey数 |
expires | redis.keys.expires | ー | 有効期限が設定されているkey数 |
expired | redis.keys.expired | ー | 有効期限になり、失効したkey数 |
こちらはRedisに登録されているKeyの状態と数を可視化しています。
Redisのいいところの1つKeyに有効期限を決めれることです。
私はセッションストレージとしてRedisを選ぶ事が多く、その場合に expires
や expired
が可視化されるのは嬉しいですね。
Redis Keyspace
メトリック名(ラベル) | プラグインの出力名 | diff | 説明 |
---|---|---|---|
Keyspace Hits | redis.keyspace.keyspace_hits | ◯ | 1分間あたりのKeyに対する検索の成功回数 |
Keyspace Missed | redis.keyspace.keyspace_misses | ◯ | 1分間あたりのKeyに対する検索の失敗回数 |
こちらは検索の成否を可視化してくれています。
Keyspace Missed
が多いとおかしいぞ、というのが一目瞭然です。
特にKeyに有効期限を付けている場合などは特に気にして振り返るようにしましょう。
Redis Memory
メトリック名(ラベル) | プラグインの出力名 | diff | 説明 |
---|---|---|---|
Used Memory | redis.memory.used_memory | ー | 1分間あたりのRedisによって割り当てられた総メモリ利用量(バイト単位) |
Used Memory RSS | redis.memory.used_memory_rss | ー | 1分間あたりのOSから見たときのRedisによって割り当てられたメモリ利用量(バイト単位) |
Used Memory Peak | redis.memory.used_memory_peak | ー | Redisが消費する最大メモリ利用量(バイト単位) |
Used Memory Lua engine | redis.memory.used_memory_lua | ー | Luaのエンジンが使用するメモリ利用量(バイト単位) |
Redisはインメモリデータベースですからメモリを如何に使っているかはとても大切です。 Redisが消費するメモリの内訳や状況を知っておくことでRedisの振る舞いを予測していくことができます。
Redis Capacity
メトリック名(ラベル) | プラグインの出力名 | diff | 説明 |
---|---|---|---|
Percentage of memory | redis.capacity.percentage_of_memory | ー | メモリ利用量 / 最大メモリ利用量の割合 |
Percentage of clients | redis.capacity.percentage_of_clients | ー | 接続数 / 最大接続数の割合 |
以下の式で計算されています。
Percentage of memory = 100.0 * used_memory / maxmemory Percentage of clients = 100.0 * connected_clients / maxclients
最大メモリ利用量である maxmemory
はデフォルトは0(制限なし)となっています。
例えばRedisをWebサーバと同居させていて、ある程度制限したい場合などはmaxmemoryを指定すると思いますし、その場合に Percentage of memory
は重要な指標になります。
またRedisがどんどん肥大化するような状態の場合にRedisがMemoryを全て使い切らないようにlimitを書ける場合もありえますし、その場合も同じく重要な指標になります。
Percentage of clientsは最大接続数に対する現在の利用率ですが最大接続数を超えると底から先はコネクションエラーになるので監視するようにしましょう。 まずは8割程度を閾値に設定するのがよいと思います。 ちなみにmaxclientsのデフォルトは10000です。
5日目はインメモリデータベースのRedisのプラグインについての説明でした。 明日はインメモリと言えばこちら、memcachedです。 引き続き、Mackerel プラグインアドベントカレンダーをお楽しみに!