查看原文
其他

工具|MySQL、Redis、MongoDB网络抓包工具

点击关注 👉 Java架构师技术 2022-07-01
    以下文章来源Java架构师技术,回复”Spring“获惊喜礼包
上一篇推文:开源困境:Log4j2 维护者发声:没有工资,还要挨骂!!

大家好,我是Java架构师

简介

go-sniffer 可以抓包截取项目(MySQL、Redis、MongoDB)中的请求并解析成相应的语句,并格式化输出。类似于在之前的文章 MySQL抓包工具:MySQL Sniffer中介绍的mysql-sniffer。而 go-sniffer 可以对更多数据库进行抓包分析,现在来介绍在什么情况下会使用该工具的。

使用

下载:

github 地址:https://github.com/40t/go-sniffer

安装:

安装依赖包:

Centos:

yum -y install libpcap-devel

Ubuntu:

apt-get install libpcap-dev

另外还需要安装golang,并且版本需要在1.10.3以上。

wget https://golang.org/dl/go1.10.3.linux-amd64.tar.gz

设置好相关的环境变量。如果不想要go环境 ,则可以直接在其他地方安装好go-sniffer之后,复制到目标服务器上直接使用。

下载安装

-- 安装好go环境的服务器上:

go get -v -u github.com/40t/go-sniffer cp -rf $(go env GOPATH)/bin/go-sniffer /usr/local/bin

--安装到设置好的go环境变量的目录里 go-sniffer

参数说明:go-sniffer --help

[使用说明]

    go-sniffer [设备名] [插件名] [插件参数(可选)]

    [例子]
          go-sniffer en0 redis          抓取redis数据包
          go-sniffer en0 mysql -p 3306  抓取mysql数据包,端口3306

    go-sniffer --[命令]
               --help 帮助信息
               --env  环境变量
               --list 插件列表
               --ver  版本信息
               --dev  设备列表
    [例子]
          go-sniffer --list 查看可抓取的协议

=======================================================================
[设备名] : lo0 :   127.0.0.1
[设备名] : en0 : x:x:x:x:x5:x  192.168.1.3
[设备名] : utun2 :   1.1.11.1

语法:

$ go-sniffer lo0 mysql 
$ go-sniffer en0 redis 
$ go-sniffer eth0 http -p 8080
$ go-sniffer eth1 mongodb


使用场景

一 Redis :审计、发现热点key

关于Redis的知识点就不说了,主要来说明如何使用go-sniffer来抓包分析。如果想发现哪个key的操作比较多或则是否存在热点key,在Redis4.0之前没有什么好办法(4.0之后的LFU可以查看hotkey),只有通过统计各个客户端发来的命令进行统计。虽然monitor可以看到某一刻的key操作,但是该命令消耗巨大,可能会造成客户端缓冲区溢出。并且也没有合适的插件来进行实现。即使有的话,对Redis的性能肯定有一定的损耗,所以只有监控其网络来分析操作是对Redis服务的影响最小的。如对一个实例进行监控:

另外搜索公众号编程技术圈后台回复“Java”,获取一份惊喜礼包。

go-sniffer eth0 redis -p 6379 >> out.log 对通过eth0网卡的客户端访问端口为6379的Redis服务进行抓包,并把信息写到文件中。该文件的日志格式:

tcp and port 6379 get abc
 get abc
 get abc
 get abc
 get opq
 get opq
 get opq
 get opq
 get xyz
 get xyz
 get xyz

可以看到,该文件的信息就是操作日志,最后可以通过使用awk来分析,也可以把该日志文件写入到数据库的表里进行统计分析:

grep -avEi "^#|^$|^tcp|^ INFO|^ AUTH|^ REPLCONF ACK|^ CONFIG GET" out.txt |awk '{print $1,$2}'|sort| uniq -c | sort -nr |head -n 10
      5 get abc
      4 get opq
      3 get xyz

注意:go-sniffer也需要消耗一定的资源,大致的消耗可以看以下表格:

OPSRedis CPUsniffer CPU
1.2W20%30%
5.5W80%140%
7.5W98%180%

从上面看到,go-sniffer所需要的CPU资源是Redis的2倍左右。所以,在使用该工具之前,先判断本身服务器的资源是否够用。

二 MySQL:审计

go-sniffer eth0 mysql -p 3306 >> out.log

三 MongoDB:审计

go-sniffer eth0 mongodb -p 27017 >> out.log


最后,整理了100多套项目,赠送读者。扫码下方二维码,后台回复赚钱即可获取。

--END--

来源:cnblogs.com/zhoujinyi/p/15343188.html

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!

往期惊喜:

何谓架构?

一个很酷的后台权限管理系统

支付宝架构师眼中的高并发架构

为什么美国程序员不用加班,而中国程序员就只能996?

如何搭建一台永久运行的个人服务器?

RedisJson 横空出世,惊爆了!

Spring Boot 实现万能文件在线预览

涨姿势:为什么 Java 中 “1000==1000” 为 false,而 ”100==100“ 为 true?

12 个顶级 Bug 跟踪工具

为什么前后端分离了,你比从前更痛苦?

Nginx+Redis 搭建高性能缓存利器

Win11 神优化!CPU、内存占用暴降,速度飞快让人秒弃 Win10


扫码关注我们的Java架构师技术

带你全面深入Java

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存