Zabbix监控TCP


  • Zabbix监控TCP

  • Tcp的连接状态对于我们web服务器来说是至关重要的,尤其是并发量ESTAB;或者是syn_recv值,假如这个值比较大的话我们可以认为是不是受到了攻击,或是是time_wait值比较高的话,我们要考虑看我们内核是否需要调优,太高的time_wait值的话会占用太多端口,要是端口少的话后果不堪设想:所以今天我们来学学如何使用Zabbix监控tcp状态

[root@linux-node1 ~]# cd /etc/zabbix/scripts
[root@linux-node1 scripts]# vim tcp_status.sh
# $Name:         tcp_status.sh# $Version:      v1.0
# $Function:     TCP Status
# $Author:       xuliangwei
# $organization: www.xuliangwei.com
# $Create Date:  2016-06-23
# $Description:  Monitor TCP Service Status
[ $# -ne 1 ] && echo "Usage:CLOSE-WAIT|CLOSED|CLOSING|ESTAB|FIN-WAIT-1|FIN-WAIT-2|LAST-ACK|LISTEN|SYN-RECV SYN-SENT|TIME-WAIT" && exit 1tcp_status_fun(){
    TCP_STAT=$1
    ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/ss.txt
    TCP_STAT_VALUE=$(grep "$TCP_STAT" /tmp/ss.txt | cut -d ' ' -f2)    if [ -z "$TCP_STAT_VALUE" ];then
        TCP_STAT_VALUE=0    fi
    echo $TCP_STAT_VALUE}
tcp_status_fun $1;
添加执行权限
[root@linux-node1 scripts]# chmod +x tcp_status.sh
2.监控项linux_tcp.conf的配置文件如下:
[root@linux-node1 ~]# cat /etc/zabbix/zabbix_agentd.d/tcp.confUserParameter=tcp_status[*],/bin/bash /etc/zabbix/scripts/tcp_status.sh "$1"
3.重启zabbix-agent修改配置文件必须重启
[root@linux-node1 ~]# systemctl restart  zabbix-agent
4.Server测试Agent是否能获取到值,通过Zabbix_get(不要直接执行脚本)
[root@linux-node1 scripts]# zabbix_get -s 192.168.90.11 -k tcp_status[ESTAB]
8

5.添加所有监控项(记得将模板关联主机)

6.查看图形(图形是自定义创建)


Zabbix监控Nginx
实验环境
服务器系统角色IP
CentOS 7.4 x86_64    Zabbix-Server    192.168.90.10    
CentOS 7.4 x86_64    Zabbix-Agent    192.168.90.11
2.在nginx.conf的Server标签下添加如下内容
location /nginx_status {    
stub_status on;    
access_log  off;    
allow 127.0.0.1;    
deny all;
    }

3.本地访问Nginx Status

[root@linux-node1 ~]# curl http://127.0.0.1/nginx_status
Active connections: 1
server accepts handled requests 1 1 1
Reading: 0 Writing: 1 
Waiting: 0Nginx状态解释:
Active connections  Nginx正处理的活动链接数1个
server              Nginx启动到现在共处理了1个连接。
accepts             Nginx启动到现在共成功创建1次握手。 
handled requests    Nginx总共处理了1次请求。
Reading             Nginx读取到客户端的 Header 信息数。
Writing             Nginx返回给客户端的 Header 信息数。
Waiting             Nginx已经处理完正在等候下一次请求指令的驻留链接,开启。

Keep-alive的情况下,这个值等于active-(reading + writing)。
请求丢失数=(握手数-连接数)可以看出,本次状态显示没有丢失请求。

4.编写Nginx的Shell脚本(如果端口不一致,只需要修改脚本端口即可)

[root@Agent ~]# mkdir -p /etc/zabbix/scripts
[root@linux-node1 scripts]# vim /etc/zabbix/scripts/nginx_status.sh
#!/bin/bash
############################################################
# $Name:         nginx_status.sh
# $Version:      v1.0
# $Function:     Nginx Status
# $Author:       xuliangwei
# $organization: www.xuliangwei.com,www,bjstack.com
# $Create Date:  2016-06-23
# $Description:  Monitor Nginx Service Status
############################################################

NGINX_PORT=80  #如果端口不同仅需要修改脚本即可,否则修改xml很麻烦
NGINX_COMMAND=$1


nginx_active(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Active/ {print $NF}'
}

nginx_reading(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Reading/ {print $2}'
}

nginx_writing(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Writing/ {print $4}'
       }

nginx_waiting(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk '/Waiting/ {print $6}'
       }

nginx_accepts(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $1}'
       }

nginx_handled(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $2}'
       }

nginx_requests(){
    /usr/bin/curl -s "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" |awk 'NR==3 {print $3}'
       }


  case $NGINX_COMMAND in
    active)
        nginx_active;
        ;;
    reading)
        nginx_reading;
        ;;
    writing)
        nginx_writing;
        ;;
    waiting)
        nginx_waiting;
        ;;
    accepts)
        nginx_accepts;
        ;;
    handled)
        nginx_handled;
        ;;
    requests)
        nginx_requests;
        ;;
          *)
        echo $"USAGE:$0 {active|reading|writing|waiting|accepts|handled|requests}"
    esac

5.给脚本添加执行权限

[root@Agent]# chmod +x /etc/zabbix/scripts/nginx_status.sh

6.监控项nginx_status.conf的配置文件如下:

[root@Agent ~]# cat /etc/zabbix/zabbix_agentd.d/nginx_status.conf
UserParameter=nginx_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/scripts/nginx/nginx_status.sh "$1"

.重启zabbix-agent

[root@Agent ~]# systemctl restart  zabbix-agent

7.使用Zabbix_get来获取值

[root@linux-node1 ~]# zabbix_get -s 192.168.90.11 -k nginx_status[writing]
1

8.添加所有监控项, 如图4-3, 记得关联到指定的主机



本文 暂无 评论

Top