5.02021-11-21T21:59:34ZTemplates/ModulesModule Linux XFS by Zabbix agentModule Linux XFS by Zabbix agent## Overview
I needed a template for monitoring XFS project quotas. This is only used with Zabbix 5 but it may work on older/newer versions with little tweaks.
Requires `jq`, `grep`, `awk` and `sudo` configuration.
I needed to use `grep` because of the slashes in XFS project paths. Please comment if you know a way to resolve the issue with only `awk` let me know.
Create file /etc/zabbix/zabbix\_agentd.d/template\_linux\_xfs.conf with contents:
```
UserParameter=xfs.quota.projects, awk -F':' '{ printf "{\"{#XFSNAME}\":\"%s\"}\n",$2 }' /etc/projects | jq --slurp 'map(select(. != ""))'
UserParameter=xfs.quota.project.used[*], sudo xfs\_quota -c 'df -N' | grep ' $1$$' | awk '{print $$3*1024}'
UserParameter=xfs.quota.project.total[*], sudo xfs\_quota -c 'df -N' | grep ' $1$$' | awk '{print $$2*1024}'
UserParameter=xfs.quota.project.pused[*], sudo xfs\_quota -c 'df -N' | grep ' $1$$' | awk '{print +$$5}'
UserParameter=xfs.quota.project.pfree[*], sudo xfs\_quota -c 'df -Ni' |grep ' $1$$' | awk '{print 100-$5}'
```
Create sudoers file /etc/sudoers.d/zabbix\_extra with contents:
```
Cmnd\_Alias XFS\_QUOTA = /usr/sbin/xfs\_quota -c df -N, /usr/sbin/xfs\_quota -c df -Ni
zabbix ALL = (ALL) NOPASSWD: XFS\_QUOTA
```
You can test if sudo is working by trying it:
```
# su - zabbix -s /bin/bash -c "sudo /usr/sbin/xfs\_quota -c 'df -N'"
```
and
```
# su - zabbix -s /bin/bash -c "sudo /usr/sbin/xfs\_quota -c 'df -N'"
```
Good luck!
Evren Yurtesen
## Author
Evren Yurtesen
Templates/ModulesXFS projectsXFS project discoveryxfs.quota.projects1hDiscovery of XFS projects using /etc/projects file{#XFSNAME}: Space utilizationxfs.quota.project.pused[{#XFSNAME}]7dFLOAT%XFS projectsXFS project {#XFSNAME}DISCARD_UNCHANGED_HEARTBEAT1h{#XFSNAME}: Total spacexfs.quota.project.total[{#XFSNAME}]7dBXFS projectsXFS project {#XFSNAME}DISCARD_UNCHANGED_HEARTBEAT1h{#XFSNAME}: Used spacexfs.quota.project.used[{#XFSNAME}]7dBXFS projectsXFS project {#XFSNAME}DISCARD_UNCHANGED_HEARTBEAT1h{Module Linux XFS by Zabbix agent:xfs.quota.project.pused[{#XFSNAME}].last()}>{$XFS.PROJECT.PUSED.MAX.CRIT:"{#XFSNAME}"} and
(({Module Linux XFS by Zabbix agent:xfs.quota.project.total[{#XFSNAME}].last()}-{Module Linux XFS by Zabbix agent:xfs.quota.project.pused[{#XFSNAME}].last()})<5G or {Module Linux XFS by Zabbix agent:xfs.quota.project.pused[{#XFSNAME}].timeleft(1h,,100)}<1d){#XFSNAME}: Disk space is critically low (used > {$XFS.PROJECT.PUSED.MAX.CRIT:"{#XFSNAME}"}%)Space used: {ITEM.LASTVALUE3} of {ITEM.LASTVALUE2} ({ITEM.LASTVALUE1})AVERAGETwo conditions should match: First, space utilization should be above {$XFS.PROJECT.PUSED.MAX.CRIT:"{#FSNAME}"}.
Second condition should be one of the following:
- The project free space is less than 5G.
- The project will be full in less than 24 hours.YES{Module Linux XFS by Zabbix agent:xfs.quota.project.pused[{#XFSNAME}].last()}>{$XFS.PROJECT.PUSED.MAX.WARN:"{#XFSNAME}"} and (({Module Linux XFS by Zabbix agent:xfs.quota.project.total[{#XFSNAME}].last()}-{Module Linux XFS by Zabbix agent:xfs.quota.project.pused[{#XFSNAME}].last()})<10G or {Module Linux XFS by Zabbix agent:xfs.quota.project.pused[{#XFSNAME}].timeleft(1h,,100)}<1d){#XFSNAME}: Disk space is low (used > {$XFS.PROJECT.PUSED.MAX.WARN:"{#XFSNAME}"}%)Space used: {ITEM.LASTVALUE3} of {ITEM.LASTVALUE2} ({ITEM.LASTVALUE1})WARNINGTwo conditions should match: First, space utilization should be above {$XFS.PROJECT.PUSED.MAX.WARN:"{#XFSNAME}"}.
Second condition should be one of the following:
- The project free space is less than 10G.
- The project will be full in less than 24 hours.YES{#XFSNAME}: Disk space is critically low (used > {$XFS.PROJECT.PUSED.MAX.CRIT:"{#XFSNAME}"}%){Module Linux XFS by Zabbix agent:xfs.quota.project.pused[{#XFSNAME}].last()}>{$XFS.PROJECT.PUSED.MAX.CRIT:"{#XFSNAME}"} and
(({Module Linux XFS by Zabbix agent:xfs.quota.project.total[{#XFSNAME}].last()}-{Module Linux XFS by Zabbix agent:xfs.quota.project.pused[{#XFSNAME}].last()})<5G or {Module Linux XFS by Zabbix agent:xfs.quota.project.pused[{#XFSNAME}].timeleft(1h,,100)}<1d){$XFS.PROJECT.PUSED.MAX.CRIT}90{$XFS.PROJECT.PUSED.MAX.WARN}80