当前位置:   article > 正文

Zabbix结合脚本实现服务端口的自动发现(Python+Shell二合一)_zabbix 脚本

zabbix 脚本

Zabbix结合脚本实现服务端口的自动发现

一、通过Python脚本实现自动化发现

1、更改客户端配置文件

位置(通过yum直接安装的客户端):/etc/zabbix/zabbix_agentd.conf

Include=/etc/zabbix/zabbix_agentd.d/*.conf
  • 1

默认即可。

在对应目录下添加端口监听的配置文件touch /etc/zabbix/zabbix_agentd.d/userparameter_port.conf并添加

UserParameter=port.alert,/etc/zabbix/auto_port.py
# 前面为键值名称,用于建立自动发现
# 后面为脚本位置
  • 1
  • 2
  • 3

2、建立自动发现脚本

根据配置文件路径建立脚本,并通过json模块转换成json格式输出

代码如下(请务必提权!!!):

#!/usr/bin/env python
# coding:utf-8
# @Time : 2020/8/27 15:28
# @Author: 小小の运维
# @File : port_autofind.py

# 生效前需要将用户提权
# 位置 /etc/sudoers
# 添加 zabbix  ALL=(ALL)     NOPASSWD:/usr/sbin/ss

import os
import json
import string

# 端口查询命令
t = os.popen("sudo ss -tunlp |grep LISTEN | sed 's/::/FF/g' |grep users |sort |uniq ")

# 非监听端口列表
port1 = ['22', '1100', '25', '4369']

array = []
for port in t.readlines():
    r = port.strip()
    port = r.split(':')[1].split(' ')[0]
    try:
        name = r.split('\"')[1]
    except:
        name = "none"
    # 判断返回值是否在屏蔽列表中,不在则写入port列表
    if port not in port1:
        cluster = {'{#TCP_PORT}': port, '{#TCP_NAME}': name}

        # 将值末尾追加至array列表中
        array.append(cluster)

amy = [dict(t) for t in set([tuple(d.items()) for d in array])]

# 固定端口添加(非必须)
# extra = [{'{#TCP_NAME}': 'java', '{#TCP_PORT}': '8000'}]
# amy.extend(extra)

# json格式规范化输出
print(json.dumps({'data': amy}, sort_keys=True, indent=4, separators=(',', ':')))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

完成后,将脚本文件提权并重启客户端服务。

关键!!

将zabbix用户进行sudo权限的提升,否则脚本无法执行

vim /etc/sudoers添加

zabbix  ALL=(ALL)       NOPASSWD:/usr/sbin/ss
  • 1

后续步骤,参照下面的后续即可。

二、通过shell脚本预先定义端口实现

1、更改客户端配置文件

位置(通过yum直接安装的客户端):/etc/zabbix/zabbix_agentd.conf

Include=/etc/zabbix/zabbix_agentd.d/*.conf
  • 1

默认即可。

在对应目录下添加端口监听的配置文件touch /etc/zabbix/zabbix_agentd.d/userparameter_port.conf并添加

serParameter=port.alert,/etc/zabbix/port_alert.sh
# 前面为键值名称,用于建立自动发现
# 后面为脚本位置
  • 1
  • 2
  • 3

2、建立自动发现脚本

根据配置文件路径建立脚本,并将获得的值人工更改为json格式

脚本如下:

#/bin/bash
CONFIG_FILE=/etc/zabbix/port.conf
Check(){
    grep -vE '(^ *#|^$)' ${CONFIG_FILE} | grep -vE '^ *[0-9]+' &> /dev/null
    if [ $? -eq 0 ]
    then
        echo Error: ${CONFIG_FILE} Contains Invalid Port.
        exit 1
    else
        portarray=($(grep -vE '(^ *#|^$)' ${CONFIG_FILE} | grep -E '^ *[0-9]+' | awk -F: '{print $1}'))
        name=($(grep -vE '(^ *#|^$)' ${CONFIG_FILE} | grep -E '^ *[0-9]+' | awk -F: '{print $2}'))
        ip=($())
    fi
}
PortDiscovery(){
    length=${#portarray[@]}
    echo "{"
    echo -e '\t'"\"data\":["
    for ((i=0;i<$length;i++))
      do
        printf '\t\t{'
        printf "\n\t\t\t\"{#TCP_PORT}\":\"${portarray[$i]}\","
        printf "\n\t\t\t\"{#TCP_NAME}\":\"${name[$i]}\""
        printf "\n\t\t}"
        if [ $i -lt $[$length-1] ];then
                    echo ','
        fi
      done
    printf  "\n\t]\n"
    echo "}"
}
port(){
    Check
    PortDiscovery
}
port
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

并手动建立包含对应服务的端口及名称的文件

# zabbix-agent端口
1100:zabbix-agent

# mysql端口
3306:mysql

# Jenkins-web端口
8080:Jenkins-web

# Jenkins端口
50000:Jenkins

# Sonar-mysql端口
3310:Sonar-mysql

# Sonar-web端口
8088:Sonar-web

# 测试nginx端口
800:nginx测试
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

完成后,将脚本文件提权并重启客户端服务即可

3、服务端验证

如果正常,则服务端可通过zabbix_get -s 192.168.142.100 -p 1100 -k port.alert命令即可正常收到返回的json格式文本。

其中,-s后为客户端地址,-p后为客户端端口,默认为10050,-k后为设定好的键值名称

在这里插入图片描述

4、页面添加自动发现机制

配置 ——》 模板 ——》 新建模板或是在原有模板上均可 ——》 自动发现规则 ——》创建发现规则

在这里插入图片描述

完成规则建立后 ——》 监控项原型 ——》 创建监控项原型

在这里插入图片描述
最后将模板链接至对应主机即可

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/49208
推荐阅读
相关标签
  

闽ICP备14008679号