最近几月公司接了上海电信新的项目“智慧社区”,此项目中我的角色是FAE,负责项目的现场实施、部署方案、升级方案、运维和客服。电信各部门的接口人每次看见我的口头禅就是“有事找XX”,XX当然就是我的名字啦。呵呵,很无奈吧,这么多事对方都是一个个部门的接口人,到我这就是一个人了。
抛砖引玉就写到这了,言归正传,开始描述孵化出此脚本的过程。
最近几日,研发发现程序调用电信给出的一个http认证接口小概率的会发生失败。然后查程序也查不出个所以然来,就发邮件给电信网工。电信网工回复的邮件内容大致概括为“不是只有你一家程序在调用我们接口,我们查过日志了,没有问题。请检查或重启你们自己的程序。”
这下研发着急了,业务平台啊,不是随随便便就能重启的。紧接着就是怀疑本机系统啊、网络啊,是不是这方面的问题造成的(做运维的兄弟们大家心里都明白,这是研发的通病,不会承认是自己开发的程序有问题,呵呵)。
在此情景下,邮件自然而然的就到我这了咯。我把前因后果看了遍,想了一个比较可行的方法,让tcpdump去验证吧。没办法,本人责任心比较重。
tcpdump默认是在前端显示的,为了实现自动化运维,肯定得自己写脚本了。
罗嗦了半天,各位看官请见谅,以下就是整个脚本的全部内容:
- #!/bin/bash
- #tcpdump_port.sh
- #author zhangyu
- # Source function library.
- . /etc/rc.d/init.d/functions
- DATE=`date +%F`
- PIDFILE=/tmp/tcpdump.pid
- LOGPATH=/root/tcpdump
- LOCALHOST=192.168.2.40
- REMOTEHOST=www.baidu.com
- PORT=80
- start() {
- if [ -f $PIDFILE ]; then
- {
- PID=`sed '1d' $PIDFILE`
- echo "Tcpdump (pid $PID) is running ..."
- }
- else
- {
- nohup tcpdump -e -f -nn -vvv -xx host $LOCALHOST and $REMOTEHOST and tcp port $PORT -w "$LOGPATH/$DATE.pcap" &
- ps -ef |grep tcpdump|grep -v grep|awk '{print $2}' >$PIDFILE
- echo -e "Tcpdump start [ \033[32;49;1mok\033[39;49;0m ]"
- }
- fi
- }
- stop() {
- if [ -f $PIDFILE ]; then
- {
- PID=`sed '1d' $PIDFILE`
- kill -2 $PID
- rm -rf $PIDFILE
- echo -e "Tcpdump stop [ \033[32;49;1mok\033[39;49;0m ]"
- }
- else
- {
- echo "Tcpdump is stopped"
- }
- fi
- }
- status() {
- if [ -f $PIDFILE ]; then
- {
- PID=`sed '1d' $PIDFILE`
- echo "Tcpdump (pid $PID) is running ..."
- }
- else
- {
- echo "Tcpdump is stopped"
- }
- fi
- }
- case "$1" in
- start)
- start
- ;;
- stop)
- stop
- ;;
- restart)
- stop
- start
- ;;
- status)
- status
- ;;
- *)
- echo "Usage:$0 {start|stop|restart|status}"
- ;;
- esac
代码中LOCALHOST、REMOTEHOST和PORT三者的变量值我都修改过了,公网实际在跑的服务器肯定不是这样的啦,你懂的!
脚本执行的目前简单说一下,当192.168.2.40主机向www.baidu.com:80请求时,会生成TCP的交互记录,并生成日志保存在/root/tcpdump/目录下。附个图,大家看的更明白些。
至于tcpdump是干什么的,怎么用,还请自行百度、google、51CTO都行,不过最好的帮助可是man tcpdump哦。
最后在crontab里做个计划任务,每天凌晨restart一下脚本,自动化运维完成了。至于是不是把脚本加入rc.local啊、/etc/init.d/下啊,暂时先不考虑。
脚本虽然不复杂,就那么几行代码,但是严谨的态度一定要有,没有N次的测试和优化,我是绝对不会把它放入公网正在运行的服务器中的,希望借此文能激励下做研发的兄弟们。
希望是美好的,现实是……
PS:本文技术部分如有错误,还望高人路过指点一二,万分感谢!
转载于:https://blog.51cto.com/lan2003/1131414