# Systemd by Zabbix agent 2 ## Overview For Zabbix version: 6.2 and higher The template to monitor systemd units. Most of the metrics are collected in one go, thanks to Zabbix bulk data collection. `Systemd by Zabbix agent 2` — collects metrics by polling zabbix-agent2. This template was tested on: - Systemd, version 219 ## Setup > See [Zabbix template operation](https://www.zabbix.com/documentation/6.2/manual/config/templates_out_of_the_box/zabbix_agent2) for basic instructions. 1. Setup and configure zabbix-agent2 compiled with the Systemd monitoring plugin. 2. Set filters with macros if you want to override default filter parameters. ## Zabbix configuration No specific Zabbix configuration is required. ### Macros used |Name|Description|Default| |----|-----------|-------| |{$SYSTEMD.ACTIVESTATE.SERVICE.MATCHES} |

Filter of systemd service units by active state

|`active` | |{$SYSTEMD.ACTIVESTATE.SERVICE.NOT_MATCHES} |

Filter of systemd service units by active state

|`CHANGE_IF_NEEDED` | |{$SYSTEMD.ACTIVESTATE.SOCKET.MATCHES} |

Filter of systemd socket units by active state

|`active` | |{$SYSTEMD.ACTIVESTATE.SOCKET.NOT_MATCHES} |

Filter of systemd socket units by active state

|`CHANGE_IF_NEEDED` | |{$SYSTEMD.NAME.SERVICE.MATCHES} |

Filter of systemd service units by name

|`.*` | |{$SYSTEMD.NAME.SERVICE.NOT_MATCHES} |

Filter of systemd service units by name

|`CHANGE_IF_NEEDED` | |{$SYSTEMD.NAME.SOCKET.MATCHES} |

Filter of systemd socket units by name

|`.*` | |{$SYSTEMD.NAME.SOCKET.NOT_MATCHES} |

Filter of systemd socket units by name

|`CHANGE_IF_NEEDED` | |{$SYSTEMD.UNITFILESTATE.SERVICE.MATCHES} |

Filter of systemd service units by unit file state

|`enabled` | |{$SYSTEMD.UNITFILESTATE.SERVICE.NOT_MATCHES} |

Filter of systemd service units by unit file state

|`CHANGE_IF_NEEDED` | |{$SYSTEMD.UNITFILESTATE.SOCKET.MATCHES} |

Filter of systemd socket units by unit file state

|`enabled` | |{$SYSTEMD.UNITFILESTATE.SOCKET.NOT_MATCHES} |

Filter of systemd socket units by unit file state

|`CHANGE_IF_NEEDED` | ## Template links There are no template links in this template. ## Discovery rules |Name|Description|Type|Key and additional info| |----|-----------|----|----| |Service units discovery |

Discover systemd service units and their details.

|ZABBIX_PASSIVE |systemd.unit.discovery[service]

**Filter**:

AND

