《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群架构》——2.2 网络流量监控与分析工具Ntop和Ntopng

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介:

本节书摘来自华章计算机《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群架构》一书中的第2章,第2.2节,作者:高俊峰著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.2 网络流量监控与分析工具Ntop和Ntopng

对于单台服务器网络故障的排查,iftop工具可以轻松实现,但是在监控一个庞大的服务器网络,并且要分析每台主机以及端口的网络状态时,iftop就显得爱莫能助了,这个时候就需要一个高效的网络管理系统了。Ntop就是一个功能强大的流量监控、端口监控、服务监控管理系统。
2.2.1 Ntop与MRTG的异同
对于MRTG,读者可能并不陌生,它是一个监控网络链路流量的工具,通过SNMP协议得到设备的流量信息,并将信息通过图形展示给用户。MRTG配置简单,容易使用,它的优点是耗用的系统资源小,可以非常直观地显示流量负载,但是它也有很多缺点,例如:只能用于TCP/IP网络、数据不能重复使用、无法记录更详细的流量状态、没有管理功能等,而这些刚好是Ntop最擅长的地方。
Ntop是网络流量监控中的新贵,它是一种网络嗅探器,在监测网络数据传输、排除网络故障方面功能十分强大。它通过分析网络流量来判断网络上存在的各种问题,还可以监控是否有黑客正在攻击网络,如果网络突然变缓慢,通过Ntop截获的数据包,可以确定是什么类型的数据包占据了大量带宽,以及数据包的发送时间、数据包传送的延时、数据包的来源地址等,通过这些信息,运维人员可以及时做出响应,或者对网络进行调整,从而保证网络正常、稳定运行。
2.2.2 Ntop与Ntopng的功能介绍
Ntop提供了命令行界面和Web界面两种工作方式,通过Web界面,可以清晰展示网络的整体使用情况、网络中各主机的流量状态与排名、各主机占用的带宽以及各时段的流量明细、局域网内各主机的路由、端口使用情况等。
根据官方的介绍,Ntop主要提供以下几个功能:
可以自动从网络中获取有用的信息。
可以将获取的数据包信息转换为可识别的格式。
可以记录网络的通信时间和过程。
可以对网络中失败的通信进行分析。
可以发现网络环境中通信的瓶颈。
可以自动识别客户端正在使用的操作系统。
通过对Ntop功能的介绍,不难看出,它就是从分析网络流量角度来确定网络上存在的各种问题,说得更简单一点,它就是一个抓包工具,然后通过归纳和绘图实现更多的功能。
在Ntop版本更新到Ntop5.x之后,官方宣布停止Ntop版本的更新,继而推出替代版本Ntopng。Ntopng在Ntop版本的基础上,去掉了一些拖沓冗长的功能,同时新增了网络流量实时监控功能,并将各个功能进行重新梳理和整合,使整个流量展示更加智能化和合理化。
Ntopng使用Redis键值服务按时间序列存储统计信息,通过这种方式实现了流量状态实时展示。与Ntop类似,Ntopng也内置Web服务功能,同时,也支持命令行界面和Web界面两种工作方式,但是Ntopng降低了对CPU和内存的使用率,资源消耗更少。Ntopng除了可以实现Ntop的所有功能外,新增的功能如下:
以图形的方式动态展示流量状态。
实时监控网络数据并实时汇总。
以矩阵图的方式显示IP流量。
可以生成基于HTML5/AJAX的网络流量统计。
支持历史流量数据分析。
基于HTML5的动态图形用户界面。
下面分别介绍Ntop和Ntopng的安装及使用技巧。
2.2.3 安装Ntop与Ntopng
1 . 安装Ntop
Ntop支持Win32、Linux、UNIX、BSD等平台。可以在Ntop官方网站http://www.ntop.org/下载对应的版本。Ntop的安装可以通过yum源方式和源码编译安装两种方式实现,为了能够使用最新的稳定版本,这里采用源码编译的方式来安装,安装过程如下。
(1)安装Ntop必需的软件包
这里安装的操作系统环境为CentOS 6.3 x86_64版本。为了顺利完成源码编译,需要安装Ntop必需的一些软件包,操作如下:

