Zabbix 网络发现 puppet 管理的网络

Zabbix 网络发现 puppet 管理的网络

我尝试自动发现用 puppet 管理的整个网络,并且由于多种原因,我想使用 zabbix 网络发现功能而不是 Puppetdb。

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

截屏

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

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

[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 个字节

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`

使用自动注册的元数据会有同样的限制:

### 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

答案1

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

处理这个问题的一个项目是https://github.com/voxpupuli/puppet-zabbix#module-description,并且似乎已经使用 Zabbix 3.0 进行了测试。还有其他的,例如https://github.com/purplehazech/puppet-zabbix甚至可能更多。

您应该亲自尝试一下,看看哪一个最适合您的需要。

您已经了解 Zabbix网络发现,但 255 个字符的限制使它对你来说没那么有用。你可以使用更短的代码而不是全名,如“apache::default_confd_files”,但这可能更难维护,而且可能仍然有机会达到限制。

主动代理自动注册有相同的长度限制,因此差别不大。

作为一种黑客式的解决方法,您可以让网络发现或自动注册仅创建主机并启动一个脚本,该脚本使用 zabbix_get 来查询具有主机具有的所有角色的项目键,然后使用 API 将主机链接到模板。

相关内容