
# AIX by Zabbix agent

## Overview

This is an official AIX template. It requires Zabbix agent 7.0 or newer.

#### Notes on filesystem (FS) discovery:
- The ext4/3/2 FS reserves space for privileged usage, typically set at 5% by default.
- BTRFS allocates a default of 10% of the volume for its own needs.
- To mitigate potential disasters, FS usage triggers are based on the maximum available space.
  - Utilization formula: `pused = 100 - 100 * (available / total - free + available)`
- The FS utilization chart, derived from graph prototypes, reflects FS reserved space as the difference between used and available space from the total volume.

## Requirements

Zabbix version: 7.0 and higher.

## Tested versions

This template has been tested on:
- AIX 6.1

## Configuration

> Zabbix should be configured according to the instructions in the [Templates out of the box](https://www.zabbix.com/documentation/7.0/manual/config/templates_out_of_the_box) section.

## Setup

Install Zabbix agent on the AIX OS according to Zabbix documentation.

### Macros used

|Name|Description|Default|
|----|-----------|-------|
|{$AGENT.TIMEOUT}|
Timeout after which the agent is considered unavailable. Works only for agents reachable from Zabbix server/proxy (in passive mode).
|`3m`|
|{$VFS.FS.FSNAME.NOT_MATCHES}|
Used for filesystem discovery. Can be overridden on the host or linked template level.
|`^(/dev\|/sys\|/run\|/proc\|.+/shm$)`|
|{$VFS.FS.FSNAME.MATCHES}|
Used for filesystem discovery. Can be overridden on the host or linked template level.
|`.+`|
|{$VFS.FS.FSTYPE.MATCHES}|
Used for filesystem discovery. Can be overridden on the host or linked template level.
|`Macro too long. Please see the template.`|
|{$VFS.FS.FSTYPE.NOT_MATCHES}|
Used for filesystem discovery. Can be overridden on the host or linked template level.
|`^\s$`|
|{$VFS.FS.INODE.PFREE.MIN.CRIT}|
The critical threshold of the filesystem metadata utilization.
|`10`|
|{$VFS.FS.INODE.PFREE.MIN.WARN}|
The warning threshold of the filesystem metadata utilization.
|`20`|
|{$VFS.FS.PUSED.MAX.CRIT}|
The critical threshold of the filesystem utilization.
|`90`|
|{$VFS.FS.PUSED.MAX.WARN}|
The warning threshold of the filesystem utilization.
|`80`|

### Items

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Number of running processes|
Number of processes in a running state.
|Zabbix agent|proc.num[,,run]|
|Number of processes|
Total number of processes in any state.
|Zabbix agent|proc.num[]|
|Interrupts per second|
Number of interrupts processed.
|Zabbix agent|system.cpu.intr
**Preprocessing**

- Change per second: 
|
|Processor load (1 min average per core)|
Calculated as the system CPU load divided by the number of CPU cores.
|Zabbix agent|system.cpu.load[percpu,avg1]|
|Processor load (5 min average per core)|
Calculated as the system CPU load divided by the number of CPU cores.
|Zabbix agent|system.cpu.load[percpu,avg5]|
|Processor load (15 min average per core)|
Calculated as the system CPU load divided by the number of CPU cores.
|Zabbix agent|system.cpu.load[percpu,avg15]|
|Context switches per second|
The combined rate at which all processors on the computer are switched from one thread to another.
|Zabbix agent|system.cpu.switches
**Preprocessing**

- Change per second: 
|
|Host name|
The host name of the system.
|Zabbix agent|system.hostname
**Preprocessing**

- 
Discard unchanged with heartbeat: `1d`

|
|Host local time|
The local system time of the host.
|Zabbix agent|system.localtime|
|CPU available physical processors in the shared pool||Zabbix agent|system.stat[cpu,app]|
|CPU entitled capacity consumed||Zabbix agent|system.stat[cpu,ec]|
|CPU idle time||Zabbix agent|system.stat[cpu,id]|
|CPU logical processor utilization||Zabbix agent|system.stat[cpu,lbusy]|
|CPU number of physical processors consumed||Zabbix agent|system.stat[cpu,pc]|
|CPU system time||Zabbix agent|system.stat[cpu,sy]|
|CPU user time||Zabbix agent|system.stat[cpu,us]|
|CPU iowait time||Zabbix agent|system.stat[cpu,wa]|
|Amount of data transferred||Zabbix agent|system.stat[disk,bps]|
|Number of transfers||Zabbix agent|system.stat[disk,tps]|
|Processor units is entitled to receive||Zabbix agent|system.stat[ent]|
|Kernel thread context switches||Zabbix agent|system.stat[faults,cs]|
|Device interrupts||Zabbix agent|system.stat[faults,in]|
|System calls||Zabbix agent|system.stat[faults,sy]|
|Length of the swap queue||Zabbix agent|system.stat[kthr,b]|
|Length of the run queue||Zabbix agent|system.stat[kthr,r]|
|Active virtual pages||Zabbix agent|system.stat[memory,avm]|
|Free real memory||Zabbix agent|system.stat[memory,fre]|
|File page-ins per second||Zabbix agent|system.stat[page,fi]|
|File page-outs per second||Zabbix agent|system.stat[page,fo]|
|Pages freed (page replacement)||Zabbix agent|system.stat[page,fr]|
|Pages paged in from paging space||Zabbix agent|system.stat[page,pi]|
|Pages paged out to paging space||Zabbix agent|system.stat[page,po]|
|Pages scanned by page-replacement algorithm||Zabbix agent|system.stat[page,sr]|
|System information|
Information as normally returned by `uname -a`.
|Zabbix agent|system.uname
**Preprocessing**

- 
Discard unchanged with heartbeat: `1d`

|
|System uptime||Zabbix agent|system.uptime|
|Number of logged in users|
The number of users who are currently logged in.
|Zabbix agent|system.users.num|
|Checksum of /etc/passwd||Zabbix agent|vfs.file.cksum[/etc/passwd,sha256]
**Preprocessing**

- 
Discard unchanged with heartbeat: `1h`

|
|Available memory|
Defined as free + cached + buffers.
|Zabbix agent|vm.memory.size[available]|
|Total memory|
Total memory expressed in bytes.
|Zabbix agent|vm.memory.size[total]|
|Version of Zabbix agent running||Zabbix agent|agent.version
**Preprocessing**

- 
Discard unchanged with heartbeat: `1d`

|
|Host name of Zabbix agent running||Zabbix agent|agent.hostname
**Preprocessing**

- 
Discard unchanged with heartbeat: `1d`

|
|Zabbix agent ping|
The agent always returns "1" for this item. May be used in combination with `nodata()` for the availability check.
|Zabbix agent|agent.ping|
|Zabbix agent availability|
Used for monitoring the availability status of the agent.
|Zabbix internal|zabbix[host,agent,available]|
|Get filesystems|
The `vfs.fs.get` key acquires raw information set about the filesystems. Later to be extracted by preprocessing in dependent items.
|Zabbix agent|vfs.fs.get|

### Triggers

|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----------|--------|--------------------------------|
|AIX: Too many processes running||`avg(/AIX by Zabbix agent/proc.num[,,run],5m)>30`|Warning||
|AIX: Too many processes||`avg(/AIX by Zabbix agent/proc.num[],5m)>300`|Warning||
|AIX: Processor load is too high||`avg(/AIX by Zabbix agent/system.cpu.load[percpu,avg1],5m)>5`|Warning||
|AIX: Hostname was changed||`last(/AIX by Zabbix agent/system.hostname,#1)<>last(/AIX by Zabbix agent/system.hostname,#2)`|Info||
|AIX: Disk I/O is overloaded|
Extended OS wait times for I/O operations may signal potential performance issues with the storage system.
|`avg(/AIX by Zabbix agent/system.stat[cpu,wa],5m)>20`|Warning||
|AIX: Host information was changed||`last(/AIX by Zabbix agent/system.uname,#1)<>last(/AIX by Zabbix agent/system.uname,#2)`|Info||
|AIX: Server has just been restarted||`change(/AIX by Zabbix agent/system.uptime)<0`|Info||
|AIX: /etc/passwd has been changed||`last(/AIX by Zabbix agent/vfs.file.cksum[/etc/passwd,sha256],#1)<>last(/AIX by Zabbix agent/vfs.file.cksum[/etc/passwd,sha256],#2)`|Warning||
|AIX: Lack of available memory on server||`last(/AIX by Zabbix agent/vm.memory.size[available])<20M`|Average||
|AIX: Zabbix agent is not available|
For passive checks only. The availability of the agent(s) and a host is used with `{$AGENT.TIMEOUT}` as the time threshold.
|`max(/AIX by Zabbix agent/zabbix[host,agent,available],{$AGENT.TIMEOUT})=0`|Average|**Manual close**: Yes|

### LLD rule Network interface discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Network interface discovery|
Used for the discovery of network interfaces.
|Zabbix agent|net.if.discovery|

### Item prototypes for Network interface discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Interface {#IFNAME}: Incoming network traffic||Zabbix agent|net.if.in[{#IFNAME}]
**Preprocessing**

- Change per second: 
- 
Custom multiplier: `8`

|
|Interface {#IFNAME}: Outgoing network traffic||Zabbix agent|net.if.out[{#IFNAME}]
**Preprocessing**

- Change per second: 
- 
Custom multiplier: `8`

|

### LLD rule Mounted filesystem discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|Mounted filesystem discovery|
The discovery of mounted filesystems with different types.
|Dependent item|vfs.fs.dependent.discovery
**Preprocessing**

- 
JavaScript: `The text is too long. Please see the template.`

- 
Discard unchanged with heartbeat: `1h`

|

### Item prototypes for Mounted filesystem discovery

|Name|Description|Type|Key and additional info|
|----|-----------|----|-----------------------|
|FS [{#FSNAME}]: Get data|
Intermediate data of `{#FSNAME}` filesystem.
|Dependent item|vfs.fs.dependent[{#FSNAME},data]
**Preprocessing**

- 
JSON Path: `$.[?(@.fsname=='{#FSNAME}')].first()`

|
|FS [{#FSNAME}]: Option: Read-only|
The filesystem is mounted as read-only. It is available only for Zabbix agents 6.4 and higher.
|Dependent item|vfs.fs.dependent[{#FSNAME},readonly]
**Preprocessing**

- 
JSON Path: `$.options`

⛔️Custom on fail: Discard value

- 
Regular expression: `(?:^|,)ro\b 1`

⛔️Custom on fail: Set value to: `0`

|
|FS [{#FSNAME}]: Inodes: Free, in %|
Free metadata space expressed in %.
|Dependent item|vfs.fs.dependent.inode[{#FSNAME},pfree]
**Preprocessing**

- 
JSON Path: `$.inodes.pfree`

|
|FS [{#FSNAME}]: Space: Available|
Available storage space expressed in bytes.
|Dependent item|vfs.fs.dependent.size[{#FSNAME},free]
**Preprocessing**

- 
JSON Path: `$.bytes.free`

|
|FS [{#FSNAME}]: Space: Available, in %|
Deprecated metric.

Space availability expressed as a percentage, calculated using the current and maximum available spaces.
|Dependent item|vfs.fs.dependent.size[{#FSNAME},pfree]
**Preprocessing**

- 
JSON Path: `$.bytes.pfree`

|
|FS [{#FSNAME}]: Space: Used, in %|
Calculated as the percentage of currently used space compared to the maximum available space.
|Dependent item|vfs.fs.dependent.size[{#FSNAME},pused]
**Preprocessing**

- 
JSON Path: `$.bytes.pused`

|
|FS [{#FSNAME}]: Space: Total|
Total space expressed in bytes.
|Dependent item|vfs.fs.dependent.size[{#FSNAME},total]
**Preprocessing**

- 
JSON Path: `$.bytes.total`

|
|FS [{#FSNAME}]: Space: Used|
Used storage expressed in bytes.
|Dependent item|vfs.fs.dependent.size[{#FSNAME},used]
**Preprocessing**

- 
JSON Path: `$.bytes.used`

|

### Trigger prototypes for Mounted filesystem discovery

|Name|Description|Expression|Severity|Dependencies and additional info|
|----|-----------|----------|--------|--------------------------------|
|AIX: FS [{#FSNAME}]: Filesystem has become read-only|
The filesystem has become read-only, possibly due to an I/O error. Available only for Zabbix agents 6.4 and higher.
|`last(/AIX by Zabbix agent/vfs.fs.dependent[{#FSNAME},readonly],#2)=0 and last(/AIX by Zabbix agent/vfs.fs.dependent[{#FSNAME},readonly])=1`|Average|**Manual close**: Yes|
|AIX: FS [{#FSNAME}]: Running out of free inodes|
Disk writing may fail if index nodes are exhausted, leading to error messages like "No space left on device" or "Disk is full", despite available free space.
|`min(/AIX by Zabbix agent/vfs.fs.dependent.inode[{#FSNAME},pfree],5m)<{$VFS.FS.INODE.PFREE.MIN.CRIT:"{#FSNAME}"}`|Average||
|AIX: FS [{#FSNAME}]: Running out of free inodes|
Disk writing may fail if index nodes are exhausted, leading to error messages like "No space left on device" or "Disk is full", despite available free space.
|`min(/AIX by Zabbix agent/vfs.fs.dependent.inode[{#FSNAME},pfree],5m)<{$VFS.FS.INODE.PFREE.MIN.WARN:"{#FSNAME}"}`|Warning|**Depends on**:

- AIX: FS [{#FSNAME}]: Running out of free inodes
|
|AIX: FS [{#FSNAME}]: Space is critically low|
The volume's space usage exceeds the `{$VFS.FS.PUSED.MAX.CRIT:"{#FSNAME}"}%` limit.
The trigger expression is based on the current used and maximum available spaces.
Event name represents the total volume space, which can differ from the maximum available space, depending on the filesystem type.
|`min(/AIX by Zabbix agent/vfs.fs.dependent.size[{#FSNAME},pused],5m)>{$VFS.FS.PUSED.MAX.CRIT:"{#FSNAME}"}`|Average|**Manual close**: Yes|
|AIX: FS [{#FSNAME}]: Space is low|
The volume's space usage exceeds the `{$VFS.FS.PUSED.MAX.WARN:"{#FSNAME}"}%` limit.
The trigger expression is based on the current used and maximum available spaces.
Event name represents the total volume space, which can differ from the maximum available space, depending on the filesystem type.
|`min(/AIX by Zabbix agent/vfs.fs.dependent.size[{#FSNAME},pused],5m)>{$VFS.FS.PUSED.MAX.WARN:"{#FSNAME}"}`|Warning|**Manual close**: Yes
**Depends on**:

- AIX: FS [{#FSNAME}]: Space is critically low
|

## Feedback

Please report any issues with the template at [`https://support.zabbix.com`](https://support.zabbix.com)

You can also provide feedback, discuss the template, or ask for help at [`ZABBIX forums`](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback)

