zabbix中通过模板实现自动发现对tcp端口批量监控

主要是为了避免繁琐的重复操作监控项和触发器
诸位~ 仅供参考哈
自动发现监控参考地址:
https://blog.csdn.net/qq_37510195/article/details/130893655

自动发现策略

创建模板 (实测可以不用创建模版,直接在主机里选择自动发现直接创建就可以了)

1. 首先创建一个模板

自定义名称和群组
在这里插入图片描述

2. 创建自动发现规则

模板——自动发现——创建发现规则
在这里插入图片描述

zabbix_agent中配置自动发现,关联触发脚本

1. zabbix-agent配置文件
UnsafeUserParameters=1
UserParameter=tcpportlisten,/home/shell/discoverport.sh
				(key)         (脚本地址,zabbix必须有执行权限)

在这里插入图片描述

2. linux脚本参考(仅供参考)

创建一个discoverport.sh文件

#!/bin/bash
portarray=(`sudo netstat -tnlp|egrep -i "java|nginx|mysql|minio"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'`)
servicename=(`sudo netstat -tnlp|egrep -i "java|nginx|mysql|minio"|awk {'print $7'}|awk -F'/' '{print $NF}'|sed 's/:$//'`)


# 定义端口和服务名称的映射关系 键值对
declare -A service_map=(
  [8761]="eureka-server"
  [9000]="gateway-server"
  [10001]="core-server"
  [10002]="device-server"
  [10003]="media-server"
  [10004]="visitor-server"
  [10005]="system-monitor-server"
  [10777]="parking-server"
)
length=${#portarray[@]} #输出有多少个
printf "{\n"
printf  '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
  printf '\n\t\t{'

  if [  -n "${service_map[${portarray[$i]}]}" ];
  then
    printf "\"{#TCP_PORT}\":\"${portarray[$i]}\", \"{#TCP_NAME}\":\"${service_map[${portarray[$i]}]}\"}"
  else
    printf "\"{#TCP_PORT}\":\"${portarray[$i]}\", \"{#TCP_NAME}\":\"${servicename[$i]}\"}"

  fi
  
 
  if [ $i -lt $[$length-1] ]; then
  printf ','
  fi
done
printf  "\n\t]\n"
printf "}\n"


3. Windows的参考这个脚本

创建一个discoverport.bat文件

@echo off
setlocal EnableDelayedExpansion
set "output={"data":["

for /f "tokens=2 delims= " %%a in ('netstat -ano ^| findstr "LISTENING" ^| findstr ":3306 :8182 :8180 :15672 :5672 :6379"') do (
    for /f "tokens=1* delims=:" %%b in ("%%a") do (
        for %%d in (%%c) do (
            set "value=%%~d"
            set "output=!output!{"{#TCP_PORT}":"!value:]:=!"},"
			
        )
    )
)

rem Remove the trailing comma from the last object
set "output=!output:~0,-2!}]}"
echo !output!!

#pause #这个要停留端口验证在用,平时注释掉


web界面进行主机绑定模板

进入主机,选择要绑定的模板
在这里插入图片描述
进入主机的自动发现,找到加入的自动发现规则,双击自动发现后进行测试
在这里插入图片描述
这里,确保测试有数据产生!
在这里插入图片描述
注意:如果出现访问脚本超时,或者无权限执行脚本的类似文件:如

sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
sudo: a terminal is required to read the password; either use the -S option to read from standard input or configure an askpass helper
{
"data":[
]
}

解决方法:
需要把zabbix用户加入到sudo中,然后再执行测试自动发现就正常了
修改文件/etc/sudoers
加入:zabbix ALL=(ALL) NOPASSWD: ALL
在这里插入图片描述

创建自动发现的监控项目

注意:这里是自动发现里面的监控项,非主机下的监控项
这里就可以通过脚本获取到的JSON数据,实现变量方式传值了,极大地避免了人工手动监控多个服务的情况。
监控{#TCP_PORT}端口,{#TCP_NAME}服务
在这里插入图片描述

创建自动发现的触发器

在这里插入图片描述
{#TCP_NAME}服务停止了,端口为{#TCP_PORT}
验证主机中生成的监控项和触发器:
主机的监控项:
在这里插入图片描述
主机的触发器:
在这里插入图片描述

以下是通过端口自动发现监控cpu和内存情况

1.不用创建模版,直接主机上的自动发现中创建

在这里插入图片描述
在这里插入图片描述

2.zabbix_agent中配置自动发现,关联触发脚本

打开文件:/usr/local/etc/zabbix_agentd.conf

在这里插入图片描述
这里要说明一下:
如果zabbix中执行返回空json,但是用命令执行脚本是有数据。注意看看执行的用户,本身在zabbix的web界面执行是通过zabbix用户执行的,所以需要给sudo权限才可以。不加sudo会出现执行出空json的情况。

脚本内容
discover_process.sh
#!/bin/bash

# 你要监控的端口号列表
PORT_LIST=(3306 80 10001 10002 10003)

echo -n '{"data":['
SEP=""

for port in "${PORT_LIST[@]}"; do
  # 获取监听该端口的 PID
  PID=$(ss -ltnp 2>/dev/null | grep ":$port " | awk -F 'pid=' '{print $2}' | awk -F ',' '{print $1}' | head -n 1)
  if [[ -n "$PID" ]]; then
    echo -n "$SEP{\"{#PORT}\":\"$port\",\"{#PPID}\":\"$PID\"}"
    SEP=","
  fi
done

echo ']}'

pid_resource.sh

#!/bin/bash

PID=$1
TYPE=$2

if [ -z "$PID" ] || ! ps -p $PID > /dev/null 2>&1; then
  echo 0
  exit 1
fi

case $TYPE in
  cpu)
    ps -p $PID -o %cpu --no-headers | awk '{print $1}' #指的是在单核中的利用率
    ;;
  mem)
    ps -p $PID -o %mem --no-headers | awk '{print $1}'
    ;;
  *)
    echo 0
    ;;
esac

3. 添加自动发现监控项,并验证

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f2695c6b791843f0b9e62c511fd56dd7.png
验证:
在这里插入图片描述

4. 添加自动发现触发器

在这里插入图片描述

<think>嗯,用户想用Zabbix 7监控Linux系统的TCP连接状态,这应该涉及到几个步骤。首先,我得回忆一下Zabbix的基本配置流程。Zabbix监控通常需要在被监控的主机(agent)上安装agent,然后配置监控项,可能还需要自定义脚本或者使用已有的模板。 根据用户提供的引用资料,比如引用[3]提到的使用ansible安装agent,还有引用[5]提到的自定义监控项,可能需要用户自己在agent端写脚本获取TCP状态数据。比如,用户可能需要通过netstat或者ss命令来获取当前的TCP连接状态,比如LISTEN、ESTABLISHED等,然后将这些数据传给Zabbix server。 然后,引用[1]和[2]展示了如何使用zabbix_get命令测试获取数据,这说明用户需要在agent配置文件中定义UserParameter,让Zabbix能够调用脚本获取数据。例如,定义一个UserParameter=linux_status[*], 对应的脚本处理参数并返回结果。 接下来,用户可能需要创建模板,将监控项、触发器、图形等配置在模板中,方便应用到多个主机。引用[3]和[4]都提到了模板的添加和配置,所以这部分也是关键步骤。 另外,Zabbix 7可能有些界面上的变化,但基本的配置逻辑应该和之前的版本类似。需要注意的是,用户是否已经正确安装了Zabbix server和agent,网络通信是否畅通,比如10050端口是否开放。 可能还需要考虑如何自动发现TCP端口,比如引用[5]中的自定义发现脚本,用于动态监控多个端口的状态。这样用户就不需要手动添加每个端口监控项了。 最后,测试部分很重要,使用zabbix_get命令验证是否能正确获取数据,然后在Web界面上配置图形和触发器,确保当TCP连接数异常时能触发告警。</think>### 分步说明:配置Zabbix 7监控Linux TCP连接状态 #### 1. **在Zabbix Agent端配置自定义监控项** **步骤说明**:通过自定义脚本获取TCP连接状态数据,需在Agent配置文件中添加参数。 **操作代码**: ```bash # 编辑Zabbix Agent配置文件 vim /etc/zabbix/zabbix_agentd.conf # 添加以下自定义监控项(示例为监控TCP各状态连接数) UserParameter=linux_status[*], /bin/bash /opt/scripts/tcp_status.sh "$1" "$2" ``` **脚本示例** (`/opt/scripts/tcp_status.sh`): ```bash #!/bin/bash status_type=$1 state=$2 # 使用ss命令统计TCP状态(需安装iproute2包) case $status_type in "tcp_status") ss -ant | grep -c "$state" ;; *) echo 0 ;; esac ``` **权限设置**: ```bash chmod +x /opt/scripts/tcp_status.sh ``` #### 2. **通过Ansible批量部署Agent(可选)** **步骤说明**:若需在多台服务器部署,可使用Ansible自动化(引用[3])。 **操作代码**: ```bash ansible-playbook -i /path/to/hosts zabbix_agentd_tcpstatus.yaml ``` #### 3. **在Zabbix Server端验证数据采集** **步骤说明**:使用`zabbix_get`测试能否获取监控数据(引用[1][2])。 **操作代码**: ```bash zabbix_get -s <Agent_IP> -p 10050 -k "linux_status[\"tcp_status\",\"LISTEN\"]" ``` 预期输出为当前`LISTEN`状态的TCP连接数。 #### 4. **配置Zabbix Web界面** 1. **导入模板**: - 创建模板并添加监控项,例如: ``` 键值:linux_status["tcp_status","LISTEN"] 名称:TCP LISTEN Connections ``` - 引用[3]中提到的模板可通过XML文件导入。 2. **创建触发器**: - 设置阈值告警,例如`{HOST:linux_status["tcp_status","TIME_WAIT"].last()}>1000`。 3. **配置图形**: - 将不同TCP状态(ESTABLISHED、CLOSE_WAIT等)的监控项聚合展示。 #### 5. **扩展:监控指定端口(引用[4][5])** **步骤说明**:若需监控特定端口(如80、443),需额外配置自动发现规则。 **脚本示例** (`discover_port.sh`): ```bash #!/bin/bash # 自动发现监听端口 ports=($(ss -tln | awk 'NR>1 {print $4}' | awk -F':' '{print $NF}')) printf '{\n\t"data":[\n' for port in "${ports[@]}"; do printf '\t\t{ "{#PORT}":"%s" },\n' "$port" done | sed '$s/,$//' printf '\t]\n}\n' ``` **监控项配置**: ```bash UserParameter=port.alert[*], netstat -tln | grep -c ":$1 " ``` --- ### 配置流程图 ```plaintext Agent端配置脚本 → 修改zabbix_agentd.conf → 重启Agent → Server端测试 → Web界面导入模板 → 绑定主机 → 查看数据 ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值