zoukankan      html  css  js  c++  java
  • MySQL、Redis、MongoDB网络抓包工具

    简介

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

    使用

    下载:

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

    安装:

    1)安装依赖包:

    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之后,复制到目标服务器上直接使用。 

    2)下载安装

    -- 安装好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服务的影响最小的。如对一个实例进行监控:

    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也需要消耗一定的资源,大致的消耗可以看以下表格:

    OPS Redis CPU sniffer CPU
    1.2W 20% 30%
    5.5W 80% 140%
    7.5W 98% 180%

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

    二 MySQL:审计

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

    三 MongoDB:审计

    go-sniffer eth0 mongodb -p 27017 >> out.log
    ~~~~~~~~~~~~~~~ 万物之中,希望至美 ~~~~~~~~~~~~~~~
  • 相关阅读:
    python 正则表达式
    python 递归查找
    MYSQL 索引优化,避免回表
    MYSQL ibtmp文件暴增
    mysql 主从复制刷新参数
    MYSQL 复制数据过滤
    快速入门Kubernetes
    ansible之playbook的编写
    ansible的安装及常用模块详解
    ERROR Failed to discover available identity versions when contacting http://ct:5000/v3.
  • 原文地址:https://www.cnblogs.com/zhoujinyi/p/15343188.html
Copyright © 2011-2022 走看看