使用zabbix监控VMware

article/2025/11/7 23:03:14

概述

1、VMware本身报警可以在vcenter中获取到,但无法通过微信或者短信通知,如果不是专门人负责也不好24小时一直查看,所以使用监控软件进行实时监控,很有必要

2、zabbix是一款开源监控软件,功能强大,内置很多的监控模板,还可以根据自己的需求定制模板,使用起来非常方便

3、要做的事就是使用zabbix监控Vmware

详细步骤

一、私有云平台zabbix_proxy搭建

  1. 在私有云平台搭建虚拟机,配置好基础环境,开通上网权限。
  2. 添加Zabbix安装源

1).rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm

2).yum clean all

3).yum install munin –nogpgcheck

  1. 安装Proxy和Agent

yum install zabbix-proxy-mysql

  1. 创建数据库和账号

1)create database zabbix_proxy character set utf8 collate utf8_bin;

2)grant all privileges on zabbix_proxy.* to zabbix_proxy@'localhost' identified by 'password';

3)flush privileges;

  1. 初始化数据库

zcat /usr/share/doc/zabbix-proxy-mysql*/schema.sql.gz | mysql -uroot -p zabbix_proxy

  1. 配置Proxy

vi /etc/zabbix/zabbix_proxy.conf

Server=XX.XX.XX.XX    #server地址

ServerPort=10051       #server端口

Hostname=XX.XX.XX.XX  #proxy名称,web配置代理程序时名称要与这个一致

LogFile=/var/log/zabbix/zabbix_proxy.log   #日志文件地址

LogFileSize=0                

PidFile=/var/run/zabbix/zabbix_proxy.pid

SocketDir=/var/run/zabbix

DBName=zabbix_proxy          #数据库名称,与第4步配置数据库名称一致

DBUser=zabbix_proxy           #数据库用户名,与第4步配置用户名一致

DBPassword=password          #数据库密码,与第4步配置密码一致

StartVMwareCollectors=6        #预先配置的vmware监控实例数量

VMwareFrequency=60   # 获取更新vmware集群结构的最小间隔时间(分钟)

VMwarePerfFrequency=60 #  从单个VMware服务检索性能计数器统计数据的间隔时间(秒)

VMwareCacheSize=80M    #内存中维护的vmware集群结构的大小,建议80M

VMwareTimeout=300  # vmware采集器等待 VMware 服务(vCenter or ESX 管理程序)响应的最大时长    

SNMPTrapperFile=/tmp/zabbix_traps.tmp  #trap使用的文件

StartSNMPTrapper=1                  #需要trap消息的此处改为1

CacheSize=4096M

Timeout=4            #超时时间,默认是3秒,根据网络情况而定

ExternalScripts=/usr/lib/zabbix/externalscripts

LogSlowQueries=3000

  1. 启动proxy服务和设置开机启动

systemctl start zabbix-proxy

systemctl enable zabbix-proxy

  1. 在server页面添加代理

 

注:名称要与第6步中Hostname项中配置的名称一致

至此,proxy配置完成,可以通过第6步中LogFile中日志文件的位置查看日志,来确定proxy已经正常运行。

二、在proxy所在虚拟机上安装agent监控proxy代理

1、安装agent:

   yum –y install zabbix-agent

2、配置agent

   vim /etc/zabbix/zabbix_agentd.conf

PidFile=/var/run/zabbix/zabbix_agentd.pid

LogFile=/var/log/zabbix/zabbix_agentd.log

LogFileSize=0

Server=XX.XX.XX.XX              #直接对接server,如果是使用代理则写代理地址

ServerActive=XX.XX.XX.XX         #直接对接server,如果是使用代理则写代理地址

Hostname=XX.XX.XX.XX          #hostname要跟网页上配置时名称一致

Timeout=10

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

三、配置vcenter监控