- {#UNIT.ACTIVESTATE} MATCHES_REGEX `{$SYSTEMD.ACTIVESTATE.SERVICE.MATCHES}`

- {#UNIT.ACTIVESTATE} NOT_MATCHES_REGEX `{$SYSTEMD.ACTIVESTATE.SERVICE.NOT_MATCHES}`

- {#UNIT.UNITFILESTATE} MATCHES_REGEX `{$SYSTEMD.UNITFILESTATE.SERVICE.MATCHES}`

- {#UNIT.UNITFILESTATE} NOT_MATCHES_REGEX `{$SYSTEMD.UNITFILESTATE.SERVICE.NOT_MATCHES}`

- {#UNIT.NAME} NOT_MATCHES_REGEX `{$SYSTEMD.NAME.SERVICE.NOT_MATCHES}`

- {#UNIT.NAME} MATCHES_REGEX `{$SYSTEMD.NAME.SERVICE.MATCHES}`

| |Socket units discovery |

Discover systemd socket units and their details.

|ZABBIX_PASSIVE |systemd.unit.discovery[socket]

**Filter**:

AND

- {#UNIT.ACTIVESTATE} MATCHES_REGEX `{$SYSTEMD.ACTIVESTATE.SOCKET.MATCHES}`

- {#UNIT.ACTIVESTATE} NOT_MATCHES_REGEX `{$SYSTEMD.ACTIVESTATE.SOCKET.NOT_MATCHES}`

- {#UNIT.UNITFILESTATE} MATCHES_REGEX `{$SYSTEMD.UNITFILESTATE.SOCKET.MATCHES}`

- {#UNIT.UNITFILESTATE} NOT_MATCHES_REGEX `{$SYSTEMD.UNITFILESTATE.SOCKET.NOT_MATCHES}`

- {#UNIT.NAME} NOT_MATCHES_REGEX `{$SYSTEMD.NAME.SOCKET.NOT_MATCHES}`

- {#UNIT.NAME} MATCHES_REGEX `{$SYSTEMD.NAME.SOCKET.MATCHES}`

| ## Items collected |Group|Name|Description|Type|Key and additional info| |-----|----|-----------|----|---------------------| |Systemd |{#UNIT.NAME}: Active state |

State value that reflects whether the unit is currently active or not. The following states are currently defined: "active", "reloading", "inactive", "failed", "activating", and "deactivating".

|DEPENDENT |systemd.service.active_state["{#UNIT.NAME}"]

**Preprocessing**:

- JSONPATH: `$.ActiveState.state`

- DISCARD_UNCHANGED_HEARTBEAT: `30m`

| |Systemd |{#UNIT.NAME}: Load state |

State value that reflects whether the configuration file of this unit has been loaded. The following states are currently defined: "loaded", "error", and "masked".

|DEPENDENT |systemd.service.load_state["{#UNIT.NAME}"]

**Preprocessing**:

- JSONPATH: `$.LoadState.state`

- DISCARD_UNCHANGED_HEARTBEAT: `30m`

| |Systemd |{#UNIT.NAME}: Unit file state |

Encodes the install state of the unit file of FragmentPath. It currently knows the following states: "enabled", "enabled-runtime", "linked", "linked-runtime", "masked", "masked-runtime", "static", "disabled", and "invalid".

|DEPENDENT |systemd.service.unitfile_state["{#UNIT.NAME}"]

**Preprocessing**:

- JSONPATH: `$.UnitFileState.state`

- DISCARD_UNCHANGED_HEARTBEAT: `30m`

| |Systemd |{#UNIT.NAME}: Active time |

Number of seconds since unit entered the active state.

|DEPENDENT |systemd.service.uptime["{#UNIT.NAME}"]

**Preprocessing**:

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

| |Systemd |{#UNIT.NAME}: Connections accepted per sec |

The number of accepted socket connections (NAccepted) per second.

|DEPENDENT |systemd.socket.conn_accepted.rate["{#UNIT.NAME}"]

**Preprocessing**:

- JSONPATH: `$.NAccepted`

- CHANGE_PER_SECOND

| |Systemd |{#UNIT.NAME}: Connections connected |

The current number of socket connections (NConnections).

|DEPENDENT |systemd.socket.conn_count["{#UNIT.NAME}"]

**Preprocessing**:

- JSONPATH: `$.NConnections`

| |Zabbix raw items |{#UNIT.NAME}: Get unit info |

Returns all properties of a systemd service unit.

Unit description: {#UNIT.DESCRIPTION}.

|ZABBIX_PASSIVE |systemd.unit.get["{#UNIT.NAME}"] | |Zabbix raw items |{#UNIT.NAME}: Get unit info |

Returns all properties of a systemd socket unit.

Unit description: {#UNIT.DESCRIPTION}.

|ZABBIX_PASSIVE |systemd.unit.get["{#UNIT.NAME}",Socket] | ## Triggers |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----|----|----| |{#UNIT.NAME}: Service is not running |

-

|`last(/Systemd by Zabbix agent 2/systemd.service.active_state["{#UNIT.NAME}"])<>1` |WARNING |

Manual close: YES

| |{#UNIT.NAME}: has been restarted |

Uptime is less than 10 minutes

|`last(/Systemd by Zabbix agent 2/systemd.service.uptime["{#UNIT.NAME}"])<10m` |INFO |

Manual close: YES

| ## Feedback Please report any issues with the template at https://support.zabbix.com You can also provide feedback, discuss the template or ask for help with it at [ZABBIX forums](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/).