我试图自动发现我的整个networking,这是用puppetpipe理的,我想用zabbixnetworking发现function代替Puppetdb出于多种原因。
我已经尝试创build一个名为puppet.classes的用户参数,它将所有类作为逗号分隔值(例如:apache,mysql,zabbix)返回。 这被称为检查发现规则。
然后在我的行动中设置“像apache接收值”,然后“链接到模板:Apache”。 截图
一切都很好,只有less数木偶类,但在我的testing环境中的数据库中的值被截断:
[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:
经过很多debugging,我终于发现发现检查不能超过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并编写一个脚本来自己做这个,但这将是一个相当大的项目,我还没有find一个项目在野外做这个。 如果有的话,我会很高兴听到。
另外,我知道我可以在发现规则中创build多个发现检查,但是我最终将在发现过程中进行40次检查,并且应该在每次有新模板时手动添加它们…我想要一个解决scheme有尽可能less的操作来添加一个新的模板。
有人碰到这个问题,并得到一个可扩展的解决scheme?
我正在使用zabbix 3.0.3
最灵活和最强大的方法是使用Zabbix API创build主机,并将它们从Puppet链接到适当的模板。
一个处理的项目是https://github.com/voxpupuli/puppet-zabbix#module-description ,它似乎已经用Zabbix 3.0进行了testing。 还有其他像https://github.com/purplehazech/puppet-zabbix和可能更多。
你应该自己尝试一下,看看哪一个最适合你的需要。
您已经知道Zabbix networking发现 ,但是255个字符的限制使它对您没有用处。 你可以使用较短的代码,而不是像“apache :: default_confd_files”这样的全名,但是这可能很难维护,可能还有一些机会达到极限。
活动代理自动注册具有相同的长度限制,所以没有太大的不同。
作为一个棘手的解决方法,您可以让networking发现或自动注册只创build主机,并启动一个脚本,它使用zabbix_get查询主机具有的所有angular色的项目键,然后使用API链接主机到模板。