Esxi可以使用vcenter作为采集器监控,vcenter本身的监控只支持trap方式,此处先配置vcenter本身的监控。基本流程是vcenter把trap消息发送到代理,然后snmptrapd接受消息,调用zabbix_trap_receiver.pl脚本,这个脚本调用里面写入的vcenter脚本,将处理后的消息写入到/tmp/zabbix_traps.tmp,最后页面再调用这个tmp文件

  1. 首先在vcenter上配置trap

 

 2.在proxy上安装snmp

   yum  -y install net-snmp-*  

 

  1. 配置snmptrap文件

vim /etc/snmp/snmptrapd.conf

authCommunity   log,execute,net [关键字] #与第1步中vcentr社区字符一致

perl do "/usr/bin/zabbix_trap_receiver.pl"         #确定使用的perl脚本

  1. 编辑/usr/bin/zabbix_trap_receiver.pl脚本

可以官网下载源码

#vim /usr/bin/zabbix_trap_receiver.pl

#!/usr/bin/env perl

use NetSNMP::TrapReceiver;

use lib '/etc/zabbix/snmptrap';             #脚本存放位置

use vcenter;                            #根据需求写的脚本,祥见下文第七步

#

# Zabbix

# Copyright (C) 2001-2019 Zabbix SIA

#

# This program is free software; you can redistribute it and/or modify

# it under the terms of the GNU General Public License as published by

# the Free Software Foundation; either version 2 of the License, or

# (at your option) any later version.

#

# This program is distributed in the hope that it will be useful,

# but WITHOUT ANY WARRANTY; without even the implied warranty of

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

# GNU General Public License for more details.

#

# You should have received a copy of the GNU General Public License

# along with this program; if not, write to the Free Software

# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

#

#########################################

#### ABOUT ZABBIX SNMP TRAP RECEIVER ####

#########################################

# This is an embedded perl SNMP trapper receiver designed for sending data to the server.

# The receiver will pass the received SNMP traps to Zabbix server or proxy running on the

# same machine. Please configure the server/proxy accordingly.

#

# Read more about using embedded perl with Net-SNMP:

#   http://net-snmp.sourceforge.net/wiki/index.php/Tut:Extending_snmpd_using_perl

#################################################

#### ZABBIX SNMP TRAP RECEIVER CONFIGURATION ####

#################################################

#   as in the server (or proxy) configuration file.

#

# Mandatory: yes

# Default:

$SNMPTrapperFile = '/tmp/zabbix_traps.tmp';

### Option: DateTimeFormat

#

# Mandatory: yes

# Default:

$DateTimeFormat = '%H:%M:%S %Y/%m/%d';

###################################

#### ZABBIX SNMP TRAP RECEIVER ####

###################################

#use URI::Escape;

#use Encode;

sub zabbix_receiver

