Skip to main content

Parameters and configuration

Parameters

--confPath to the configuration file.
--target\_databasesPath to the configuration file containing the database targets.
--target_agentsPath to the configuration file containing the agent targets.
--custom_queriesPath to the configuration file containing custom queries.

Configuration file (--conf)

[CONF]
agents_group_id: < The ID of the group where agents will be created. >
interval: < The agent monitoring interval in seconds. >
user: < The connection username. >
password: < The password for the user. >
threads: < The number of threads to be used for agent creation. >
modules_prefix: < The prefix for module names. >
execute_custom_queries: < Activate with 1 to enable the use of custom queries. >
analyze_connections: < Activate with 1 to enable connection monitoring. >
engine_uptime: < Activate with 1 to enable runtime monitoring. >
query_stats: < Activate with 1 to enable query statistics monitoring. >
check_tablespaces: < Activate with 1 to enable tablespace statistics monitoring. >
fragmentation_ratio: < Activate with 1 to enable fragmentation ratio statistics monitoring. >
cache_stats: < Activate with 1 to enable cache statistics monitoring. >
thick_mode = < Activate with 1 to enable thick mode connection >
multitenant = < Enable with 1 to enable multi-tenant monitoring. Only applicable to Oracle multi-tenant architectures (CDB/PDB); in non-CDB environments, it will simply issue a harmless warning >
agent_per_pdb = <Enable with 1 to enable agent creation for each PDB. Applicable only to Oracle multitenant (CDB/PDB) architectures. If this box is checked, an agent will be created for each PDB in the instance; otherwise, the modules for each PDB will be included in the instance's primary agent. >
client_path = < Client path. Only necessary in case of using the thick mode >
entities_list = < Path where the entity file will be generated>
enable_entities_interval = < Path to activate the entity file (multitenant mode only)>
entities_interval = < entity file rescan interval>

[THRESHOLDS]
< Regex pattern matching module names > = < Desired thresholds in the module, separated by “|” >

Example

[CONF]
agents_group_id = 10
interval = 300
user = sa 
password = HHgD85V@
threads = 1
modules_prefix = 
execute_custom_queries = 1
analyze_connections = 1
engine_uptime = 1
query_stats = 1
check_tablespaces = 1
fragmentation_ratio = 1
cache_stats = 1
thick_mode = 1
multitenant = 0
agent_per_pdb = 0
client_path = /usr/lib/oracle/21/client64/lib/
entities_list = /tmp/entities_oracle.txt
enable_entities_interval = 1
entities_interval = 48000

[THRESHOLDS]
^tablespace = min_warning 10|max_warning 20|min_critical 0|max_critical 10
fragmentation = min_warning 10

The standard installation of instant client 19.8 is done in the /usr/lib/oracle/19.8/client64/lib path.

List of target databases (--target_databases):

The content of the file should be a list of target databases, with each database separated by commas or lines. The format for a database can be any of the following:

ip/sid
ip:puerto/sid 
ip:puerto/service_name

If the port is not specified, the default TCP port 1521 will be used for connecting to the target.

Example:

172.17.0.3:1521/FREEPDB1

Each line in the file should represent a separate target database using one of these formats. This file is used to specify the databases that the plugin should monitor.

You can also specify a DNS string directly.

Standalone server example:

dsn=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=sales1-srv)(PORT=1521))(CONNECT_DATA=(SID=ORCL)))

Failover example with two servers

dsn=(DESCRIPTION=(FAILOVER=ON)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=sales1-srv)(PORT=1521) (CONNECT_TIMEOUT=5)(RETRY_COUNT=2))(ADDRESS=(PROTOCOL=TCP)(HOST=sales2-srv)(PORT=1521)(CONNECT_TIMEOUT=5)(RETRY_COUNT=2)))(CONNECT_DATA=(SID=ORCL)))

List of target agents (--target_agents):

The content of the file should be a list of agent names, with each agent separated by commas or lines. These agent names will be used to associate the information from each target database with the corresponding specified agent name, instead of letting the plugin generate agent names automatically.

The position of each agent name in the list should match the position of the target database in its own list. In other words, the name for the first target database should be the first name in this list, considering that blank lines are ignored.

Example:

