监视与记录本地服务器进程/端口占用带宽流量

由于公司的问题排查需求,需要将公网服务器上占用带宽流量较高的进程或者端口进行记录和保存,以便以后查询问题时可以进行核实。

这个问题纠结了1、2天,使用python应该是可以满足需求,奈何本菜鸟的python实在是拿不出手,所以只能依靠Linux成品的小工具与Shell来实现了。

Linux上的iftop与nethogs两个工具比较符合要求,但是这两个工具都无法完美的将内容记录下来,如果使用重定向的方式记录内容,那么记录下来的东西并不是文本格式,使用cat查看是没问题的,但是想要进行编辑或者过滤,就不可行了,有兴趣的可以自己试试看。

后来同事发现了iftop的新版本,iftop-1.0pre3(http://freecode.com/projects/iftop),可能需要翻墙才可以访问,并且安装iftop-1.0pre3需要安装一些依赖,yum与apt-get都没有办法获取到,只能自己去搜索编译了,依赖的安装太过繁杂,各位自行搜索查找吧。

安装好iftop-1.0pre3之后,使用-t参数即可将内容打印到屏幕,此时重定向就可以正常的输出内容。

#!/bin/bash

line()
{
    cols=`tput cols`
    for k in `seq 1 ${cols}`
        do
            echo -n "-"
        done
}

my_set()
{
    USER=`whoami`
    GROUP=`groups`
    timestamp=`date +%F_%T`
    days="/tmp/net_status/`date +%F`"
    file_path="/tmp/net_status/netinfo.log.log"
    tmp_file_path="/tmp/net_status/tmp_netinfo.log"
    # file_path="/tmp/netinfo.log"
    net_status_file="${days}/`date +%H`.log"
    total_rate=`cat ${tmp_file_path} | grep "Total send and receive rate:" | awk ‘{print $7}‘`
}

tidy()
{
    sudo /usr/local/sbin/iftop -L 20 -s 10 -o 10s -N -P -n -t > ${tmp_file_path}
    line_num=`cat ${tmp_file_path}|wc -l`
    line_head=`echo $((${line_num}-9))`
    line_tail=`echo $((${line_head}-3))`
    sudo cat ${tmp_file_path} | head -${line_head} | tail -${line_tail} > ${file_path}
    # sed -n ‘4,43p‘ ${tmp_file_path} > ${file_path}
}

check()
{
    if [ ! -d ${days} ];then
        sudo mkdir $days
        sudo chown -R ${USER}.${GROUP} ${days}
    fi
}

output()
{
    m=-1
    n=0
    echo ""  >> ${net_status_file}
    echo ${timestamp} >> ${net_status_file}
    echo "Total send and receive rate: ${total_rate}" >> ${net_status_file}
    line >> ${net_status_file}
    echo "" >> ${net_status_file}
    echo "Number\tSource Addr&Port \t   \t Destination Addr&Port\t\tSend\t\tReceive" >> ${net_status_file}
    echo "" >> ${net_status_file}
    for i in `seq 1 20`
    do
        m=$(($m+2))
        n=$(($n+2))
        net_sou=`cat ${file_path} | sed -n "${m},${n}p" | awk ‘NR==1{print $2}‘`
        net_des=`cat ${file_path} | sed -n "${m},${n}p" | awk ‘NR==2{print $1}‘`
        rate_sou=`cat ${file_path} | sed -n "${m},${n}p" | awk ‘NR==1{print $6}‘`
        rate_des=`cat ${file_path} | sed -n "${m},${n}p" | awk ‘NR==2{print $5}‘`
        echo "No $i\t${net_sou} \t - \t ${net_des}\t\t$rate_sou\t\t$rate_des " >> ${net_status_file}
    done
    line >> ${net_status_file}
    echo "" >> ${net_status_file}
    echo "" >> ${net_status_file}
    echo "" >> ${net_status_file}
    echo "" >> ${net_status_file}
}

main()
{
    my_set
    tidy
    check
    output
}

main

领导着急要脚本,所以没有进行内容的优化,也没有使用SQL进行内容存储,以后有时间可以再进行优化或者改进,使其更方便查询检索,这里算是做个记录了。

效果图:

时间: 2024-08-08 18:32:25

监视与记录本地服务器进程/端口占用带宽流量的相关文章

在webstorm中怎么配置本地服务器

前端IDE有挺多的,比如Dreamwear,Hbuilder,Webstorm:还有许多纯文本编辑器.不过我还是比较喜欢Webstorm.因为webstorm自带了一个本地服务器.如果你把项目放到本地服务器,比如tomcat,就会出现一个跨域的问题.而你有不想copy来copy去,当然,如果你想,也是可以的.我们还可以在Webstorm中配置本地服务器. Settings  配置本地服务器,配置本地服务器的端口. 

微信开发本地服务器映射外网服务器步骤顺序

1.这里推荐http://ngrok.ciqiuwl.cn/  可以使用,ngrok官网的连接失败,据说是被墙了 2.在微信平台把相关信息填写好,暂时不提交(微信公众平台---基本配置里) 3.本地搭建nodejs服务器,写好相关代码 ,可参考:https://www.cnblogs.com/xuange306/p/4971702.html 4.启动本地服务器 5.用ngrok映射本地服务器,端口号要改为跟本地一致的 6.微信公众号页面提交 7.如果提示token验证失败,则查看代码是否有错,改

在服务器本地监控服务端口命令之ss

在服务器本地监控服务端口命令之ss 当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢.可能你不会有 切身的感受,但当服务器维持的连接达到上万个的时候,使用netstat等于浪费 生命,而用ss才是节省时间.天 下武功唯快不破.ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag.tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中 第一手的信息,这就确保了ss的快捷高效.当然,如果你的系统中

如何搭建svn本地服务器,管理本地的代码

搭建svn本地服务器,下面是具体的步骤介绍. 一.准备工作 1.下载svn服务器端:Subversion. 到官方网站(http://s version.tigris.org/)下载最新的服务器安装程序.目前最新的是1.8.9版本. 注意:不要下载源码.源码里面没有bin文件夹.源码需要自己在unix,或者linux,或者cygwin等环境下编译,这关系另一个课题.为了简化,直接下载安装版本. 2.获取客户端程序:TortoiseSVN 从官方网站http://tortoisesvn.net/d

Android客户端与本地服务器Socket通信

Android客户端与本地服务器Socket通信 Socket服务器运行结果图?? 一.客户端和服务器端的选择: 客户端是我们手机端,关于服务器端,只要安装了JDK,自然就拥有通讯的功能,我们只需要在Eclipse或者MyEclipse中写好文章中服务器端的代码,运行起来即可,用accept()方法启动服务器端,等待客户端的连接,在未连接的情况下,服务器端处于堵塞的状态. 二.客户端注意事项 andriod客户端添加网络访问权限 <uses-permission android:name="

oracle 的服务器进程(PMON, SMON,CKPT,DBWn,LGWR,ARCn)

来着TOM的<oracle 编程艺术 9i,10g,11g> PMON PMON,进程监视.PMON主要有3个用途: 1,在进程非正常中断后,做清理工作.例如:dedicated server失败了或者因为一些原因被杀死,这是PMON的工作分两种.第一,是对dedicated server所做的工作进行恢复或撤销.第二:是释放dedicated server占用的资源.PMON会把失败进程的未提交的工作进行rollback,释放锁,释放SGA空间 2,在进程abort后,PMON进行清理工作.

利用xampp配置本地服务器

前言 在我的印象中,每换一次电脑,每重装一次系统,都要重新配置环境,然而和上文中配置java环境变量一样重要的是配置本地的服务器环境,我一直用的都是xampp集成环境,然而,TMD每次装完开启Apache都说端口被占用之类的,总之各种启动不了,今天我算是彻底领悟了,下面给出一次成功的方法以及可能碰到的各种问题和注意事项! 什么是xampp 借用百度百科:XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包.这个软件包原来的名字是 LAMPP,但是为了避免误解,最

[ 搭建Redis本地服务器实践系列二 ] :图解CentOS7配置Redis

上一章 [ 搭建Redis本地服务器实践系列一 ] :图解CentOS7安装Redis 详细的介绍了Redis的安装步骤,那么只是安装完成,此时的Redis服务器还无法正常运作,我们需要对其进行一些配置,这个章节我们重点来讲解下如何对Redis配置文件进行配置才能顺利的启动Redis服务. 要了解Reids的配置项,我们需要先来认识一个脚本文件redis_init_script,从名字我们就能看出来,他就是Redis的初始化脚本,那么这个脚本文件长什么样子,里面有什么内容,又该怎么找到他呢?哈哈

[ 搭建Redis本地服务器实践系列三 ] :图解Redis客户端工具连接Redis服务器

上一章 [ 搭建Redis本地服务器实践系列二 ] :图解CentOS7配置Redis  介绍了Redis的初始化脚本文件及启动配置文件,并图解如何以服务的形式来启动.终止Redis服务,可以说我们的Redis本地服务器已基本搭建完成,那可能就有小伙伴要问了,什么叫基本搭建完成,原因是此时的Redis服务虽然已经可以正常启\停,但是客户端还无法远程连接到Redis并执行响应的操作.若要实现远程客户端正常连接,我们仍需要对Redis启动配置文件进行一些设置,这个章节我们重点来讲解下如何对Redis