{

    my (%pdu_info) = %{$_[0]};

    my (@varbinds) = @{$_[1]};

    # open the output file

    unless (sysopen(OUTPUT_FILE, $SNMPTrapperFile, O_WRONLY|O_APPEND|O_CREAT, 0666))

    {

        print STDERR "Cannot open [$SNMPTrapperFile]: $!\n";

        return NETSNMPTRAPD_HANDLER_FAIL;

    }

    # get the host name

    my $hostname = $pdu_info{'receivedfrom'} || 'unknown';

    if ($hostname ne 'unknown')

    {

        $hostname = $1 || 'unknown';

    }

    if ($hostname eq 'vc地址')

    {

       close (OUTPUT_FILE);

       return NETSNMPTRAPD_HANDLER_OK;

#!/usr/bin/env perl

use NetSNMP::TrapReceiver;

use lib '/etc/zabbix/snmptrap';

use vcenter;

#

# Zabbix

# Copyright (C) 2001-2019 Zabbix SIA

#

# This program is free software; you can redistribute it and/or modify

# it under the terms of the GNU General Public License as published by

# the Free Software Foundation; either version 2 of the License, or

# (at your option) any later version.

#

# This program is distributed in the hope that it will be useful,

# but WITHOUT ANY WARRANTY; without even the implied warranty of

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

# GNU General Public License for more details.

#

# You should have received a copy of the GNU General Public License

# along with this program; if not, write to the Free Software

# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

#

#########################################

#### ABOUT ZABBIX SNMP TRAP RECEIVER ####

#########################################

# This is an embedded perl SNMP trapper receiver designed for sending data to the server.

# The receiver will pass the received SNMP traps to Zabbix server or proxy running on the

# same machine. Please configure the server/proxy accordingly.

#

# Read more about using embedded perl with Net-SNMP:

#   http://net-snmp.sourceforge.net/wiki/index.php/Tut:Extending_snmpd_using_perl

#################################################

#### ZABBIX SNMP TRAP RECEIVER CONFIGURATION ####

#################################################

#   as in the server (or proxy) configuration file.

#

# Mandatory: yes

# Default:

$SNMPTrapperFile = '/tmp/zabbix_traps.tmp';

### Option: DateTimeFormat

#

# Mandatory: yes

# Default:

$DateTimeFormat = '%H:%M:%S %Y/%m/%d';

###################################

#### ZABBIX SNMP TRAP RECEIVER ####

###################################

#use URI::Escape;

#use Encode;

sub zabbix_receiver

{

    my (%pdu_info) = %{$_[0]};

    my (@varbinds) = @{$_[1]};

    # open the output file

    unless (sysopen(OUTPUT_FILE, $SNMPTrapperFile, O_WRONLY|O_APPEND|O_CREAT, 0666))

    {

        print STDERR "Cannot open [$SNMPTrapperFile]: $!\n";

        return NETSNMPTRAPD_HANDLER_FAIL;

    }

    # get the host name

    my $hostname = $pdu_info{'receivedfrom'} || 'unknown';

    if ($hostname ne 'unknown')

    {

        $hostname = $1 || 'unknown';

    }

    if ($hostname eq 'vc地址')

    {

       close (OUTPUT_FILE);

       return NETSNMPTRAPD_HANDLER_OK;

    }

    # print trap header

    #       timestamp must be placed at the beggining of the first line (can be omitted)

    #       the first line must include the header "ZBXTRAP [IP/DNS address] "

    #              * IP/DNS address is the used to find the corresponding SNMP trap items

    #              * this header will be cut during processing (will not appear in the item value)

    printf OUTPUT_FILE "%s ZBXTRAP %s\n", strftime($DateTimeFormat, localtime), $hostname;

    # print the PDU info

    #print OUTPUT_FILE "PDU INFO:\n";

    #foreach my $key(keys(%pdu_info))

    #{

    #   if ($pdu_info{$key} !~ /^[[:print:]]*$/)

    #   {

    #       my $OctetAsHex = unpack('H*', $pdu_info{$key}); # convert octet string to hex

    #       $pdu_info{$key} = "0x$OctetAsHex";      # apply 0x prefix for consistency

    #   }

#

#       printf OUTPUT_FILE "  %-30s %s\n", $key, $pdu_info{$key};

#   }

    # print the variable bindings:

    print OUTPUT_FILE "VARBINDS:\n";

    foreach my $x (@varbinds)

    {

        $oid = $x->[0]->{'oidptr'}->to_string;

        $val = $x->[1];

        printf OUTPUT_FILE "  %-30s = %s\n", $x->[0], $val;

    }

    close (OUTPUT_FILE);

    return NETSNMPTRAPD_HANDLER_OK;

}

NetSNMP::TrapReceiver::register("all", \&zabbix_receiver) or

    die "failed to register Zabbix SNMP trap receiver\n";

print STDOUT "Loaded Zabbix SNMP trap receiver\n";

  1. 将/usr/bin/zabbix_trap_receiver.pl 加执行权限直接运行,出现“Loaded Zabbix SNMP trap receiver”即为正常运行,有问题解决问题,注意net-snmp版本问题,zabbix4.4.10对应net-snmp 5.7.2-49(这个问题曾卡住好久)
  2. 更改/etc/zabbix/zabbix_proxy.conf配置文件,开启snmptrap

   StartSNMPTrapper=1 将这里设为1

    SNMPTrapperFile=/tmp/zabbix_traps.tmp

  1. 建立SNMPTrapperFile使用的文件

   touch /tmp/zabbix_traps.tmp

  1. 编写第4步用到的vcenter,根据第4步lib,放到/etc/zabbix/snmptrap下

vim /etc/zabbix/snmptrap/vcenter

#!/usr/bin/env perl

use URI::Escape;

use Encode;

package vcenter;

sub to_value {

    my (@varbinds) = @{$_[0]};

    my %values = ();

    foreach my $x (@varbinds)

    {

        my $isHex = 0;

        my $oid = $x->[0];

        my $val = $x->[1];

        if($val =~ /Hex-STRING:/){

            $isHex = 1;

        }

        $val =~ s/^[^\s]+\s//g;

        $val =~ s/(^"|"$)//g;

        if($isHex == 1){

            $val =~ s/[\r\n]//g;

            $val = URI::Escape::uri_unescape("%" . join("%",split(/\s+/, $val)));

        }

        $values{$oid} = exists($oid_value{$oid}) && exists($oid_value{$oid}{$val}) ? $oid_value{$oid}{$val} : $val;

    }

    return "VC故障--$values{'.1.3.6.1.4.1.6876.4.3.306.0'}";

}

1;

  1. 重启zabbix-proxy和snmptrap服务
  2. /tmp/zabbix_traps.tmp是否正常收到数据。

注意:这里遇到一个大坑,/tmp/zabbix_traps.tmp能收到数据,只有VC故障--,后面的没能解析出来,最后发现:

 少了-On这个参数。在/etc/sysconfig/snmptrapd 添加上即可。


http://chatgpt.dhexx.cn/article/uQXRFWSU.shtml

相关文章

zabbix监控vSphere

环境介绍 本次使用测试环境为VCSA 6.7U2(ESXI版本同样为6.7U2) Zabbix版本为 4.4.10 使用的监控模板为zabbix内置Template VM Vmware VCenter创建监控账号 使用管理员账号登录Vcenter,创建监控账号,按照“菜单”→“系统管理”…

zabbix 监控 mysql

zabbix 监控 mysql 1、监控规划 在创建监控项之前要尽量考虑清楚要监控什么,怎么监控,监控数据如何存储,监控数据如何展现,如何处理报警等。要进行监控的系统规划需要对Zabbix很了解,这里只是提出监控的需求。 需求…

zabbix监控

目录 一、zabbix监控 1.1、网站可用性 2、监控什么东西 2.1、监控范畴 3、企业级监控解决方案——Zabbix 4、zabbix主要功能 5、zabbix监控范畴 6、zabbix监控组件 7、zabbix常用的监控架构平台 8、zabbix运行过程图 一、zabbix监控 1、为什么要监控 对于运维人员来说…

zabbix服务器监控

zabbix服务器监控 文章目录 zabbix服务器监控一、zabbix服务器监控概念1.服务器上安装zabbix-agent2.启动zabbix-agent服务 二、监控远程linux服务器1.将server的hosts文件复制到agent上2.agent上安装zabbix-agent3.配置agent端并启动服务4.管理界面创建监控主机 三、为zabbix …

Zabbix监控服务详解+实战

目录 一、监控体系概述 1. 为什么需要监控 2. 监控目标与流程 (1)监控的目标 (2) 监控的流程 3. 监控的对象 (1)CPU监控 (2)磁盘监控 (3)内存监控 …

Zabbix 监控(内容详细 供您参考)

目录 一、Zabbix简介 1.1 Zabbix概述 1.2 Zabbix 监控原理 1.3 zabbix监控部署在系统中,包含常见的五个程序 二、部署zabbix服务端 三、部署zabbix 客户端 在 Web 页而中添加 agent 主机 四、自定义监控内容 1.明确需要执行的linux命令 2.创建zabbix的监控…

EF框架实现增删改查

EF框架实现增删改查 1.创建数据库:先创建两张表,文章类型表以及文章详情表,设置主外键(ID,Catelogid) Catelog:文章类型表 字段:Id(自增),Name&#xff0c…

【EF框架】EF框架的开发方法

前言 EF框架具有有三种数据持久化的方式,分别为Code First,Model First,Database First.看一下它们都有什么联系? 叙述 EF框架的三种工作方式 1.Database First是基于已存在的数据库,利用某些工具(如VS提供的EF设计器&#xff09…

使用EF框架

1.创建一个控制台项目 2.创建一个EF框架 3.查询出一个表中得到所有元素 static void Main(string[] args){//创建一个EF对象var ef new DemoDatabaseEntities1();//遍历数据库Grade表中的所有元素【EF框架对象->Grade表对象->把表内所有元素转换成实体集合Li…

C#控制台EF框架增删改查

1.创建一个linq to sql 或者EF框架,引入自己数据库的表 2.创建一个上下文 3.添加 News是数据库中的一张表名。 创建一个对象,把需要添加的内容放到对象里面,往表中插入对象,提交到数据库中,刷新数据库 。 4. 修改 创…

EF框架你了解多少?

[EF框架的认识] EF教程视频大全 一、 EF简介 ADO.NET Entity Framework 以 Entity Data Model (EDM) 为主,将数据逻辑层切分为三块,分别为 Conceptual Schema, Mapping Schema 与 Storage Schema 三层,其上还有 Entity Client,…

EF-创建EF框架

文章目录 什么是EFEF的作用 EF 分类Model First(模型优先)Code First(代码优先) Database First(数据优先) 如何创建EF 安装创建 注意事项 什么是EF 实体框架(Entity Framework)是微…

EF框架是什么?

Entity Framework 实体框架EF是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架。 ORM是什么? ORM的全称是Object Relational Mapping,即对象关系映射。 ORM框架有很多,EF框架是ORM框架的其中一种&a…

EF框架学习三

实例操作: Database First(数据库优先) 1.1创建一个示例数据库。 1.2打开vs2017,新建项目,如图所示 1.3添加EF框架插件 1.4添加ADO实体数据模型 1.5选择模型类型,点击下一步,然后新建连接&…

C# EF框架使用实例

EF框架 1、新增ADO.NET实体数据模型,但这样会导致新增数据库连接配置 2、选择好后,点添加 3、下一步,点新建连接 在这里如果勾上将App.Config,会自动在配置文件(App.config)中新增数据库连接字符串 4、以…

EF 框架的简介、发展历史;ORM框架概念

一、EF 框架简介 EF 全称是 EntityFramework 。 Entity Framework是ADO.NET 中的一套支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架。 ORM框架(Object Relational Mapping) 翻译过来就是对象关系映射。 如果不用ORM框架,我们一般…

【EF框架】聊一聊EF框架

前言 EF框架的全称EntityFramework ,Entity Framework是ADO.NET 中的一套支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架。 叙述 ORM ORM是一种将数据从域对象存储到关系数据库(如MS SQL Server)的工具,以自动化的方…

给EF框架自动生成实体类修改名字

给EF框架自动生成实体类名字一般以T_ 开头,不符合我们给实体类起的名字这个时候如何进行修改呢? 右击2 选择属性 将属性中的实体集名称和名称改成自己想要的样子就可以啦~ 然后点击重新生成解决方案,我们就能修改自动生成的.cs的实体类名…

EF框架搭建

这是在vs2019版本社区版的创建流程; 右键项目添加新建项->选择数据, 这里选择第一个ADO.NET实体数据模型,并重命名,我这里命名为数据库名 基本上用的都是第一个,通过数据库生成实体类。 因为当前项目没有连接过&am…

EF框架如何搭建

EF出现背景 1、以前程序设计师一定要为了连接与访问数据库而去学习 SQL 指令,因此在信息业中有很多人都在研究如何将程序设计模型和数据库集成在一起,对象关系对应 (Object-Relational Mapping) 的技术就是由此而生。 2、像Hibernate或NHibernate都是这…