快速简介
打开两个登录到部署机的窗口,进入/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
网友评论