我试图使整个网络的发现自动化,整个网络是由傀儡管理的,出于多种原因,我想使用zabbix网络发现特性而不是Puppetdb。
我尝试创建一个名为puppet.classes的用户参数,它以逗号分隔的值(ex:、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
发布于 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将主机链接到模板。
https://serverfault.com/questions/778805
复制相似问题