LoginSignup
9
9

More than 5 years have passed since last update.

Redis-traffic-statsの使い方とtcpdumpのおさらい

Last updated at Posted at 2014-08-05

redis-trafic-stats

keyやcommandごとの発行数、データの転送量合計がわかる。
redis-fainaに比べて転送量がわかるのがポイント。
monitorによる劣化もないので普段のデータを気軽に集めておくのにとてもよい。

基本

redisへ接続するclient上で実行する。 -pオプションで指定するportは宛先である(default:6379)。

# tcpdumpを直接行ったあと分析
## 30秒間
./redis-traffic-stats -t 30 -p 6379
## 1000パケット
./redis-traffic-stats -c 1000 -p 6379

# 別途実行したtcpdumpのpcapファイルを分析
redis-traffic-stats -r output.pcap -p 6379

pcapファイルの分析時も想定するport番号の指定は必須。
※(追記)redis上でできないと勝手に思ってましたけど普通に出来ました。

エラー

## Summary
* Duration:
    * 2038-01-19 12:14:08 - 1970-01-01 09:00:00 (1s)
* Total Traffic:
    * 0 bytes (0.00 bytes/sec)
* Total Requests:
    * 0 requests (Avg 0.00 req/sec, Peak 0.00 req/sec)

直接・ファイル読み込みいずれの場合でも、このように分析データが空表示される場合、tcpdumpのオプションか分析したいポート番号の指定が間違っている(ストリーム中にredisのパケットがない)。

tcpdump

細かい分析にはtcpdumpを直接取得した後分析した方が便利です。

  • X分ごとに分析
  • 複数のredisをport番号で使い分けている場合

後者の場合は、複数port宛のデータを含む1つのpcapファイルをportごとに複数回分析すればよい。データの取得は1度で済む。

# 基本
tcpdump -s 65535 tcp port 6379 -w redis.pcap -i eth0
## 1000パケット
tcpdump -s 65535 tcp port 6379 -w redis.pcap -i eth0 -c 1000

# portrangeオプション
tcpdump -s 65535 tcp portrange 6379-6380 -w redis.pcap -i eth0 -c 1000

# 想定ホスト同士の通信に絞る等
tcpdump -s 65535 "tcp port 6379 and (src and dst net 192.168.0.0/16)" -w redis.pcap -i eth0 -c 1000

一定時間ごとにdump/指定回数rotateする(-G/-W)

# 60秒 * 5回 rotateし、%Y%m%d-%H%M形式で保存。
tcpdump -s 65535 tcp port 6379 -w redis.pcap -i eth0 -G 60 -W 5 -w redis_%Y%m%d-%H%M.pcap 

rotate後のファイル保存先がtmpでない場合、書き込み権限が問題になることがある。777またはtcpdumpユーザーを書き込み可能にするか、-Zオプションでrootを指定する。

# 書き込み時のユーザーをrootにする(権限を降格しない)
tcpdump -Z root -s 65535 tcp port 6379 -w redis.pcap -i eth0 -G 60 -W 5 -w redis_%Y%m%d-%H%M.pcap 

postrotate コマンド実行(-z)

本来圧縮するためのオプションだが、redis-traffic-statsを含むスクリプトに引き渡したりも出来る。

# 圧縮
tcpdump -s 65535 tcp 6379 -i bond0 -G 60 -W 5 -w redis_%Y%m%d-%H%M.pcap -z gzip

# 指定コマンドへ引き渡し
tcpdump -Z root -s 65535 tcp 6379 -i bond0 -G 60 -W 5 -w redis_%Y%m%d-%H%M.pcap -z /usr/local/bin/redis-analyse.sh

コマンドが実行されるユーザーも-Zのオプションが引き継がれる。

分割したdumpファイルの再結合(mergecap)

rotateで分割して保存しておいたpcapファイルを結合してから改めて分析してもいい。

# install
yum install wireshark

# 結合
mergecap -F modlibpcap -w output.pcap in_cap1.pcap in_cap2.pcap in_cap3.pcap...

※redis-traffic-statsで分析したい場合、output formatにmodlibpcapを指定すること

tcpdump + redis-traffic-stats

運用時のメモ

  • tcpdumpでrotateする場合、条件に該当するpacketが発生していないとrotateのタイミングが想定通りにならないことがある。
  • 複数のclient host上から取得したpcapデータをすべてmergecapして分析することも可能。
  • redis-traffic-statsのslowコマンド実行時間はpcapからの値なので、アプリがauth->set->get->quitなどを一つのセッションで行う場合合計値が表示される。
  • 実際に問題のあるクエリを解析する場面ではmonitorログでkeyと突き合わせる等の確認が必要。同じ時間帯でredis-traffic-stats/monitorそれぞれデータを取得し、redis-fainaと適宜使い分ければよい

参考リンク

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9