[root@monitor ~]# yum -y install libpcap libpcap-devel libtool libpng gdbm gdbm-
devel glib libxml2-devel pango pango-devel gd zlib zlib-devel
[root@monitor ~]# yum -y install svn rrdtool rrdtool-devel python python-devel  
GeoIP GeoIP-devel

(2)编译安装Ntop
这里下载的是ntop-5.0.1版本,编译安装过程如下:

[root@monitor ~]# tar zxvf ntop-5.0.1.tar.gz
[root@monitor ~]# cd ntop-5.0.1
[root@monitor ~]# ./autogen.sh --with-tcpwrap
[root@monitor ~]# make 
[root@monitor ~]# make install

其中,--with-tcpwrap选项用于支持tcp_wrappers访问控制,以保证Ntop Web访问的安全。
(3)简单配置Ntop
在Ntop安装完成后,默认的数据存放目录为/usr/local/var/nto。为了保证安全,建议以低权限用户nobody身份运行Ntop进程,因此,可能需要对Ntop默认的数据存放目录进行权限调整,执行如下命令即可:

[root@monitor ~]# chown -R nobody /usr/local/var/ntop

通过Ntop的Web页面可以修改Ntop的设置或关闭Ntop服务,但是必须通过管理员用户的验证,Ntop默认的管理员为admin,密码为空,因此,需要为其设置一个密码。通过如下命令即可设置admin用户的密码:

[root@monitor ~]# ntop –A

然后重复输入两次密码即可。
Ntop的Web页面在默认情况下没有访问限制,有时候为了网络的安全,建议设置授权访问,只有授权的主机才能访问此Web页面,这可以通过Linux系统本身的tcp_wrappers功能实现,授权过程如下:

[root@monitor ~]# vim /etc/hosts.allow
ntop: 192.168.12.188
[root@monitor ~]# vim /etc/hosts.deny
ntop: ALL

这里设置只允许IP地址为192.168.12.188的主机可以访问Ntop的ntop服务,禁止其他所有IP访问。
2 . 安装Ntopng
Ntopng是目前Ntop官方的主推版本,可以从http://www.ntop.org/ 下载目前最新的ntopng-1.1源码版本进行编译安装。不过为了安装方便,官方推出了Ntopng的yum源仓库,通过yum源仓库可以轻松安装Ntopng,这里就采用yum源方式进行安装。
(1)设置yum源
首先为Ntopng创建一个yum源仓库,内容如下:

[root@localhost ~]# cat /etc/yum.repos.d/ntop.repo
[ntop]
name=ntop packages
baseurl=http://www.nmon.net/centos/$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.nmon.net/centos/RPM-GPG-KEY-deri

然后下载一个epel的yum源:

[root@localhost ~]# wget  \
> http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@localhost ~]# rpm –Uvh epel-release-6-8.noarch.rpm

(2)安装Ntopng
在设置好两个yum源后,安装Ntopng就变得十分简单了,只需执行如下操作即可:

[root@localhost ~]# yum clean all
[root@localhost ~]# yum update
[root@localhost ~]# yum install pfring n2disk nProbe ntopng ntopng-data nbox

(3) 配置Ntopng
在Ntopng安装完成后,默认的配置文件模板是/etc/ntopng/ntopng.conf.sample,可以将此文件重命名为ntopng.conf,然后在这个配置文件中添加一些配置信息,例如:

[root@localhost ~]# cat /etc/ntopng/ntopng.conf
-G=/var/tmp/ntopng.gid
--local-networks "192.168.12.0/24"  
--interface em2    
--user nobody    
--http-port 3000

相关参数含义如下:
-G指定存储Ntopng进程号的文件路径。
--local-network指定要监控的本地子网段。
--interface em2指定监听em2网卡上的流量。
--user指定运行Ntopng服务所使用的账户。
--http-port指定Ntopng的Web服务端口号,如果不指定,默认端口为3000。
(4)启动Ntopng服务
在启动Ntopng服务之前,需要先启动redis服务。redis的功能之前介绍过,主要为Ntopng提供键值存储。下面首先启动redis服务,然后启动Ntopng服务,执行操作如下:

[root@localhost ~]# service redis  start
[root@localhost ~]# service ntopng  start

为了保证redis和Ntopng服务在以后可开机自启动,还需要执行如下操作:

[root@localhost ~]# chkconfig ntopng on
[root@localhost ~]# chkconfig redis on

