Apologies in advance for the newbie question - we're still early days with Zabbix...
I have a network with dozens of small VPN-connected devices, each running several custom apps and a Zabbix Agent. Our custom apps all generate interesting management data that I want to integrate with Zabbix, and I'm trying to understand the most efficient way to do this.
As an example, one of our applications running on the endpoint devices periodically updates an XML status file, something like this:
We want to put all of these metrics in Zabbix so that we can monitor the app network wide using Zabbix triggers, graphs and so forth.
We've played around with scripts via "system.run()" - it lets us pluck metrics out of the status file, but it seems like it requires a transaction for every metric on every device, and we end up running an inefficient shell script thousands of times across the network to get the data we want...that hardly seems optimal. We also have a crude command-line program that fetches the information above from any of our devices, so we can run our program on the Zabbix server to fetch metrics like the ones above from any endpoint. It's still the same issue, except we end up running thousands of transactions on the Zabbix Server rather than the agent endpoint. Both seem like poor choices.
Given the sophistication we see elsewhere in Zabbix, we're thinking there must be an efficient way to instrument a custom app in Zabbix, and any hints we could get on the best way to do this are definitely appreciated.
I have a network with dozens of small VPN-connected devices, each running several custom apps and a Zabbix Agent. Our custom apps all generate interesting management data that I want to integrate with Zabbix, and I'm trying to understand the most efficient way to do this.
As an example, one of our applications running on the endpoint devices periodically updates an XML status file, something like this:
Code:
<Health>Okay at hh:mm:ss.SSS</Health> <Transactions>nnnnnn</Transactions> <LastEventTime>YYYYmmdd@HH:MM:SS</LastEventTime> <Uptime>nnnnn seconds</Uptime> <Pid>2521</Pid> <ClientRequests>nnnnn</ClientRequests> <Errors>nnnn</Errors> <CPUTtime>nnnn.nnn seconds</CPUTime> <Cores>4</Cores> <MemPeak>981.5MB</MemPeak> <MemInUse>145.90MB</MemInUse> <MemMax>2731MB</MemMax> <LastMessage>Initialization Complete</LastMessage> ...
We've played around with scripts via "system.run()" - it lets us pluck metrics out of the status file, but it seems like it requires a transaction for every metric on every device, and we end up running an inefficient shell script thousands of times across the network to get the data we want...that hardly seems optimal. We also have a crude command-line program that fetches the information above from any of our devices, so we can run our program on the Zabbix server to fetch metrics like the ones above from any endpoint. It's still the same issue, except we end up running thousands of transactions on the Zabbix Server rather than the agent endpoint. Both seem like poor choices.
Given the sophistication we see elsewhere in Zabbix, we're thinking there must be an efficient way to instrument a custom app in Zabbix, and any hints we could get on the best way to do this are definitely appreciated.
Comment