Skip to main content

IBM i

Description

Monitors IBM i partitions over JDBC, using the IBM Toolbox for Java JTOpen driver (com.ibm.as400.access.AS400JDBCDriver) and the Db2 for i QSYS2 SQL services. Covers partition CPU, address-space utilization, ASPs, disk units, monitored subsystems, job status buckets, per-job metrics, tracked MSGIDs, and configurable operator message queues (QSYS/QSYSOPR by default).

ibm ibmi system

Enterprise Connector

This connector requires the Enterprise edition of MetricsHub.

Target

Typical platforms: IBM i, AS/400, iSeries, System i, OS/400

Operating system: ibmi

This connector is not available for the local host (it is applicable to remote hosts only).

Prerequisites

Leverages: IBM i Db2 for i SQL Services (QSYS2)

Technology and protocols: SQL/JDBC

Variables:

  • monitored_subsystems: Comma-separated, single-quoted list of subsystem names to watch (OS400_SUBSYS parity). (default: 'QBATCH', 'QCTL', 'QINTER')
  • monitored_msgids: Comma-separated, single-quoted list of IBM i message IDs to track for exact text extraction (OS400_MSGID parity - e.g. 'CPI1466'). (default: 'CPF9898', 'CPI1466')
  • monitored_queues: Comma-separated, single-quoted list of 'LIBRARY/QUEUE' pairs to watch for messages (e.g., 'QSYS/QSYSOPR', 'BMC/BMC'). (default: 'QSYS/QSYSOPR')
  • message_lookback_minutes: Time window in minutes to scan for new message events (message_events monitor) in monitored queues. Should ideally match or slightly exceed the scrape interval. (default: 3)

Examples

CLI

metricshub HOSTNAME -t linux -c +IBMi --jdbc -u USER --jdbc-url "jdbc:as400://HOSTNAME;naming=sql;prompt=false;errors=full" --jdbc-driver-class com.ibm.as400.access.AS400JDBCDriver --jdbc-driver-jar PATH_TO_JTOPEN/jt400-21.0.6-java11.jar

metricshub.yaml

resourceGroups:
<RESOURCE_GROUP>:
resources:
<HOSTNAME-ID>:
attributes:
host.name: <HOSTNAME> # Change with actual host name
host.type: linux
connectors: [ +IBMi ] # Optional, to load only this connector
protocols:
jdbc:
url: jdbc:as400://<HOSTNAME>;naming=sql;prompt=false;errors=full # Change <HOSTNAME> with actual host name
username: <USERNAME> # Change with actual credentials
password: <PASSWORD> # Encrypted using metricshub-encrypt
driver:
className: com.ibm.as400.access.AS400JDBCDriver
jarPath: <PATH_TO_JTOPEN>/jt400-21.0.6-java11.jar # Path to the downloaded JTOpen (jt400) driver
additionalConnectors:
IBMi: # Unique ID. Use 'uses' if different from the original connector ID
uses: IBMi # Optional - Original ID if not in key
force: true # Optional (default: true); false for auto-detection only
variables:
monitored_subsystems: <VALUE> # Replace with desired value.
monitored_msgids: <VALUE> # Replace with desired value.
monitored_queues: <VALUE> # Replace with desired value.
message_lookback_minutes: <VALUE> # Replace with desired value.

Connector Activation Criteria

The IBM i connector will be automatically activated, and its status will be reported as OK if all the below criteria are met:

  • The SQL query below succeeds:
    • Query: SELECT 1 FROM QSYS2.SYSTEM_STATUS_INFO FETCH FIRST 1 ROW ONLY
    • Result contains: 1 (regex)

Metrics

TypeCollected MetricsSpecific Attributes
aspibmi.asp.limit
ibmi.asp.usage{ibmi.asp.state="free"}
ibmi.asp.usage{ibmi.asp.state="used"}
ibmi.asp.utilization{ibmi.asp.state="free"}
ibmi.asp.utilization{ibmi.asp.state="used"}
ibmi.asp.number
id
name
diskibmi.disk.arm.utilization
ibmi.disk.utilization{ibmi.disk.state="free"}
ibmi.disk.utilization{ibmi.disk.state="used"}
system.disk.limit
system.disk.operations{disk.io.direction="read"}
system.disk.operations{disk.io.direction="write"}
ibmi.disk.asp
ibmi.disk.model
ibmi.disk.protection.type
ibmi.disk.resource_name
ibmi.disk.serial
ibmi.disk.type
id
name
system.device
jobibmi.job.status{state="cmnw|cndw|deqw|dlyw|dspw|end|eoj|evtw|hld|jvaw|lckw|lspw|msgw|mtxw|other|psrw|run|selw|semw|sigw|thdw|timw"}ibmi.job.name
ibmi.job.number
ibmi.job.type
ibmi.job.user
jobsibmi.jobs.countibmi.job.status
id
name
jobs_detailibmi.jobs.detail.countibmi.job.name
ibmi.job.status
ibmi.job.user
id
name
message_eventsibmi.message.event.countibmi.message.detailed_msg
ibmi.message.key
ibmi.message.msgid
ibmi.message.text
ibmi.message.timestamp
ibmi.message_queue.library
ibmi.message_queue.name
id
name
message_queueibmi.message.count{ibmi.message.severity="critical"}
ibmi.message.count{ibmi.message.severity="error"}
ibmi.message.count{ibmi.message.severity="info"}
ibmi.message.count{ibmi.message.severity="warning"}
ibmi.message.inquiry.unanswered
ibmi.message.tracked.count
ibmi.message_queue.library
ibmi.message_queue.name
id
name
subsystemibmi.subsystem.jobs.active
ibmi.subsystem.jobs.limit
ibmi.subsystem.status{state="active|ending|inactive|restricted|starting"}
ibmi.subsystem.description
ibmi.subsystem.library
ibmi.subsystem.name
id
name
systemibmi.address.utilization{ibmi.address.type="permanent"}
ibmi.address.utilization{ibmi.address.type="temporary"}
ibmi.cpu.configured
ibmi.cpu.interactive.time
ibmi.jobs.active
system.cpu.time{system.cpu.state="user"}
system.cpu.utilization{system.cpu.state="idle"}
system.cpu.utilization{system.cpu.state="user"}
ibmi.system.partition_id
ibmi.system.serial
id
name
system.device