最后,就可以通过Web方式来访问Ntopng提供的服务了,默认登录用户名和密码均为admin,可在登录后进行修改。
2.2.4 Ntop和Ntopng的使用技巧
在完成Ntop安装后,执行如下命令即可启动Ntop服务:

[root@networkserver ~]# ntop -i em1 -L –d

这里通过Ntop命令监控网卡em1的流量状态,相关参数的含义将在后面章节详细介绍。在执行此命令后,Ntop服务的日志输出将重定向到系统的/var/log/messages文件中,同时将开启默认的3000端口作为Web界面服务端口,执行http://IP:3000即可访问Ntop提供的Web监控界面。

  1. Web界面下Ntop的使用方法与技巧
    Ntop的Web界面主要由7个主栏目组成,下面介绍每个栏目中需要重点关注的功能点。

“About”栏目包括Ntop的简单介绍和一些在线手册等帮助信息。
“Summary”栏目是对目前网络流量的一个整体概况,其中子栏目“Traffic”可以显示全局流量统计,主要包含网络接口流量统计、协议流量分布、应用协议流量统计等,网络流量会以柱面图、曲线图和明细表格的形式展示。图2-3显示的是L2/L3协议对应的流量分布图。

image

“Summary”下的子栏目“Host”主要显示所有可监控主机的IP地址、地理位置、MAC地址、数据发送接收量、目前活动连接数等各种信息,在主机流量监控方面,可通过Bytes方式统计,也可以用packets方式统计,要了解每个主机的详细流量信息,只需单击对应的Host便可查看,图2-4就是某主机在某时刻的流量连接流视图。

image

通过图2-4可以非常清晰地了解某主机在某时刻的连接状态,中间的竖柱表示的是IP为“125.76.237.248”的这台主机,然后以竖柱为中心,分成左右两个部分,左边部分表示外部IP与“125.76.237.248”这台主机之间的发送、接收数据流量,右边部分表示“125.76.237.248”这台主机与外部IP之间的发送、接收数据流量,连接的宽度表示发送或接收数据量的大小。
在“Summary”下的子栏目“Host”中,在查看每台主机的详细流量页面上有一个按时段的流量统计功能,这个功能非常有用,通过这个统计可以查看某主机在一天任意一个小时内发送、接收的数据流量,同时还可以通过饼状图进行集中汇总。
“Summary”下的子栏目“Network Load”用于网络负载统计,通过该项功能可以查看最近10分钟、一小时、一天、一个月的网络流量信息。图2-5展示的是一个小时内的网络负载统计。

image

“All Protocols”栏目主要用于查看各主机发送、接收的数据量,并将数据以TCP、UDP、ICMP的方式进行分类统计。其中,子栏目“Throughput”主要显示所有可见主机的吞吐量,子栏目“Activity”主要显示当前网络可见主机在24小时中每小时的流量状态,并且每个时段根据流量的大小分别用不同的颜色进行标注。
“IP”栏目主要对各台主机中应用层协议产生的流量进行统计。例如,子栏目“Summary”主要对各主机中HTTP、FTP、Mail、SSH、DNS等服务产生的流量进行详细统计,同时还可以统计多播信息、流量分布等;子栏目“Traffic Directions”主要用于统计端到端的流量信息,可以统计本地到本地、本地到远端、远端到本地、远端到远端的流量状态;子栏目“Local”主要是统计局域网络内各主机使用状况,比如可以统计本地路由使用信息、本地端口使用信息、Active Sessions连接信息等。
“Utils”栏目主要包括RRD参数的配置、转存Ntop的统计信息,以及查看Ntop运行日志信息等功能。
“Plugins”栏目用于继承Ntop插件工具,默认安装的插件有NetFlow、rrdPlugin、sFlow等,其中,NetFlow插件可用于设置、激活、停用NetFlow支持,在启用NetFlow后,Ntop就可以统计NetFlow的详细信息,包括NetFlow的格式、数据量及端口流量。而rrdPlugin插件主要用于生成流量图,它比MRTG更灵活,非常适合用shell、perl等程序来调用,以生成所需的图片。sFlow是一种新的网络监测技术,可适应超大网络流量下的流量数据分析,在Ntop中启用sFlow支持后,不但可以降低实施成本,也可以解决网络管理中面临的很多问题。
最后一个栏目“admin”是一个管理选项,访问此栏目时需要提供管理员密码,有Ntop的参数配置、登录Ntop的密码设置、配置用户访问Ntop的页面、Ntop的启动与关闭等几个功能选项。这些Ntop的配置与管理功能非常简单,这里不过多讲述。
2 . 命令行下Ntop的常用参数
Ntop也可以在命令行下使用。虽然在命令行下没有那么直观,但是添加和修改配置非常迅速,并且还能实现很多Web界面下无法完成的功能。执行“ntop -h”命令即可显示Ntop在命令行下可使用的所有参数信息。在命令行下Ntop常用的参数及含义如表2-3所示。
3 . Ntopng的使用方法与技巧
与Ntop的使用方法类似,Ntopng的Web监控界面更加智能化,功能展示更加统一和人性化。Ntopng的核心功能是实时数据流展示。图2-6是登录Ntopng后的一个主界面,中间的“Top Flow Talkers”部分就是流量实时展示界面。
image

