我有一个应用程序将事件记录到MySQL中的表中,每个条目(行)都有一个时间戳,状态和一些其他任意位元数据。
以非常简化的形式,日志表可能看起来像 log_id | datetime | result_code |消息
我想要求Zabbix离开并直接向数据库查询统计数据可能有点雄心勃勃,但我想知道它是如何构建的。
我可以有一个单独的进程查询表并写出一个日志文件,但感觉有点笨拙。我可以从zabbix_agent.conf运行一个脚本,但我不确定如何将该数据转换为Zabbix解释的度量标准。
答案 0 :(得分:3)
我理解这个问题的方法是能够以与Zabbix'大致相同的方式监视具有日志记录的数据库。 built-in log monitoring
如果是这样,这个问题分为两部分:(1)如何仅为数据库轮询新记录,以及(2)如何以可以理解的方式将数据发送到Zabbix。我将(1)留给你,但会提出一种方法来处理(2)。
在Zabbix代理处理Windows事件日志的方式之后,我们可以将解决方案建模为(2)。如果我们要求Windows上的Zabbix代理监视,例如" eventlog [Application]",我们会注意到它向Zabbix服务器发送如下的JSON:
{
"data": [
{
"clock": 1398753145,
"ns": 928525552,
"eventid": 9003,
"host": "Windows 2008",
"key": "eventlog[Application]",
"lastlogsize": 51,
"severity": 1,
"source": "Desktop Window Manager",
"timestamp": 1375273705,
"value": "The Desktop Window Manager was unable to ..."
}
],
"request": "agent data"
}
现在,我们可以使用相同的协议发送我们想要的数据。例如,根据日志表的简化形式,我们可以将" log_id"进入" lastlogsize"," datetime"进入" timestamp"," result_code"进入" eventid"和"消息"进入"价值"。然后,我们可以使用Zabbix源代码中提供的便捷misc / debug / sender.pl脚本将此数据发送到Zabbix服务器:
$ cat mysql.json
{
"data": [
{
"clock": 1398753145,
"ns": 928525552,
"eventid": 12345,
"host": "MySQL Server",
"key": "eventlog[mysql.log]",
"lastlogsize": 1,
"severity": 1,
"source": "My Application",
"timestamp": 1375273705,
"value": "My Application was unable to ..."
}
],
"request": "agent data"
}
$ ./sender.pl -h 127.0.0.1 -p 10051 -i mysql.json
ZBXD^{
"response":"success",
"info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000130"}
但有两点需要注意。一个是为了享受Zabbix前端的Windows事件日志工具(比如在#34中显示Windows事件日志列;监控"""最新数据"),密钥应以&#开头34;事件日志[&#34 ;.其次是" lastlogsize"应该随着你发送的每条记录而增加,但如果你正在使用" log_id" for" lastlogsize"那会很自然。
除此之外,您现在应该能够享受特定于Windows事件日志的trigger functions,例如logeventid(),logseverity()和logsource()以及macros {ITEM.LOG.EVENTID}, {ITEM.LOG.SEVERITY}和{ITEM.LOG.SOURCE}。
项目的配置示例可能如下:
答案 1 :(得分:1)
答案 2 :(得分:0)
对于asaveljevs答案中提到的part1,我会在这里查看MySQL Trigger来提供帮助。 因此触发器可以推送一个脚本,将信息推送到Zabbix。