一 监控原理
$ /bin/netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}'
TIME_WAIT 3464
FIN_WAIT1 31
FIN_WAIT2 3
ESTABLISHED 12
SYN_RECV 6
CLOSING 8
LISTEN 7
可以使用man netstat查看TCP的各种状态信息描述
ESTABLISHED socket已经建立连接
CLOSED socket没有被使用,无连接
CLOSING 服务器端和客户端都同时关闭连接
CLOSE_WAIT 等待关闭连接
TIME_WAIT The socket is waiting after close to handle packets still in the network. 表示收到了对方的FIN报文,并发送出了ACK报文,等待2MSL后就可回到CLOSED状态
LAST_ACK The remote end has shut down, and the socket is closed. Waiting for acknowledgement. 远端关闭,当前socket被动关闭后发送FIN报文,等待对方ACK报文
LISTEN 监听状态
SYN_RECV 接收到SYN报文
SYN_SENT 已经发送SYN报文
FIN_WAIT1 The socket is closed, and the connection is shutting down
FIN_WAIT2 Connection is closed, and the socket is waiting for a shutdown from the remote end.
2.监控脚本编写
tcp_connection_status.sh
#!/bin/bash#this script is used to get tcp and udp connetion status#tcp statusmetric=$1tmp_file=/tmp/tcp_status.txt/bin/netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}' > $tmp_file case $metric in closed) output=$(awk '/CLOSED/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; listen) output=$(awk '/LISTEN/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; synrecv) output=$(awk '/SYN_RECV/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; synsent) output=$(awk '/SYN_SENT/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; established) output=$(awk '/ESTABLISHED/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; timewait) output=$(awk '/TIME_WAIT/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; closing) output=$(awk '/CLOSING/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; closewait) output=$(awk '/CLOSE_WAIT/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; lastack) output=$(awk '/LAST_ACK/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; finwait1) output=$(awk '/FIN_WAIT1/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; finwait2) output=$(awk '/FIN_WAIT2/{print $2}' $tmp_file) if [ "$output" == "" ];then echo 0 else echo $output fi ;; *) echo -e "\e[033mUsage: sh $0 [closed|closing|closewait|synrecv|synsent|finwait1|finwait2|listen|established|lastack|timewait]\e[0m" esac
3.添加zabbix配置文件
tcp_status.conf
UserParameter=tcp.status[*],/usr/local/zabbix/bin/tcp_connection_status.sh $1
service zabbix-agent restart
4.在master或proxy端使用zabbix_get测试
/usr/local/zabbix/bin/zabbix_get -s 192.168.1.179 -p 10055 -k tcp.status[timewait]
5.添加zabbix监控模板
模板下载: 访问密码 9289
Zabbix之监控虚拟主机EXSI
Zabbix从2.2.0版本开始支持监控VMware 虚拟机的可用性。
Zabbix 可以使用low-level discovery 规则去自动发现 VMware hypervisors and virtual machines 之后创建主机并监控他们, 基于之前定义的主机规则.
在Zabbix默认数据集提供了几个现成的模板或ESX hypervisor监测VMware vCenter。
最小要求VMware vCenter或vSphere的版本是4.1。
虚拟机监控是两个步骤:
第一个数据是由VMware收集器Zabbix收集过程。这些过程中获取必要的信息从VMware的Web服务的SOAP协议,预处理并存储到Zabbix服务器共享内存。然后,数据用Zabbix简单检查VMware键对检索。
数据收集从一个单一的Vmware服务通过一个单一的采集进程不能共享到多个数据收集进程。然而,个收集器可以处理多个虚拟机服务。因为推荐使用ESX hypervisor直接整个vCenter服务监控。
配置
Zabbix server 编译时候添加以下参数:
--with-libxml2
--with-libcurl
安装完成后,在zabbix_server.conf配置文件需要指定‘StartVMwareCollectors’参数,否则启动zabbix_server是不会启动vmware相关的进程
vi /data/zabbix/etc/zabbix_server.conf
StartVMwareCollectors=5
VMwareFrequency=60
VMwareCacheSize=8M
下面这些参数可用于虚拟机的监控:
选项 | 值 | 描述 | |
区间 | 默认 | ||
StartVMwareCollectors | 0-250 | 0 | Number of pre-forked vmware collector instances. |
VMwareCacheSize | 256K-2G | 8M | Shared memory size for storing VMware data.A VMware internal check zabbix[vmware,buffer,…] can be used to monitor the VMware cache usage (see ).Note that shared memory is not allocated if there are no vmware collector instances configured to start. |
VMwareFrequency | 10-86400 | 60 | Delay in seconds between data gathering from a single VMware service.This delay should be set to the least delay period of an VMware monitoring item. |
Zabbix可以使用low-level 发现规则去自动发现VMware hypervisors and virtual machines.
在上面的截图中发现规则的键值是 vmware.hv.discovery[{$URL}].
主机原型
主机原型可以与低层次的发现的规则。当虚拟机被发现后,这些原型成为真正主机。原型,在被发现前,不能有自己的项目和触发器,其他链接模板。发现主机将属于一个现有的主机,将现有的主机的IP的主机配置。
在主机原型配置,LLD宏用于主机名称,可见的名称和主机组原型领域。主机状态,现有的主机组和模板连锁等都是不错的选择,可以设置。
发现主机的前缀,创造了他们发现规则的名称,在主机列表。发现主机可以手动删除。发现主机也会被自动删除,以保持失去资源期(天)发现规则的价值。大多数的配置选项是只读的,除了启用/禁用主机和主机库存。发现主机不能有自己的主机的原型。
开始使用模板
在Zabbix默认数据集提供了几个现成的模板,用于监测VMware vCenter或直接ESX hypervisor。
这些模板包含预配置的LLD规则以及监测虚拟设备的一些内置的检查。
请注意:
“模板为VMware”模板可以用于VMware vCenter和ESX hypervisor监测。
“模板为VMware虚拟机管理程序”和“模板为VMware客”模板被发现,通常不应该手动连接到主机。
主机配置
在使用简单检查前需要先定义一下宏命令:
{$URL} - VMware service (vCenter or ESX hypervisor) SDK URL ().
{$USERNAME} - VMware service user name
{$PASSWORD} - VMware service {$USERNAME} user password
Example
下面的例子讲述的是如何对VMware主机进行监控
编译zabbix server 必须有一下参数 --with-libxml2 and --with-libcurl
在zabbix server设置StartVMwareCollectors 值为1 或更大
新建主机
设置为VMware认证所需的主机的宏:
关联模板
稍等就会自动出现在主机里了