从图2-6可以看出,Ntopng的Web界面主要分为Home、Flows、Hosts和Interfaces四个主栏目。其中“Home”栏目主要是从整体上展示并统计发送、接收的数据流;“Flows”栏目是基于DPI的自动程序或服务探测程序生成的实时数据报告,主要用于统计活跃的数据流,并将数据流以协议类型、应用类型、数据量大小等方式进行详细统计,如图2-7所示。

image

通过图2-7可以很清晰地看出每条数据流的发送方和接收方,而“Breakdown”列展示了发送和接收数据量的大小,单击右上角的“Applications”按钮,还可以根据不同的应用类型,例如HTTP、ICMP、DNS等,有选择地查看活跃的数据流状态。
“Hosts”栏目显示了所有Ntopng可见的主机信息,可分类显示本地的或远程的主机列表,还可以显示每台主机间的交互信息、本地主机矩阵图等信息,如图2-8所示。
image

在图2-8中,Ntopng展示了每台主机的主机名、IP地址、主机所处地域(本地或者远程)、数据收集持续时长、发送/接收数据量、主机网络吞吐量、数据传输量等信息。如果想要了解每台主机更详细的统计信息,可以在图2-8中单击每台主机的IP进入主机详细信息页,如图2-9所示。

image

从图2-9可以看出,每台主机的详细信息页中又分很多小栏目,默认打开的页面展示了此主机的MAC地址、IP地址、操作系统类型、主机名、数据收集的开始和截止时间、数据发送和接收量等信息,单击图2-9中的“Traffic”栏目,可以根据协议类型查看数据的通信量,并且还通过饼状图进行了汇总,如图2-10所示。
image

在图2-10中,Ntopng将通信流量以TCP、UDP、ICMP三种协议类型进行分别统计,并且通过饼状图方式进行整体汇总,这对于了解网络中某个通信协议的流量是非常有用的。
单击图2-9中的“Packets”栏目,可以根据发送、接收包的数量进行流量统计,如图2-11所示。
image

“Packets”栏目展示的是数据包发送量、接收量的分布图。从图2-11中可以看到,在发送的数据包中,数据包量高达128的占总发送量的71.2%,在接收的数据包中,数据包量高达256的占总接收量的83.8%,这个功能可以帮助网络管理员判断网络中发送或接收数据包的数据及占据的比例,网络管理员可以据此来判断网络是否存在异常,进而解决潜在的网络问题。
单击图2-9中的“Protocols”栏目,可以根据应用程序的类型进行流量统计,如图2-12所示。

image

图2-12展示了DNS、HTTP、ICMP、MySQL、SSH等应用协议在一段时间内的发送、接收数据量,哪个应用程序传输的数据量大,哪个传输的数据量小,一目了然。通过此功能,可以迅速发现哪个应用程序存在问题,对于短时间内流量非常大的应用协议,管理员就需要重点关注了。
图2-9中的“Flows”栏目、“Talkers”栏目、“Current Contacts”栏目都比较浅显易懂,这里不再介绍。最后重点关注下“Historical”栏目,如图2-13所示,此栏目主要用于将数据流量生成流量图,进而用于分析历史流量数据,可以根据传输协议、应用协议类型等方式选择不同时段来分析数据发送、接收的趋势,通过这些生成的历史流量图,可以分析网络一段时间内的运行状态,并为网络管理和网络故障排除提供依据。
Ntopng的最后一个主栏目是“Interfaces”,主要用于对监控的网络接口的数据流量进行分析,可以查看监控接口传输数据量的总大小、接收数据包的总个数以及包大小分布状况、每个应用协议产生的流量大小、历史流量数据查询等,可以从整体上了解网络接口的通信状态。

