目录前言一、ss命令二、zabbix监控机器总体的socket情况2.1、写脚本2.2、配置zabbix agent的配置文件2.3、配置zabbix的模板三、zabbix监控机器来源于各个机器的请求数3.1、写脚本3.2、配置zabbix_agent.conf文件3.3、配置Discovery,配置item,trigger,graph
前言
这里我们使用zabbix对其进行监控,使用的是ss命令,不使用netstat命令,因为ss的速度快很多,不信的话可以去测一下哈,一台机器的socket越多,对比越明显。而且ss命令能显示更多的内容,其实我对这两个命令不是特别的熟悉,通过man ss可以看到:
一、ss命令
ss命令用于显示socket状态. 他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等统计. 它比其他工具展示等多tcp和state信息. 它是一个非常实用、快速、有效的跟踪IP连接和sockets的新工具.SS命令可以提供如下信息:
所有的TCP sockets
所有的UDP sockets
所有ssh/ftp/ttp/https持久连接
所有连接到Xserver的本地进程
使用state(例如:connected, synchronized, SYN-RECV, SYN-SENT,TIME-WAIT)、地址、端口过滤
所有的state FIN-WAIT-1 tcpsocket连接以及更多
很多流行的Linux发行版都支持ss以及很多监控工具使用ss命令.熟悉这个工具有助于您更好的发现与解决系统性能问题.本人强烈建议使用ss命令替代netstat部分命令,例如netsat -ant/lnt等
直接ss命令
对上面解释一波:
Netid #socket类型,在上面的例子中,有 TCP、u_str(unix流)等套接字
State #套接字处于什么状态,下面是TCP套接字的所有状态及说明, 实际上就是TCP的三次握手和四次挥手的所有状态
Recv-Q #在 ESTAB 状态下,表示内核中还有多少字节的数据没有被上层应用读取,如果这里数值很大,应用程序可能发生了阻塞
Send-Q #在 ESTAB 状态下,表示内核发送队列中还有多少字节的数据没有收到确认的ACK,如果这个数值很大,表明接收端的接收以及处理需要加强
Local Address:Port #本地地址和端口
Peer Address:Port #远程地址和端口
然后我们接着看上面的state有哪些呢,如果特别熟悉网络的人应该很懂,至少我现在是不是特别熟悉,三次握手和四次挥手的状态:
LISTEN #服务端侦听套接字等待客户端的连接
SYN-SENT #客户端已发送套接字连接请求报文,等待连接被服务器接收
SYN-RECEIVED #服务器端接收连接请求报文后,等待客户端的确认连接的回复报文
ESTABLISHED #服务端和客户端之间成功建立了一条有效的连接,可以互相传输数据
FIN-WAIT-1 #服务器或客户端调用close函数主动向对方发出终止连接的请求报文,同时等待对方确认终止连接的回复报文
FIN-WAIT-2 #主动关闭连接端收到对方确认终止连接的回复报文,同时等待对方连接终止的请求报文,这时的状态是TCP连接的半关闭状态,可以接受数据,但是不能发送数据
CLOSE-WAIT #被动关闭端收到主动关闭端终止连接的请求报文后,向主动关闭端发送确认终止连接的回复报文,同时被动关闭端等待本地用户终止连接,这时被动关闭端的状态是TCP连接的半关闭状态,可以发送数据,但是不能接收数据
CLOSING #服务器和客户端同时向对方发送终止连接(调用close函数)请求报文,并且双方都是在收到对方发送的终止连接回复报文之前收到了对方的发送的终止连接请求报文,这个时候双方都进入了CLOSING状态,进入CLOSING状态之后,只要收到了对方对自己终止连接的回复报文,就会进入TIME-WAIT状态,所以CLOSING状态的持续时间会特别短,一般很难捕获到
LAST-ACK #被动关闭端发送完全部数据之后,向主动关闭端发送终止连接的请求报文,等待主动关闭端发送终止连接的回复报文
TIME-WAIT #主动关闭端收到被动关闭端终止连接的请求报文后,给被动关闭端发送终止连接的回复报文,等待足够时间以确保被动关闭端收到了主动关闭段发送的终止连接的回复报文
CLOSED #完全没有连接,套接字连接已经终止了
那么这些状态ss命令又怎么对应呢?(后面的是ss命令显示的状态信息)
[TCP_ESTABLISHED] = “ESTAB”,
[TCP_SYN_SENT] = “SYN-SENT”,
[TCP_SYN_RECV] = “SYN-RECV”,
[TCP_FIN_WAIT1] = “FIN-WAIT-1”,
[TCP_FIN_WAIT2] = “FIN-WAIT-2”,
[TCP_TIME_WAIT] = “TIME-WAIT”,
[TCP_CLOSE] = “UNCONN”,
[TCP_CLOSE_WAIT] = “CLOSE-WAIT”,
[TCP_LAST_ACK] = “LAST-ACK”,
[TCP_LISTEN] = “LISTEN”,
[TCP_CLOSING] = “CLOSING”,
江到这里其实就可以去做下面的监控了,继续往下看ss命令的使用。
Usage: ss [ OPTIONS ]
ss [ OPTIONS ] [ FILTER ]
-h, –help 帮助信息
-V, –version 程序版本信息
-n, –numeric 不解析服务名称
-r, –resolve 解析主机名
-a, –all 显示所有套接字(sockets)
-l, –listening 显示监听状态的套接字(sockets)
-o, –options 显示计时器信息
-e, –extended 显示详细的套接字(sockets)信息
-m, –memory 显示套接字(socket)的内存使用情况
-p, –processes 显示使用套接字(socket)的进程
-i, –info 显示 TCP内部信息
-s, –summary 显示套接字(socket)使用概况
-4, –ipv4 仅显示IPv4的套接字(sockets)
-6, –ipv6 仅显示IPv6的套接字(sockets)
-0, –packet 显示 PACKET 套接字(socket)
-t, –tcp 仅显示 TCP套接字(sockets)
-u, –udp 仅显示 UCP套接字(sockets)
-d, –dccp 仅显示 DCCP套接字(sockets)
-w, –raw 仅显示 RAW套接字(sockets)
-x, –unix 仅显示 Unix套接字(sockets)
-f, –family=FAMILY 显示 FAMILY类型的套接字(sockets),FAMILY可选,支持 unix, inet, inet6, link, netlink
-A, –query=QUERY, –socket=QUERY
QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
-D, –diag=FILE 将原始TCP套接字(sockets)信息转储到文件
-F, –filter=FILE 从文件中都去过滤器信息
FILTER := [ state TCP-STATE ] [ EXPRESSION ]
重点在下面的监控
二、zabbix监控机器总体的socket情况
做这个监控前可以熟悉下awk命令
这是使用的监控系统为zabbix,我们这里会结合zabbix的模板(这里选择模板是为了后期拓展),和自定义脚本的方式进行监控。
2.1、写脚本
二话不多说上脚本先:
vim tcp_status.sh
#################脚本内容#################
#!/bin/bash
if [ $# -ne 1 ];then
echo “Follow the script name with an argument ”
fi
case $1 in
LISTEN)
result=`ss -ant | awk NR
暂无评论内容