Redisログの見方チートシート
対象読者
- AWS ElastiCache などで Redis を採用しており、CloudWatch Logs や スロークエリログを眺める機会がある人
- 「
EVAL …とかRPUSH …とか出てくるけど何を意味しているの?」という疑問をさくっと解決したい人
1. Redis ログの基本構造
ElastiCache のスロークエリログ例(CloudWatch Logs):
{"CacheClusterId":"example-0001-001","Id":3609,"Timestamp":1754359800,"Duration (us)":39359,
"Command":"GET … (1 more arguments)","ClientAddress":"10.0.7.31:46632"}
| フィールド | 例 | 説明 |
|---|---|---|
Command |
GET … |
実行されたコマンド(引数は省略表示されることがある) |
Duration (us) |
39359 |
かかった時間(マイクロ秒)。1000µs = 1ms |
ClientAddress |
10.0.7.31:46632 |
リクエスト元(IP:port) |
Timestamp |
1754359800 |
実行時刻(Unix エポック) |
このうち、コマンドが何を意味しているかを知っておくと、
「どの処理がボトルネックか」を素早く特定できます。
2. よく出るコマンド早見表
| コマンド | 概要 | 代表的な用途 | 一言ポイント |
|---|---|---|---|
RPUSH |
リストの末尾に要素を追加 | キューイング, ログ保存 | 連続大量 RPUSH はリスト肥大化に注意 |
SETEX |
値をセットし TTL を付与 | キャッシュ保存 | TTL=0 だと即削除されるので注意 |
GET |
キーの値を取得 | キャッシュ参照 |
MISS が多いと DB 直撃の予兆 |
ZRANGEBYSCORE |
Sorted Set をスコア範囲で取得 | 遅延ジョブの取得, スケジューラ | スコア範囲が広いと重くなる |
EVAL |
Lua スクリプトを実行 | 分散ロック, 複雑なアトミック処理 | 遅いと Redis 全体をブロック⚠️ |
Tips:
Duration (us)が 10,000µs (=10ms) を超えるEVALやZRANGEBYSCOREが連発していたら要注意。
🔍 用語メモ(TTL / Sorted Set / Lua スクリプト)
| 用語 | 正式名称 & 意味 | 具体例 | 覚え方のコツ |
|---|---|---|---|
| TTL | Time To Live — キーが自動削除されるまでの「生存期間(秒)」 |
SETEX mykey 60 "val" → 60秒後に mykey が消える |
「キャッシュの賞味期限」的な数値 |
| Sorted Set | 順序付き集合(型名:ZSET)各要素にスコア(float) が付き、スコア順に並ぶ |
ZRANGEBYSCORE jobs 0 1000 → スコア0〜1000のジョブ取得 |
「優先度付きの配列」くらいに考えると◎ |
| Lua スクリプト | 軽量スクリプト言語 Lua で書いたコードをEVAL で Redis内で実行 できる機能 |
分散ロック取得:EVAL "return redis.call('setnx', KEYS[1], ARGV[1])" 1 lock 1
|
「複数コマンドを1回のRPCでアトミックに」 |
💡 暗記ショートカット
- TTL = 期限付き保存
- Sorted Set = スコア付きリスト
- Lua = Redis内ミニスクリプト
3. 実際のトラブルシュート例
-
EVALが 40ms 以上 → Lua スクリプトの中身を見直し or アプリにロジックを移す -
GETが <1ms でもMISSが多い → キャッシュキー設計を見直す -
RPUSHが多すぎてメモリ逼迫 → リストの TTL 設定 or 古い要素をLTRIM
4. スローログとエンジンログの違い
| ログ種類 | 取得方法 (ElastiCache) | 主な内容 | 目的 |
|---|---|---|---|
| スローログ | Slow Log を有効化すると CloudWatch Logs に出力 | しきい値 (ms) を超えた 遅いコマンド を逐次記録。Command / Duration / ClientAddress など |
パフォーマンス解析、ボトルネック可視化 |
| エンジンログ | Engine Log を有効化すると CloudWatch Logs に出力 | Redis サーバーの スタートアップ・シャットダウン、レプリケーションイベント、クラスター再構成、メモリ警告など | 稼働状況のモニタリング、障害解析 |
🔑 使い分けのコツ
- レスポンスが遅い ⇒ まず スローログ でどのコマンドが時間を食っているか確認。
- 接続切断やフェイルオーバー ⇒ エンジンログ でノードの再起動やクラスタイベントを確認。
5. まとめ
- コマンド名を把握するだけでボトルネックの当たりが付けられる
-
マイクロ秒単位の
Durationを ms に換算しつつスロークエリを洗い出す -
EVALとZRANGEBYSCOREは特に重くなりがちなので注意
ログを眺めるときは「コマンド × 実行時間 × 件数」のセットで見るとパフォーマンス改善の糸口がつかめます。