Redis-traffic-stats的使用方法和tcpdump的回顾
Redis流量统计
-
- Redisのクエリーアナライザー “redis-traffic-stats” を書きました
-
- http://d.hatena.ne.jp/hirose31/20140227/1393470729
-
- redis-traffic-stats
- https://github.com/hirose31/redis-traffic-stats
可以通过键和命令来了解发布数量以及数据的总传输量。
与Redis-faina相比,可知道传输量,这是重点。
由于没有监视器的退化,因此非常适合轻松收集日常数据。
基本 – Ji Ben (Basic)
在连接到redis的客户端上执行。通过-p选项指定的端口是目标端口(默认为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文件进行分析时,指定端口号是必需的。
※(附加说明)我原本认为在redis上无法做到,但实际上是可以做到的。
错误 (pinyin:
## 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并进行分析会更方便,这样可以进行详细的分析。
-
- X分ごとに分析
- 複数のredisをport番号で使い分けている場合
在后一种情况下,只需分别对每个端口进行多次分析,即可分析包含多个端口数据的单个pcap文件。数据只需获取一次即可。
# 基本
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)
可以将通过旋转分割并保存的pcap文件合并后再进行重新分析。
# install
yum install wireshark
# 結合
mergecap -F modlibpcap -w output.pcap in_cap1.pcap in_cap2.pcap in_cap3.pcap...
如果想要使用redis-traffic-stats进行分析,请将输出格式指定为modlibpcap。
使用tcpdump来捕获Redis流量数据统计。
运用时的备忘录 shí de
-
- 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と適宜使い分ければよい
请参考以下链接
-
- tcpdump コマンドの使いかたをまとめてみた
-
- http://blog.livedoor.jp/sonots/archives/18239717.html
-
- tcpdumpについて知らない可能性のあるトップ10
- http://uni-id.nri.co.jp/ncsirt/2010/0609.html