agente1,,agente3
agente4
agente5,agente6,agente7,,agente9

Custom Queries (--custom_queries)

One module must be defined for each custom query to be monitored. Modules must follow this structure:

check_begin      --> Module opening tag
name             --> Module name
description      --> Module description.
operation        --> Operation type: value (returns a single value) | full (returns all rows as string).
datatype         --> Module type: generic_data | generic_data_string | generic_proc.
min_warning      --> Minimum warning threshold
max_warning      --> Maximum warning threshold
str_warning      --> Warning string threshold
warning_inverse  --> Set to 1 to invert the warning threshold interval
min_critical     --> Minimum critical threshold
max_critical     --> Maximum critical threshold
str_critical     --> Critical string threshold
critical_inverse --> Set to 1 to invert the critical threshold interval
module_interval  --> This interval is calculated as a multiplier of the agent interval.
crontab          --> 5-field cron expression (minute, hour, day of month, month, day of week).
                    The query only runs when the current date/time matches the expression.
                    If not specified, the query runs on every interval.
                    Format: crontab <minute> <hour> <day_of_month> <month> <day_of_week>
                    Examples:
                      * * * * *      → every minute (always)
                      0 9 * * 1-5    → Monday to Friday at 09:00
                      */15 * * * *   → every 15 minutes
                      * 12-15 * * 1  → Mondays between 12:00 and 15:59
target           --> Custom query (only SELECT statements are allowed).
target_scope     --> Execution scope: cdb, pdb or all (default: cdb).
                    - cdb: only on the CDB instance
                    - pdb: only on each discovered PDB (requires multitenant enabled)
                    - all: on both (CDB and PDBs)
target_databases --> Database agents where the module will be created.
                    To apply to all elements, specify "all" or leave it unspecified.
check_end        --> Module closing tag

Basic module (no crontab, runs on every interval)

check_begin
name Select 1
description Number of invalid objects
operation value
datatype generic_data
min_warning 5
target SELECT 1 FROM dual
target_databases all
check_end

Module against a specific database

check_begin
name ConnectionCount
description Number of connections
operation value
datatype generic_data
min_warning 5
target SELECT COUNT(*) AS ConnectionCount FROM v$session;
target_databases pandora
check_end

Full operation module

check_begin
name RecordCount.files_table
description Invalid objects (detail)
operation full
datatype generic_data
target SELECT COUNT(*) AS RecordCount FROM files;
target_databases pandora
check_end

Module with crontab (runs only Monday to Friday at 09:00)

check_begin
name daily_report
description Daily report query
operation value
datatype generic_data_string
target SELECT COUNT(*) AS records FROM daily_log WHERE date = TRUNC(SYSDATE);
target_databases all
crontab 0 9 * * 1-5
check_end

Module with crontab (only during office hours 8:00–18:00)

check_begin
name active_office_users
description Active users during office hours
operation value
datatype generic_data
target SELECT COUNT(*) FROM users WHERE active = 'Y';
target_databases all
crontab * 8-17 * * 1-5
check_end

Module with crontab every 30 minutes and PDB scope

check_begin
name pdb_sessions
description Active sessions per PDB
operation value
datatype generic_data
target SELECT COUNT(*) FROM v$session WHERE status = 'ACTIVE';
target_databases all
target_scope pdb
crontab */30 * * * *
check_end

Crontab filter behavior

  1. At the beginning of each plugin execution, all custom queries are evaluated.
  2. Queries without the crontab field always run (classic behavior, backward compatible).
  3. Queries with crontab are only included if the current date/time matches the cron expression.
  4. Queries rejected by crontab do not generate database connections or SQL queries.
  5. The filter runs once before spawning monitoring threads.

Cron expression format

The expression follows the standard 5-field format separated by spaces:

Field Allowed values
Minute 0-59
Hour 0-23
Day of month 1-31
Month 1-12
Day of week 0-7 (0 and 7 = Sunday, 1 = Monday)

Each field supports the following formats:

  • * — any value
  • N — exact value (e.g. 5)
  • N-M — range (e.g. 9-17)
  • */N — every N units (e.g. */15 = every 15 minutes)
  • N-M/N — range with step (e.g. 0-30/10 = 0, 10, 20, 30)
  • A,B,C — comma-separated list of values