首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zabbix网络木偶管理网络的发现

Zabbix网络木偶管理网络的发现
EN

Server Fault用户
提问于 2016-05-24 20:59:23
回答 1查看 507关注 0票数 2

我试图使整个网络的发现自动化,整个网络是由傀儡管理的,出于多种原因,我想使用zabbix网络发现特性而不是Puppetdb。

我尝试创建一个名为puppet.classes的用户参数,它以逗号分隔的值(ex:、apache、mysql、zabbix )返回所有类。这被称为对发现规则的检查。

然后在我的操作中设置“接收值像Apache”,然后设置“链接到模板: apache”。屏幕截图

只要有几个木偶类,一切都很好,但是在我的测试环境中,数据库中的值被截断了:

代码语言:javascript
复制
[zabbix]> select dserviceid,dhostid,status,lastup,lastdown,value,dns from dservices where dcheckid=3 and type=9 and key_='puppet.classes' \G
*************************** 1. row ***************************
dserviceid: 9
   dhostid: 3
    status: 0
    lastup: 1464103581
  lastdown: 0
     value: ,apache,apache::default_confd_files,apache::default_mods,apache::mod::alias,apache::mod::dir,apache::mod::filter,apache::mod::mime,apache::mod::php,apache::mod::prefork,apache::mod::ssl,apache::mod::status,apache::params,apache::service,apache::version,ap
       dns: 

经过大量调试之后,我终于发现发现检查不能超过255字节

代码语言:javascript
复制
src/libs/zbxdbhigh/discovery.c
  static void discovery_update_dservice(zbx_uint64_t dserviceid, int status, int lastup, int lastdown, const char *value)
  {
      char    *value_esc;
      value_esc = DBdyn_escape_string_len(value, DSERVICE_VALUE_LEN);
      DBexecute("update dservices set status=%d,lastup=%d,lastdown=%d,value='%s' where dserviceid=" ZBX_FS_UI64, status, lastup, lastdown, value_esc, dserviceid);

      zbx_free(value_esc);
  }

include/db.h
  #define DSERVICE_VALUE_LEN        255`

使用具有自动注册的元数据将具有相同的限制:

代码语言:javascript
复制
### Option: HostMetadata
#   Optional parameter that defines host metadata.
#   Host metadata is used at host auto-registration process.
#   An agent will issue an error and not start if the value is over limit of 255 characters.
#   If not defined, value will be acquired from HostMetadataItem.
#
# Mandatory: no
# Range: 0-255 characters
# Default:
# HostMetadata=

我可以使用API并自己编写一个脚本,但这将是一个相当大的项目,而且我还没有在野外找到一个这样做的项目。如果有,我会很高兴听到的。

而且,我知道我可以在发现规则中创建多个发现检查,但是我最终会在发现中使用40+检查,并且应该在每次我们有一个新的模板时手动添加它们……我希望有一个解决方案,那里有尽可能少的操作来添加一个新的模板。

是否有人遇到了这个问题,并得到了一个可伸缩的解决方案?

我用的是zabbix 3.0.3

EN

回答 1

Server Fault用户

回答已采纳

发布于 2016-05-25 06:07:45

最灵活和最强大的方法将是使用Zabbix来创建主机并将它们链接到来自Puppet的适当模板。

一个处理https://github.com/voxpupuli/puppet-zabbix#module-description的项目,似乎已经用Zabbix3.0进行了测试。还有其他类似https://github.com/purplehazech/puppet-zabbix的,可能还有更多。

你应该自己试一试,看看哪一个最适合你的需要。

您已经知道了Zabbix 网络发现,但是255个char限制使得它对您没有多大用处。您可以使用较短的代码,而不是像"apache::default_confd_files“这样的全名,但这可能更难维护,而且可能仍然有一些机会达到极限。

主动代理自动注册有相同的长度限制,所以没有太大的不同。

作为一种简单的解决方法,您可以让网络发现或自动注册只创建主机并启动一个脚本,该脚本使用zabbix_get查询一个条目键,其中包含主机所具有的所有角色,然后使用API将主机链接到模板。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/778805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档