Another exciting feature of IxoraRMS is the ability to add custom monitoring data providers and to integrate them seamlessly with the built-in agents.
A provider is the component which collects data from an external source and converts it into entities and counters. Providers are always associated with agents, from which they inherit configuration options, and to which they contribute counters.
The steps involved in creating a custom monitoring data provider are:
This dialog is accessible from "Tools" - "Agent Installer".
To add a new agent, click "Install". This brings out the "Agent Installation Type" dialog box as shown below.
Select the "Custom agent installation" entry from the drop down list and press "Ok". This opens the "Agent Template" dialog box as shown below.
Select the desired agent template and press "Ok".
The available agent templates are:
The next dialog is "Agent Installation Data".
The following fields are available on this dialog.
applications
network
databases
webServers
appServers
operatingSystems
miscellaneous
Example: If the agent name is agents.myagent then the name of the properties file containing localization data must be agents_myagent.properties
The following agent definition data can be assigned to one or more agent versions by selecting the right entry in the "Data for version(s)" list and clicking on the "Edit" button:
This version specific data is defined using the "Versionable Agent Intallation Data" dialog shown below.
Since version 1.1 of IxoraRMS, default values can be assigned for the configuration parameters of the agent. However this is not achievable yet through the user interface. The agent definition file needs to be modified if this is needed. This file is located at <IxoraRMS_installation_folder>/agents/<agent_id>/agent.
The following is an example of a custom JMX JSR 160 agent which has default values specified for some configuration parameters (the highlighted section):
<?xml version="1.0" encoding="UTF-8"?><agent>
<class>com.ixora.rms.agents.jmxjsr160.JMXJSR160Agent</class>
<version>1.0.0</version>
<name>MyWebSphereJSR160Agent</name>
<description>A description of your agent</description>
<custom>true</custom>
<category>applications</category>
<versions>
<version>Curam_v5_2+_WebSphere_v6.1+</version>
</versions>
<versionItems>
<versionItem>
<locations>
<location>0</location>
<location>1</location>
</locations>
<jars>
<jar>/jars/AgentJMXJSR160.jar</jar>
<jar>/jars/RMSJMX.jar</jar>
</jars>
<customconfigpanel>com.ixora.rms.agents.jmxjsr160.ConfigurationPanel</customconfigpanel>
<defaultconfig>
<property name="extra_properties" value="java.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory" />
<property name="jmx_connection_string" value="service:jmx:iiop://{host}:9810/jndi/JMXConnector" />
</defaultconfig>
<uiJar>/jars/AgentJMXJSR160_ui.jar</uiJar>
<agentVersions/>
</versionItem>
</versionItems>
</agent>
Once the new agent is defined, providers of monitoring data can be assigned to it.
Access this window from "Tools" - "Provider Manager". To create a Provider, first select an Agent and click Add. This will bring up the Provider Instance Editor.
Common fields
Note that in all options detailed below you can use properties of the agent, through the following syntax: {agent.propertyname}. Thus, if the agent's configuration has a property called 'propertyname', its value will be used here. This makes it convenient for example to attach multiple SQL based providers, which will all use the username and password configured in the agent.
Along with the {agent.propertyname} syntax, the following built-in tokens can be used:
Java specific options
For more information on Java providers see "Java Providers".
Process specific options
SQL specific options
For more information on SQL providers see "SQL Providers".
Table parser options
Convert column to row example: If input data is:
10
22
4
5
506
269
then by using the conversion the output will be:
10 22 4 5 506 269
which can be now extracted into a hierarchy like this:
root
+- Networking
| [Aborted_clients]
| [Aborted_connects]
+- Traffic
| [Bytes_received]
| [Bytes_sent]
+- Binlog
[Binlog_cache_disk_use]
[Binlog_cache_use]
Properties parser options
NOTE: Each counter resulted from parsing will need to have an entry in the list of counters, with a counter ID and an entity ID matching the ones extracted from text. If the regular expressions match values which are not in this list they will be ignored, without creating new counters or entities.
Example of a property parser definition:
For the command:
#netstat -s
Ip:
1916 total packets received
0 forwarded
0 incoming packets discarded
1696 incoming packets delivered
1718 requests sent out
Icmp:
0 ICMP messages received
0 input ICMP message failed.
ICMP input histogram:
0 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
The parser definition is:
And the generated entities are:
Network protocols
+- Ip
| [total packets received]
| [forwarded]
| [incoming packets discarded]
| [incoming packets delivered]
| [requests sent out]
+- Icmp
[ICMP messages received]
[input ICMP message failed]
[ICMP messages sent]
[ICMP messages failed]
Column definition
Column definition is the main part of creating a provider. Each of the three provider types (SQL, Java and Process) will output a table. On this Parser page you are giving a meaning to each column of this table, by associating it with an Entity or Counter.
The parser needs to have definitions for all columns, regardless of whether they will be visible in the entity tree or not. To skip a column, leave the EntityID and CounterID empty for that particular column index.
To convert a column into a Counter, enter a CounterID and an EntityID for it. The CounterID is a simple text, which will be looked up in the agent's Message Catalog (see "Agent Installer"). If no translation is available for that text, the CounterID will be displayed as-is throughout IxoraRMS.
The syntax of an EntityID is:
root/e1/e2/...
where e1, e2 and so on are simple strings, localised in the same way as the CounterID. Each of these elements will result in an Entity being added to the tree. The final Entity in the path will contain the Counter.
To convert a column into an Entity, only enter an EntityID, but no CounterID.
To create dynamic (volatile) entities based on values in a certain column, use the syntax:
root/e1/{n}
where n is the index of the column containing entity names. The value between {
and } can contain any characters, the rule is that any digit is treated as the index of a column. In the example below the PID of a process (found at column 0) is appended to the name (found at column 1) to build just one entity name.
root/Processes/{0#1} or root/Processes/{0-1}
An example of creating entities and counters out of the output of the Unix command ps:
# ps
PID CLS PRI TTY TIME COMD
5996 TS 70 pts004 0:00 sh
18294 TS 59 pts004 0:00 ps
Parser definitions would be:
Column EntityID CounterID
0 root/Processes/{0}
1 root/Processes/{0} Scheduling class
2 root/Processes/{0} Priority
3 root/Processes/{0} TTY
4 root/Processes/{0} Time
5 root/Processes/{0} Command line
And when the agent containing this provider is activated, the entity tree would look like:
Agent
+- Processes
+- 5996
| [Scheduling class]
| [Priority]
| [TTY]
| [Time]
| [Command line]
+- 18294
[Scheduling class]
[Priority]
[TTY]
[Time]
[Command line]
You can find more complex examples in the definitions of some IxoraRMS's own agents, such as Linux or Oracle.
The Descriptors tab allows entering descriptions and types for entities and counters: