linux怎么查看nginx的流量
1[root@localhost ~]# ps -ef |grep nginx
看是否存在主进程和php-fpm子进程
nginx: master process
00:00:00 php-fpm:xxx
2查看nginx监听的端口是否存在
[root@localhost ~]# netstat -tlnup|grep nginx
tcp 0 0 0000:80 0000: LISTEN 12891/nginx
3如果nginx已经做成服务
[root@localhost ~]# service nginx status
nginx (pid 12891) 正在运行
看是否正在运行
这个不会有人帮你写出个完整的shell。因为每台机器的操作系统都不一定吻合,不过我可以给你个自己做的参考:
1,启动你服务器的snmp服务器,编辑/etc/snmp/snmpdconf
修改里面的 com2sec notConfigUser default <你的community名字>, 有困惑,可以在网上搜索snmp服务配置。然后/etc/initd/snmpd start 启动服务。
2 安装net-snmp
yum install net-snmp
3验证你服务器snmp是否正确安装:
snmpwalk -v 2c -c <你自己设置的community> 127001
有返回信息就是正确。
4 写你shell程序,通过snmpwalk可查看各网卡端口流量,可根据下面我提供的信息你自己选择你要监控的端口。
[root@AAA snmp]# snmpwalk -v 2c -c <你自己定义community> 127001 IF-MIB::ifHCOutOctets
IF-MIB::ifHCOutOctets1 = Counter64: 2458933344
IF-MIB::ifHCOutOctets2 = Counter64: 1714076390
IF-MIB::ifHCOutOctets3 = Counter64: 0
IF-MIB::ifHCOutOctets4 = Counter64: 0
[root@AAA snmp]# snmpwalk -v 2c -c c <你自己定义community> 127001 IF-MIB::ifHCInOctets
IF-MIB::ifHCInOctets1 = Counter64: 2458940740
IF-MIB::ifHCInOctets2 = Counter64: 3011885260
IF-MIB::ifHCInOctets3 = Counter64: 0
IF-MIB::ifHCInOctets4 = Counter64: 0
实际shell赋值,可以通过snmpget命令而不是snmpwalk。比如:
[root@AAA snmp]# snmpget -v 2c -c <你自己定义community>127001 IF-MIB::ifHCOutOctets1
IF-MIB::ifHCOutOctets1 = Counter64: 2458947627
这样,你就可以通过shell,吧值赋给变量,例子如下:
[root@AAA snmp]# var=`snmpget -v 2c -c <你自己定义community> 127001 IF-MIB::ifHCOutOctets1 | awk '{print $4}'`;echo $var
2458981520
我已经提供全过程的信息给你了。具体你琢磨着去弄你的shell吧。
哈,有点头晕。。。如果只监测自己机器,楼上仁兄那个最好。采纳他吧。
随着网络流量的增加,服务器开始面临繁重负载,这时就需要搭配一套HTTP负载均衡系统了,那么Linux下该如何配置HTTP负载均衡系统呢?随小编一起来学习一下吧。
如今对基于互联网的应用和服务的要求越来越大,这给广大的IT管理员施加了越来越大的压力。面对突如其来的流量猛增、自生的流量增加或者是内部挑战(比如硬件故障和紧急维护),不管怎样,你的互联网应用都必须保持随时可用。连现代化的开发运营和持续交付做法也会危及互联网服务的可靠性和一贯表现。
无法预测或缺乏一贯的表现是你所无法承受的。那么,我们如何能消除这些缺点呢?在大多数情况下,一套合适的负载均衡解决方案有望满足这个要求。今天我将为各位介绍如何使用HAProxy搭建一套HTTP负载均衡系统。
HTTP负载均衡简介
HTTP负载均衡是一种网络解决方案,负责在托管相同应用内容的几台服务器之间分配进入的HTTP或HTTPS流量。由于在多台可用服务器之间均衡了应用请求,负载均衡系统就能防止任何应用服务器变成单一故障点,因而提高了整体的应用可用性和响应能力。它还让你可以随着不断变化的工作负载,轻松地缩小/扩大部署的应用系统的规模,只需添加或删除额外的应用服务器。
哪里使用负载均衡、何时使用?
由于负载均衡系统改进了服务器的利用率,最大限度地提高了可用性,只要你的服务器开始面临繁重负载,或者正为一个较庞大的项目规划架构,就应该使用它。事先规划好负载均衡系统的用途是个好习惯。那样,未来你需要扩展环境规模时,它会证明其用途。
HAProxy是什么东东?
HAProxy是一种流行的开源负载均衡和代理系统,面向GNU/Linux平台上的TCP/HTTP服务器。HAProxy采用了单一线程的事件驱动型架构而设计,它能够轻松地处理10G网卡线路速度,现广泛应用于许多生产环境中。其功能特性包括:自动检查健康状况、可定制的负载均衡算法、支持HTTPS/SSL以及会话速率限制等。
我们在本教程中要达到什么样的目的?
在本教程中,我们将逐步介绍为HTTP网站服务器配置基于HAProxy的负载均衡系统这个过程。
前提条件
你至少需要一台(最好是两台)网站服务器来证实所搭建负载均衡系统的功能。我们假设,后端HTTP网站服务器已经搭建并运行起来。
将HAProxy安装到Linux上
就大多数发行版而言,我们可以使用你所用发行版的软件包管理器来安装HAProxy。
将HAProxy安装到Debian上
在Debian中,我们需要为Wheezy添加向后移植功能。为此,请在/etc/apt/sourceslistd中创建一个名为“backportslist”的新文件,其内容如下:
deb http://cdndebiannet/debian wheezybackports main
更新你的软件库数据,并安装HAProxy。
# apt get update # apt get install haproxy
将HAProxy安装到Ubuntu上
# apt get install haproxy
将HAProxy安装到CentOS和RHEL上
# yum install haproxy
配置HAProxy
在本教程中,我们假设有两台HTTP网站服务器已搭建并运行起来,其IP地址分别为1921681002和1921681003。我们还假设,负载均衡系统将在IP地址为1921681004的那台服务器处进行配置。
为了让HAProxy发挥功用,你需要更改/etc/haproxy/haproxycfg中的几个项目。这些变更在本章节中予以描述。万一某个配置对不同的GNU/Linux发行版而言有所不同,会在相应段落中加以注明。
1 配置日志功能
你首先要做的工作之一就是,为你的HAProxy建立合适的日志功能,这对将来进行调试大有用处。日志配置内容位于/etc/haproxy/haproxycfg的global部分。下面这些是针对特定发行版的指令,用于为HAProxy配置日志。
CentOS或RHEL:
要想在CentOS/RHEL上启用日志功能,把:
log 127001 local2
换成:
log 127001 local0
下一步,在/var/log中为HAProxy创建单独的日志文件。为此,我们需要改动当前的rsyslog配置。为了让配置简单而清楚,我们将在/etc/rsyslogd/中创建一个名为haproxyconf的新文件,其内容如下。
$ModLoad imudp $UDPServerRun 514 $template Haproxy,“%msg%/n” local0=info /var/log/haproxylog;Haproxy local0notice /var/log/haproxystatuslog;Haproxy local0 ~
该配置将把基于$template的所有HAProxy消息隔离到/var/log中的日志文件。现在,重启rsyslog,让变更内容生效。
# service rsyslog restart
Debian或Ubuntu:
要想在Debian或Ubuntu上为HAProxy启用日志功能,把:
log /dev/log local0 log /dev/log local1 notice
换成:
log 127001 local0
下一步,为HAProxy配置单独的日志文件,编辑/etc/rsyslogd/中一个名为haproxyconf的文件(或者Debian中的49-haproxyconf),其内容如下。
$ModLoad imudp $UDPServerRun 514 $template Haproxy,“%msg%/n” local0=info /var/log/haproxylog;Haproxy local0notice /var/log/haproxystatuslog;Haproxy local0 ~
该配置将把基于$template的所有HAProxy消息隔离到/var/log中的日志文件。现在,重启rsyslog,让变更内容生效。
# service rsyslog restart
2 设置默认值
下一步是为HAProxy设置默认变量。找到/etc/haproxy/haproxycfg中的defaults部分,把它换成下列配置。
log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 20000 contimeout 5000 clitimeout 50000 srvtimeout 50000
上述配置推荐HTTP负载均衡器使用,但可能不是最适合你环境的解决方案。如果那样,请参阅HAProxy参考手册页,进行适当的改动和调整。
3 网站服务器集群的配置
网站服务器集群(Webfarm)的配置定义了可用的HTTP服务器集群。我们所建负载均衡系统的大部分设置都将放在这里。现在,我们将创建一些基本的配置,我们的节点将在这里加以定义。把从frontend部分到文件末尾的所有配置换成下列代码:
listen webfarm :80 mode http stats enable stats uri /haproxy?stats stats realm Haproxy/ Statistics stats auth haproxy:stats balance roundrobin cookie LBN insert indirect nocache option httpclose option forwardfor server web01 1921681002:80 cookie node1 check server web02 1921681003:80 cookie node2 check
“listen webfarm :80”这一行定义了我们的负载均衡系统将侦听哪些接口。出于本教程的需要,我将该值设为“”,这让负载均衡系统侦听我们的所有接口。在实际场景下,这可能不合意,应该换成可从互联网来访问的某个接口。
stats enable stats uri /haproxy?stats stats realm Haproxy/ Statistics stats auth haproxy:stats
上述设置声明,可以在http://《load-balancer-IP》/haproxy?stats处访问负载均衡系统的统计数字。这种访问由简单的HTTP验证以及登录名“haproxy”和密码“stats”来确保安全。这些设置应该换成你自己的登录信息。如果你不想让这些统计数字被人看到,那么可以完全禁用它们。
下面是HAProxy统计数字的一个例子。
“balance roundrobin”这一行定义了我们将使用哪种类型的负载均衡。在本教程中,我们将使用简单的轮叫调度算法,这对HTTP负载均衡来说完全绰绰有余。HAProxy还提供了其他类型的负载均衡:
•leastconn:连接数最少的服务器优先接收连接。
•source:对源IP地址进行哈希处理,用运行中服务器的总权重除以哈希值,即可决定哪台服务器将接收请求。
•uri:URI的左边部分(问号前面)经哈希处理,用运行中服务器的总权重除以哈希值。所得结果决定哪台服务器将接收请求。
•url_param:变量中指定的URL参数将在每个HTTP GET请求的查询串中进行查询。你基本上可以将使用蓄意制作的URL(crafted URL)的请求锁定于特定的负载均衡节点。
•hdr(name):HTTP头《name》 将在每个HTTP请求中进行查询,被定向到特定节点。
“cookie LBN insert indirect nocache”这一行让我们的负载均衡系统存储持久性cookie,这让我们得以准确查明集群中的哪个节点用于某一个会话。这些节点cookie将与指定的名称一并存储起来。在我们这个例子中,我使用了“LBN”,但你可以指定自己喜欢的任意名称。节点将为该cookie把字符串作为一个值而存储起来。
server web01 1921681002:80 cookie node1 check server web02 1921681003:80 cookie node2 check
上述部分对网站服务器节点集群进行了定义。每台服务器都用内部名称(比如web01和web02)、IP地址和独特的cookie串来表示。cookie串可以定义为你需要的任何名称。我使用了简单的node1、node2 。。。 node(n)。
启动HAProxy
你完成了配置工作后,可以启动HAProxy,验证一切按预期运行。
在Centos/RHEL上启动HAProxy
使用下列指令,让HAProxy能够在系统启动后启动,并打开它:
# chkconfig haproxy on # service haproxy start
当然,别忘了启用防火墙中的端口80,如下所示。
CentOS/RHEL 7上的防火墙:
# firewallcmd permanent zone=public addport=80/tcp # firewallcmd reload
CentOS/RHEL 6上的防火墙:
把下面这一行添加到/etc/sysconfig/iptables中的这部分“:OUTPUT ACCEPT”:
A INPUT m state state NEW m tcp p tcp dport 80 j ACCEPT
然后重启iptables:
# service iptables restart
在Debian上启动HAProxy
使用下列指令启动HAProxy:
# service haproxy start
别忘了启用防火墙中的端口80,为此把下面这一行添加到/etc/iptablesuprules:
A INPUT p tcp dport 80 j ACCEPT
在Ubuntu上启动HAProxy
让HAProxy能够在系统启动后启动,只要在/etc/default/haproxy中将“ENABLED”选项设为“1”:
ENABLED=1
启动HAProxy:
# service haproxy start
然后启用防火墙中的端口80:
# ufw allow 80
测试HAProxy
为了检查HAproxy是否在正常工作,我们可以执行下列步骤:
首先,用下列内容准备好testphp文件:
《?php header(‘Content-Type: text/plain’); echo “Server IP: ”。
该PHP文件将告诉我们哪台服务器(即负载均衡系统)转发请求,哪台后端网站服务器实际处理请求。
把该PHP文件放到这两台后端网站服务器的根目录下。现在,使用curl命令,从负载均衡系统(1921681004)提取这个PHP文件。
# chkconfig haproxy on # service haproxy start nbsp;curl http://1921681004/testphp
我们多次运行这个命令时,应该会看到下面两个输出交替出现(由于轮叫调度算法)。
Server IP: 1921681002
X-Forwarded-for: 1921681004
Server IP: 1921681003
X-Forwarded-for: 1921681004
如果我们停止这两台后端网站服务器中的其中一台,curl命令应该仍会执行,将请求定向到另一台可用的网站服务器。
结束语
至此,你应该有了一套完全实用的负载均衡系统,能够在轮叫循环模式下为你的网站节点提供请求。与往常一样,你可以随意更改配置,让它更适合自己的基础设施。希望本教程帮助你让自己的网站项目具有更强的抗压力和更高的可用性。
正如大家已经注意到的那样,本教程所含的设置适用于仅仅一套负载均衡系统。这意味着,我们把一个单一故障点换成了另一个单一故障点。在实际场景下,你应该部署至少两套或三套负载均衡系统,以防范可能出现的任何故障,但这不在本教程的讨论范围之内。
上面就是Linux系统下配置HTTP负载均衡系统的方法介绍了,这里主要使用的是HAProxy,且只介绍了配置一套负载均衡系统的方法,赶紧试试看吧。
Linux下是没有文件直接给你按进程记录流量信息的。你想要编程实现的话,办法是有的,只是比较麻烦。首先,你需要能截取流经网卡的数据包,这个可以通过libpcap来完成,其次你要完成的最重要的一步就是怎么根据端口号找到进程的pid。端口号通过截取的数据包可以获得,这个时候你要按行来解析/proc/net/tcp (如果要支持ipv6的话还要解析/proc/net/tcp6),这个文件记录了当前活跃的TCP连接情况,每一行代表一条连接,我们感兴趣的是其中的inode这一项,你得把inode的值解析出来保存。然后蛋疼的时候来了,接下来你得遍历所有的/proc/pid/fd文件,察看其中每一个文件描述符,如果发现内容为socket[xxxx]的,把xxxx截取出来,这个xxxx也是inode号,如果和你之前解析/proc/net/tcp的inode号吻合,恭喜你,这说明这个pid和那个tcp连接有关系,进而也就确定了端口号和pid的对应关系,也就知道了数据包和进程之间的对应关系了。
我的建议:
先看看http://wwwtcpdumporg/pcaphtml, 熟悉一下libpcap库的用法,怎么截取数据包。
自己看看/proc/net/tcp的内容,想想怎么做文本解析,除了inode外,源ip,源端口号,目的ip,目的端口号都可以解析出来,而这个四元组实际就代表了一条tcp连接。
想想怎么做数据包,连接,进程的老化超时处理。比如说,当前截取的到的数据包在统计过一次流量后,下一次就不应该再计入了,怎么处理?一条连接长时间没有任何数据包的交互,怎么老化掉?一个进程长时间没有数据包的交互,甚至用户给关闭了,你的程序如何感知?libpcap截取到数据包后会给你提供截取到的时间戳,好好利用这个时间戳就可以办到。
最后,以数据包 -> 连接 -> 进程 的关系来思考会有助于你的程序设计,一条连接可以有N个数据包,一个进程可以有N条连接。这么一想,这3个结构体或者类就能定义好了。剩下的自己琢磨琢磨。
不是木马,是设置问题,下面是流量的控制方法一、Linux流量控制过程分二种:1、队列控制即QOS,瓶颈处的发送队列的规则控制,常见的有SFQPRIO2、流量控制即带宽控制,队列的排队整形,一般为TBFHTB二、Linux流量控制算法分二种:1、无类算法用于树叶级无分支的队列,例如:SFQ2、分类算法用于多分支的队列,例如:PRIOTBFHTB三、具体实现:1在网卡上建立以SFQ算法的限流#tcqdiscadddeveth0roothandle1:sfqSFQ参数有perturb(重新调整算法间隔)quantum基本上不需要手工调整:handle1:规定算法编号可以不用设置由系统指定#tcqdiscshdeveth0显示算法#tcqddeldeveth0root删除注:默认eht0支持TOS2在网卡建立以TBF算法的限流#tcqdadddeveth1roothandle1:tbfrate256kbitburst10000latency50ms速率256kbit突发传输10k最大延迟50ms#tc-sqdshdeveth1统计#tcqddeldeveth1root删除3在网卡建立PRIO#tcqdiscadddeveth0roothandle1:prio#此命令立即创建了类:1:1,1:2,1:3(缺省三个子类)#tcqdiscadddeveth0parent1:1handle10:sfq#tcqdiscadddeveth0parent1:2handle20:tbfrate20kbitbuffer1600limit3000注:此为TBF限速的另一写法,前文有讲解#tcqdiscadddeveth0parent1:3handle30:sfq4WEB服务器的流量控制为5Mbps,SMTP流量控制在3Mbps上而且二者一共不得超过6Mbps,互相之间允许借用带宽#tcqdiscadddeveth0roothandle1:0cbqbandwidth100Mbitavpkt1000cell8#tcclassadddeveth0parent1:0classid1:1cbqbandwidth100Mbitrate6Mbitweight06Mbitprio8allot1514cell8maxburst20avpkt1000bounded这部分按惯例设置了根为1:0,并且绑定了类1:1也就是说整个带宽不能超过6Mbps#tcclassadddeveth0parent1:1classid1:3cbqbandwidth100Mbitrate5Mbitweight05Mbitprio5allot1514cell8maxburst20avpkt1000#tcclassadddeveth0parent1:1classid1:4cbqbandwidth100Mbitrate3Mbitweight03Mbitprio5allot1514cell8maxburst20avpkt1000建立了2个类注意我们如何根据带宽来调整weight参数的两个类都没有配置成"bounded",但它们都连接到了类1:1上,而1:1设置了"bounded"所以两个类的总带宽不会超过6Mbps别忘了,同一个CBQ下面的子类的主号码都必须与CBQ自己的号码相一致!#tcqdiscadddeveth0parent1:3handle30:sfq#tcqdiscadddeveth0parent1:4handle40:sfq缺省情况下,两个类都有一个FIFO队列规定但是我们把它换成SFQ队列,以保证每个数据流都公平对待#tcfilteradddeveth0parent1:0protocolipprio1u32matchipsport800xffffflowid1:3#tcfilteradddeveth0parent1:0protocolipprio1u32matchipsport250xffffflowid1:46过滤器过滤示例#tcfilteradddeveth0protocolipparent10:prio1u32matchipdport220xffffflowid10:1在10:节点添加一个过滤规则,优先权1:凡是去往22口(精确匹配)的IP数据包,发送到频道10:1#tcfilteradddeveth0protocolipparent10:prio1u32matchipsport800xffffflowid10:1在10:节点添加一个过滤规则,优先权1:凡是来自80口(精确匹配)的IP数据包,发送到频道10:1#tcfilteradddeveth0protocolipparent10:prio2flowid10:2在eth0上的10:节点添加一个过滤规则,它的优先权是2:凡是上二句未匹配的IP数据包,发送到频道10:2#tcfilteradddeveth0parent10:0protocolipprio1u32matchipdst4321/32flowid10:1去往4321的包发送到频道10:1其它参数同上例#tcfilteradddeveth0parent10:0protocolipprio1u32matchipsrc1234/32flowid10:1来自1234的包发到频道10:1#tcfilteradddeveth0protocolipparent10:prio2flowid10:2凡上二句未匹配的包送往10:2#tcfilteradddeveth0parent10:0protocolipprio1u32matchipsrc4321/32matchipsport800xffffflowid10:1可连续使用match,匹配来自1234的80口的数据包
在 Linux 系统中,你可以考虑以下优化方法:
内存优化:你可以通过查看内存使用情况,并关闭不必要的进程来优化内存使用。
CPU 优化:你可以通过查看 CPU 使用情况,并关闭不必要的进程来优化 CPU 使用。
磁盘优化:你可以通过查看磁盘使用情况,并清理不必要的文件来优化磁盘使用。
网络优化:你可以通过查看网络流量,并关闭不必要的网络连接来优化网络使用。
系统升级:你可以考虑升级系统内核,软件包和应用程序来提高系统性能。
服务优化:你可以考虑优化系统中运行的服务,例如数据库服务器或 web 服务器,来提高性能。
硬件优化:你可以考虑升级硬件,例如内存、CPU、磁盘等,来提高性能。
这些都是优化 Linux 系统的常见方法。你需要根据系统的具体情况来选择合适的优化方法。
0条评论