image

Ntopng也提供了简单的Web管理功能,通过Web界面可以添加、修改、删除管理员用户,还可以将每台主机的数据以JSON的格式导出。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
21天前
|
30天前
|
存储 安全 算法
网络安全与信息安全:构建安全数字生活的基石
【10月更文挑战第5天】 在数字化时代,网络安全与信息安全已成为维护个人隐私、企业机密和国家安全的重要防线。本文旨在探讨网络安全漏洞的形成与防范、加密技术的应用及其重要性,以及提升公众安全意识的必要性。通过深入浅出的方式,帮助读者理解网络安全的核心要素,并强调每个人都是网络安全生态中不可或缺的一环。
52 1
|
1月前
|
搜索推荐 程序员 调度
精通Python异步编程:利用Asyncio与Aiohttp构建高效网络应用
【10月更文挑战第5天】随着互联网技术的快速发展,用户对于网络应用的响应速度和服务质量提出了越来越高的要求。为了构建能够处理高并发请求、提供快速响应时间的应用程序,开发者们需要掌握高效的编程技术和框架。在Python语言中,`asyncio` 和 `aiohttp` 是两个非常强大的库,它们可以帮助我们编写出既简洁又高效的异步网络应用。
108 1
|
18天前
|
安全 网络架构
MPLS线路构建稳定、高效网络的优选方案
【10月更文挑战第17天】MPLS线路构建稳定、高效网络的优选方案
42 5
|
16天前
|
运维 供应链 安全
SD-WAN分布式组网:构建高效、灵活的企业网络架构
本文介绍了SD-WAN(软件定义广域网)在企业分布式组网中的应用,强调其智能化流量管理、简化的网络部署、弹性扩展能力和增强的安全性等核心优势,以及在跨国企业、多云环境、零售连锁和制造业中的典型应用场景。通过合理设计网络架构、选择合适的网络连接类型、优化应用流量优先级和定期评估网络性能等最佳实践,SD-WAN助力企业实现高效、稳定的业务连接,加速数字化转型。
SD-WAN分布式组网:构建高效、灵活的企业网络架构
|
2天前
|
监控 安全 网络安全
企业网络安全:构建高效的信息安全管理体系
企业网络安全:构建高效的信息安全管理体系
18 5
|
1天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
12 3
|
11天前
|
数据采集 存储 机器学习/深度学习
构建高效的Python网络爬虫
【10月更文挑战第25天】本文将引导你通过Python编程语言实现一个高效网络爬虫。我们将从基础的爬虫概念出发,逐步讲解如何利用Python强大的库和框架来爬取、解析网页数据,以及存储和管理这些数据。文章旨在为初学者提供一个清晰的爬虫开发路径,同时为有经验的开发者提供一些高级技巧。
11 1
|
12天前
|
监控 Devops jenkins
自动化部署与监控:打造高效的DevOps流程
【10月更文挑战第24天】在追求快速迭代和持续交付的软件开发时代,DevOps成为提升团队效率的关键。本文深入探讨如何构建一个高效的DevOps流程,包括自动化部署、监控和故障排除等关键环节。通过实际案例,我们将学习如何利用工具简化运维任务,确保系统稳定运行,并快速响应生产问题。
27 2
|
21天前
|
消息中间件 监控 网络协议
Python中的Socket魔法:如何利用socket模块构建强大的网络通信
本文介绍了Python的`socket`模块,讲解了其基本概念、语法和使用方法。通过简单的TCP服务器和客户端示例,展示了如何创建、绑定、监听、接受连接及发送/接收数据。进一步探讨了多用户聊天室的实现,并介绍了非阻塞IO和多路复用技术以提高并发处理能力。最后,讨论了`socket`模块在现代网络编程中的应用及其与其他通信方式的关系。
下一篇
无影云桌面