zabbix 自动发现端口服务监控教程

目录

  • 创建数据表(收集haproxy服务的信息)

    • 针对生成的数据表做监控
  • 在haproxy服务机器上配置
  • 在zabbix上添加监控

前言:

1、线上业务使用了几十上百台haproxy服务,需要针对这些服务做监控(包含haproxy端口对应的TCP连接数监控,haproxy服务监控等)。

2、普通的在zabbix_agentd.conf里面配置"UserParameter"的方式太繁琐,这里使用建表(收集数据,汇总数据)的方式。

3、将数据汇总到表里面,通过第三方脚本对数据做一个处理,拿到处理结果并监控。

创建数据表(收集haproxy服务的信息)

  1. 在zabbix_DB上创建表:t_3party_server

create table t_3party_server(
app varchar(64) NOT NULL,
server varchar(64) NOT NULL,
division varchar(64) NOT NULL,
node varchar(64) NOT NULL,
port varchar(64) NOT NULL,
remark int(10) unsigned NOT NULL,
PRIMARY KEY (app,server,division,node,port)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
注释:
app? ? ? ?   #这里写的是项目名称(MOBA项目)
server? ?    #服务名称(haproxy服务)
division ?   #由于起了多个haproxy实例,名称也不一样,所以这里做了区分
node? ? ? ?  #haproxy服务IP地址
port? ? ? ? ?#haproxy服务端口,多个实例端口不同??
remark? ?    #备注作用(由于线上某些haproxy服务安装路径不一致,所以此处用来区分路径,也可以区分其他)
PRIMARY KEY (app,server,division,node,port)? #添加主键
  1. 执行完毕之后查看表结构

  1. 然后往数据表里面插入数据:

    insert into t_3party_server(app,server,division,node,port,remark) values('MM','haproxy','haproxy-login','192.168.32.128','30000','0');
  2. 最终表格效果

针对生成的数据表做监控

监控脚本:放在zabbix_server下 "/install_path/zabbix_server/share/zabbix/externalscripts"

<?php

if ($_SERVER["argc"] != 2) {
        echo "Usage: " . $_SERVER["argv"][0] . " host\n";
        return;
}

$host = $_SERVER["argv"][1];

$mysqlconn = new mysqli("localhost", "root", "123", "zabbix", 3306);
if (mysqli_connect_errno()) {
        echo "fail to connect mysql: " . mysqli_connect_error() . "\n";
        return;
}

$result = $mysqlconn->query("SELECT * FROM t_3party_server WHERE node=\"" . $mysqlconn->real_escape_string($host) . "\"");

$hostvalue = array(
        "data" => array()
);
while ($row = $result->fetch_assoc()) {
        $app = $row["app"];
        $server = $row["server"];
        $division = $row["division"];
        $node = $row["node"];
        $port = $row["port"];
        $remark = $row["remark"];

        if ($remark == "/usr/local")
        {
            $hostvalue["data"][] = array(
                "{#APP}" => $app,
                "{#SERVER}" => $server,
                "{#DIVISION}" => $division,
                "{#PORT}" => $port,
                "{#PATH}" => "/usr/local/" . $division . "/sbin",
            );

             continue;
        }

        $server = substr($server, 0, 15);

        $hostvalue["data"][] = array(
                "{#APP}" => $app,
                "{#SERVER}" => $server,
                "{#DIVISION}" => $division,
                "{#PORT}" => $port,
                "{#PATH}" => "/data/app/" . $division . "/sbin",
                #"{#MFW_PATH}" => "/data/app/" . $division . "/" . ($division ? $division . "/" : "") . $server,
        );
}

echo json_encode($hostvalue);
echo "\n";

脚本生成的数据:

[[email protected] externalscripts]# ./haproxy_discovery.php 192.168.32.128
{"data":[{"{#APP}":"MM","{#SERVER}":"haproxy","{#DIVISION}":"haproxy-login","{#PORT}":"30000","{#PATH}":"\/data\/app\/haproxy-login\/sbin"}]}

转换的json格式如下:

{
    "data":[
        {
            "{#APP}":"MM",
            "{#SERVER}":"haproxy",
            "{#DIVISION}":"haproxy-login",
            "{#PORT}":"30000",
            "{#PATH}":"/data/app/haproxy-login/sbin"
        }
    ]
}

在haproxy服务机器上配置

1、配置:zabbix_agentd.conf

#用来监控TCP连接数
UserParameter=haproxy.tcp.[*],/usr/sbin/ss -ant sport eq :"$1" | awk 'NR>1{++s[$$1]} END {for(k in s){print k,s[k]}}' |grep -w "ESTAB" |awk '{print $$2}'

配置完成后重启zabbix_agentd

在zabbix上添加监控

创建模板-->自动发现规则

定义宏变量:宏的值为json导出后的值

Item1:检查haproxy进程是否存在
Key:proc.num["{#SERVER}",,,"{#PATH}"]

Trigger1:对应Item1
{customize template:proc.num["{#SERVER}",,,"{#PATH}"].last()}<1

Item2:检查haproxy端口对应的TCP连接数
Key:haproxy.tcp.[{#PORT}]

Trigger2:对应Item2
{Template moba server:haproxy.tcp.[{#PORT}].last()}>40000

之后新增haproxy服务添加到监控的流程如下

1、在zabbixDB上的t_3party_server表里添加数据:
INSERT INTO `zabbix`.`t_3party_server` (`app`, `server`, `division`, `node`, `port`, `remark`) VALUES ('MOBA', 'haproxy', 'haproxy', '10.111.152.15', '30032', '0');

2、在机器上添加配置参数:
vim /data/app/zabbix_agent/etc/zabbix_agentd.conf
#Haproxy
UserParameter=haproxy.tcp.[*],/usr/sbin/ss -ant sport eq :"$1" | awk 'NR>1{++s[$$1]} END {for(k in s){print k,s[k]}}' |grep -w "ESTAB" |awk '{print $$2}'

3、配置完毕后重启 zabbix_agentd
pkill zabbix_agentd
/data/app/zabbix_agent/sbin/zabbix_agentd

4、到zabbix上监控haproxy服务是否被监控

原文地址:https://www.cnblogs.com/qinyujie/p/11470232.html

时间: 2024-10-05 05:22:38

zabbix 自动发现端口服务监控教程的相关文章

zabbix自动发现端口并监控

参考 http://ywzhou.blog.51cto.com/2785388/1580160 1 客户端新建脚本 #!/bin/bash portarray=(`sudo netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`) length=${#portarray[@]} printf "{\n" printf  '\

zabbix 自动发现端口进行监控

zabbix 探索规则自带磁盘及网卡的,参照后整理探索端口并自动添加监控报警功能 : shell脚本: #!/bin/bash port_array=(`netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort |uniq   2>/dev/null`) length=${#port_array[@]} printf "{\n" p

zabbix自动发现端口并添加监控

说明:zabbix2.0以上之持了discovery功能,该discover并不是之前的 Actions中的discovery,zabbix官方是通过该discovery自动来发现服务的分区.网卡等,这些不固定的因素监控.写了一个自动发现服务器listening端口的discovery脚本,这样就会定期扫描服务器上监听的端口,自动增加端口.删除端口的监控 一.编写tcp监听端口的shell脚本: vim discovertcpport.sh #!/bin/bash portarray=(`net

通过zabbix自动发现Tomcat服务端口

Tomcat端口自动发现 原理:通过shell脚本转出本机的端口,通过zabbix discovery自动匹配过滤Tomcat常用的端口. 脚本tomcat_port.sh #!/bin/bash portarray=(`sudo netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`) length=${#portarray[@]} prin

zabbix自动发现实现批量监控docker状态

最近在搞zabbix监控docker以及docker内部应用状态信息,网上找的资料好少,只找到了一个大神的一篇文章,用的是python实现监控docker容器的基本状态,我在他给的脚本基础上进行修改,另外,增加了docker内部常用应用的状态监控,目前在测试环境上部署成功了,具体还需要在线上环境部署后才能检验出效果如何. 好了,根据惯例,废话讲完了,开始进入正题了. 首先,介绍下该监控套件有三个脚本,一个是自动发现主机上的docker容器脚本,另一个是用python写的获取每个docker容器的

zabbix自动发现硬盘并监控其IO

在使用zabbix监控Linux主机的时候,我们希望zabbix能够自动发现Linux主机上有多少块硬盘,而不是我们手动去添加. 实验目的: 让zabbix能够自动发现Linux服务器的磁盘,并能够监控磁盘IO且绘出图形 实验设备: zabbix-server: 172.17.5.230 zabbix-client:  182.17.5.219 实验环境: linux centos 6.6 zabbix-2.4.6 实验步骤 1. 在zabbix客户端的安装目录,如/usr/local/zabb

zabbix自动发现mysql端口并监控

一.需求: 因为我们是游戏业务,要用到mysql,一个服务器上面跑多个mysql实例也是很正常.如果单独手动一台台修改agent.conf,添加web监控,太费时费力.所以就想的要用zabbix 的自动发现来监控 二.配置Agent 1.编写自动发现端口脚本 [[email protected] ~]# cat /etc/zabbix/alertscripts/zabbix_discovery_mysql.sh  #!/bin/bash mysql() {             port=($

zabbix自动发现监控tomcat健康页面

一.背景 公司系统平台有10几个tomcat服务,由于需要服务保持全年无间断服务,特在tomcat中嵌入专门的监控页面,在curl 专用页面返回值为200时,则认定服务正常运行,否则报警发送专门的监控运维的邮箱. 二.原理 正常的tomcat健康状态监控页面如下图 我们利用如下命令判断返回值是否为200 shell>/usr/bin/curl -o /dev/null -s --connect-timeout 5 -w '%{http_code}' http://10.0.0.107:9100/

zabbix自动发现监控mongo

1: zabbix自动发现mongo监控的端口,并返回zabbix_server需要的格式,脚本部署在zabbix_agent上,路径为/usr/local/zabbix/zabbix_discover_mongo.sh,脚本内容如下: #!/bin/sh #zhuangweihong 20160419 zabbix discover mysql res=`sudo ss -tulnp|grep mongo|grep -v 28107|awk '{print $(NF-2)}'|awk -F':