一 监控原理

$ /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

Zabbix2.2.0版本开始支持监控VMware 虚拟机的可用性。

Zabbix 可以使用low-level discovery 规则去自动发现 VMware hypervisors and virtual machines 之后创建主机并监控他们基于之前定义的主机规则

Zabbix默认数据集提供了几个现成的模板或ESX hypervisor监测VMware vCenter

小要求VMware vCentervSphere的版本是4.1

虚拟机监控是两个步骤:

第一个数据是由VMware收集器Zabbix集过程。这些过程中获取必要的信息从VMwareWeb服务的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 

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 vCenterESX 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认证所需的主机的宏:

关联模板

稍等就会自动出现在主机里了