黑帽联盟

 找回密码
 会员注册
查看: 1262|回复: 0
打印 上一主题 下一主题

[运维监控] zabbix监控tcp连接数

[复制链接]

852

主题

38

听众

3175

积分

白金VIP

Rank: 8Rank: 8

  • TA的每日心情
    开心
    2024-3-7 12:52
  • 签到天数: 1538 天

    [LV.Master]伴坛终老

    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.


    1 搭建环境:
    zabbix server :centos 6  ip 192.168.234.134
    zabbix client (nginx) :centos 7  ip:192.168.234.133


    2 监控方法:
    第一种监控方法用ss
    1. /usr/sbin/ss state all | awk '{++S[$1]} END {for (a in S) {printf "%11-s %s\n",a,S[a]}}'
    2. LISTEN      9
    3. ESTAB       1
    4. State       1
    5. TIME-WAIT   110
    复制代码
    第二种监控方法用netstat
    1. /bin/netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}'
    2. LISTEN 9
    3. ESTABLISHED 1
    4. SYN_SENT 1
    5. TIME_WAIT 126
    复制代码
    3 监控脚本编写
    vi /usr/local/zabbix/scripts/tcp_status.sh
    1. #!/bin/bash
    2. #this script is used to get tcp and udp connetion status
    3. #tcp status
    4. metric=$1
    5. tmp_file=/tmp/tcp_status.txt
    6. /bin/netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}' > $tmp_file
    7.   
    8. case $metric in
    9.    closed)
    10.           output=$(awk '/CLOSED/{print $2}' $tmp_file)
    11.           if [ "$output" == "" ];then
    12.              echo 0
    13.           else
    14.              echo $output
    15.           fi
    16.         ;;
    17.    listen)
    18.           output=$(awk '/LISTEN/{print $2}' $tmp_file)
    19.           if [ "$output" == "" ];then
    20.              echo 0
    21.           else
    22.              echo $output
    23.           fi
    24.         ;;
    25.    synrecv)
    26.           output=$(awk '/SYN_RECV/{print $2}' $tmp_file)
    27.           if [ "$output" == "" ];then
    28.              echo 0
    29.           else
    30.              echo $output
    31.           fi
    32.         ;;
    33.    synsent)
    34.           output=$(awk '/SYN_SENT/{print $2}' $tmp_file)
    35.           if [ "$output" == "" ];then
    36.              echo 0
    37.           else
    38.              echo $output
    39.           fi
    40.         ;;
    41.    established)
    42.           output=$(awk '/ESTABLISHED/{print $2}' $tmp_file)
    43.           if [ "$output" == "" ];then
    44.              echo 0
    45.           else
    46.              echo $output
    47.           fi
    48.         ;;
    49.    timewait)
    50.           output=$(awk '/TIME_WAIT/{print $2}' $tmp_file)
    51.           if [ "$output" == "" ];then
    52.              echo 0
    53.           else
    54.              echo $output
    55.           fi
    56.         ;;
    57.    closing)
    58.           output=$(awk '/CLOSING/{print $2}' $tmp_file)
    59.           if [ "$output" == "" ];then
    60.              echo 0
    61.           else
    62.              echo $output
    63.           fi
    64.         ;;
    65.    closewait)
    66.           output=$(awk '/CLOSE_WAIT/{print $2}' $tmp_file)
    67.           if [ "$output" == "" ];then
    68.              echo 0
    69.           else
    70.              echo $output
    71.           fi
    72.         ;;
    73.    lastack)
    74.           output=$(awk '/LAST_ACK/{print $2}' $tmp_file)
    75.           if [ "$output" == "" ];then
    76.              echo 0
    77.           else
    78.              echo $output
    79.           fi
    80.          ;;
    81.    finwait1)
    82.           output=$(awk '/FIN_WAIT1/{print $2}' $tmp_file)
    83.           if [ "$output" == "" ];then
    84.              echo 0
    85.           else
    86.              echo $output
    87.           fi
    88.          ;;
    89.    finwait2)
    90.           output=$(awk '/FIN_WAIT2/{print $2}' $tmp_file)
    91.           if [ "$output" == "" ];then
    92.              echo 0
    93.           else
    94.              echo $output
    95.           fi
    96.          ;;
    97.          *)
    98.           echo -e "\e[033mUsage: sh  $0 [closed|closing|closewait|synrecv|synsent|finwait1|finwait2|listen|established|lastack|timewait]\e[0m"
    99.    
    100. esac
    复制代码
    4添加zabbix客户端配置文件
    1. vi /usr/local/zabbix/etc/zabbix_agentd.conf 添加
    2. UserParameter=tcp.status[*],/usr/local/zabbix/scripts/tcp_status.sh $1
    复制代码
    然后重启agentd服务

    5 测试链接
    1. zabbix_get -s 192.168.234.133 -p 10050 -k tcp.status[timewait]
    复制代码
    6 倒入模板,确认出图
    11.png

    12.png
    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    勿忘初心,方得始终!
    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部