美文网首页
2020-06-18 ansible快速批量抓取指定机器组上的t

2020-06-18 ansible快速批量抓取指定机器组上的t

作者: 五大RobertWu伍洋 | 来源:发表于2020-06-21 15:16 被阅读0次

    快速简介

    打开两个登录到部署机的窗口,进入/data/orchsym-installer/deploy-targets/tianzheng3-prod/default类似目录,分别执行如下命令开始抓取 tcpdump 和 strace 包:

    ansible kong -i hosts.yml -m shell -a "tcpdump -nn -A -s 0 -l -i any -e -f -tttt -vv 'tcp port 9042' -w /tmp/out.txt"

    ansible kong -i hosts.yml -m shell -a "strace -T -tt -s 100000 -e trace=network -o /tmp/file.out -p $(ps -ef|grep $(ps -ef|grep -i "kong-101"|grep -v grep|awk '{print $2}')|grep worker|awk '{print $2}'|xargs -n 24|tr -s " " ",")"

    管理平台尝试重现异常过程后,在两个抓包窗口使用ctrl+c结束 ansible 抓包进程,汇集抓包数据:

    ansible kong -i hosts.yml -m fetch -a "src=/tmp/out.txt dest=/tmp/ansible_tcpdump"
    ansible kong -i hosts.yml -m fetch -a "src=/tmp/file.out dest=/tmp/ansible_strace"
    

    详细解说

    进入部署的target所在配置文件目录,举例:

    /data/orchsym-installer/deploy-targets/tianzheng3-prod/default

    如需对kong的所有服务器使用tcpdump抓包,可以执行如下:

    ansible kong -i hosts.yml -m shell -a "tcpdump -nn -A -s 0 -l -i any -e -f -tttt -vv 'tcp port 9042' -w /tmp/out.txt"

    上述命令查找部署是生成的当前目录下的 hosts.yml 里对各个主机组或角色的声明信息,获取到kong这个主机组的主机ip等,然后通过shell模块执行tcpdump,写入原始二进制包信息到各个主机的 /tmp/out.txt 文件中,随后可以统一收集起来并使用wireshark查看。

    注意上述命令仅抓取了 9042 端口相关请求,即 kong 与 cassandra 交互的数据信息。
    如需其他过滤条件,适当修改tcpdump命令即可

    如不需要wireshark分析,可以考虑抓取解析后的tcp包:

    ansible kong -i hosts.yml -m shell -a "tcpdump 'tcp and host paas.cvte.com and tcp[tcpflags] != tcp-syn and tcp[tcpflags] != tcp-ack ' -nn -A -s 0 -l -i any -e -f -tttt -vv > /tmp/kong.debug" -b

    上述命令抓取与真实后端 paas.cvte.com 的交互数据,同时显示解析出的内容保存到 /tmp/kong.debug 文件。
    ansible使用-b选项表示该机器上需要使用sudo(或者说ansible的become_user来执行tcpdump命令)

    如果此时tcpdump抓包正常开始了,还需要新打开一个终端窗口抓取strace的话,同样进入/data/orchsym-installer/deploy-targets/tianzheng3-prod/default 目录,然后执行下述命令,自动分析 kong-101 进程的 nginx worker process 的pid 并使用 strace attach上去抓取网络相关的底层调用:

    ansible kong -i hosts.yml -m shell -a "strace -T -tt -s 100000 -e trace=network -o /tmp/file.out -p $(ps -ef|grep $(ps -ef|grep -i "kong-101"|grep -v grep|awk '{print $2}')|grep worker|awk '{print $2}'|xargs -n 24|tr -s " " ",")"

    然后可以在管理平台执行操作,重新异常问题。结束后。使用ctrl-c终止上述两个ansible抓包调用。准备汇总抓包数据:

    ansible kong -i hosts.yml -m fetch -a "src=/tmp/out.txt dest=/tmp/ansible_tcpdump"
    ansible kong -i hosts.yml -m fetch -a "src=/tmp/file.out dest=/tmp/ansible_strace"
    ``
    上述命令,使用ansible fetch模块从kong的主机组上拷贝远程 /tmp/out.txt 和 /tmp/file.out 文件到当前机器的指定目录。
    随后可以打包目录并下载下来分析了:
    

    tar -cvj -f ansible_tcpdump.debug.tar.bz2 /tmp/ansible_tcpdump
    tar -cvj -f ansible_strace.debug.tar.bz2 /tmp/ansible_strace

    相关文章

      网友评论

          本文标题:2020-06-18 ansible快速批量抓取指定机器组上的t

          本文链接:https://www.haomeiwen.com/subject/lkauxktx.html