26 Commits

Author SHA1 Message Date
1d982b26d2 Version 2024.12.19.1 2024-12-19 11:20:55 +01:00
81b295f4a3 Gracefully fail if diskload.ini is not available. 2024-12-19 09:48:42 +01:00
71e652c94f Version 2020.11.25.1. 2020-11-25 06:51:18 +01:00
3259126b5f Updated zabbix_agent from 5.0.3 to 5.2.1. 2020-11-25 06:49:45 +01:00
6f4dc0fead You can now put a custom config file snippet at /boot/config/plugins/zabbix_agent/zabbix_agentd.custom.conf. 2020-11-25 06:29:57 +01:00
b4c2718f5b Version 2020.10.31.1 2020-10-31 12:01:20 +01:00
bd89975596 Fixed the removal of old packages during plugin update. 2020-10-31 11:58:27 +01:00
3de70efa44 Added an endpoint for UPS stats. 2020-10-31 11:57:54 +01:00
864d4385c3 The plugin will now be auto-updated from stable branch instead of main. 2020-10-31 11:57:21 +01:00
5f64422efd Added reminder to fill the changelog to build.sh 2020-10-31 11:56:05 +01:00
26f3a29a61 Updates zabbix_agentd from version 5.0.2 to 5.0.3. 2020-09-07 06:21:55 +02:00
04fc38f69a Merge branch 'main' of https://git.schle.nz/fabian/unraid-zabbix_agent into main 2020-09-05 14:46:34 +02:00
046fc6daa6 Version 2020.09.05.1 2020-09-05 14:44:34 +02:00
a1f6fa71a8 Updated zabbix_template.xml 2020-09-05 14:42:34 +02:00
bc40534bce Added field 'running' to qemu.disk. 2020-09-05 14:42:20 +02:00
d5329a3919 Updated the zabbix_template file 2020-08-28 19:03:05 +00:00
7f0033742c Version 2020.08.22.1 2020-08-22 14:29:46 +02:00
55b487627b Small changes to build.sh 2020-08-22 14:27:50 +02:00
44865c93ba Added slac-desc file for the package. 2020-08-22 14:27:37 +02:00
838e80fa22 Added the eXecute bit to temperatures.sh 2020-08-12 06:46:08 +02:00
cfbcdb0869 Version 2020.08.11.1 2020-08-12 06:40:12 +02:00
c1bce8a41c Changed the install procedure from a "custom" .tgz file to a real .txz package. 2020-08-12 06:37:27 +02:00
77975aadbc Version 2020.08.11 2020-08-12 06:02:59 +02:00
e820f6174d Added a MD5 value check to build.sh 2020-08-12 06:01:56 +02:00
1b97010de8 Added key unraid.temperatures to get system temperatures. Note that this only works if you have the Dynamix System Temperature plugin installed. 2020-08-12 05:44:33 +02:00
a13fe545a1 Fixed network interface detection in qemu.sh 2020-08-12 05:43:48 +02:00
12 changed files with 267 additions and 28 deletions

View File

@ -1,14 +1,41 @@
#!/bin/bash
VERSION=`xpath -q -e 'string(//PLUGIN/@version)' zabbix_agent.plg`
FILE="zabbix_agent-$VERSION.package.tgz"
FILE="zabbix_agent-$VERSION-x86_64-1.txz"
echo "Version in plugin file: $VERSION"
echo "Generated file will be: $FILE"
if [ -e "$FILE" ]; then
echo
echo "File already exists."
givenMD5=`xpath -q -e 'string(//PLUGIN/@packageMD5)' zabbix_agent.plg`
read currentMD5 _ < <(md5sum "$FILE")
if [ "$givenMD5" = "$currentMD5" ]; then
echo "MD5 value is OK."
else
echo "MD5 value does not match!"
echo "unraid_zabbix.plg: $givenMD5"
echo "$FILE: $currentMD5"
fi
echo
if [ "$1" != "--force" ]; then
echo "Stopping now. Call '$0 --force' to force recreating the file."
exit 1
fi
fi
echo "Is this correct? If yes, press Enter. If not, press Ctrl-C."
read
echo "Creating $FILE..."
echo
tar -czvf "$FILE" files
tar -cv --owner=root --group=root --lzma -C files -f "$FILE" .
echo
read md5 _ < <(md5sum "$FILE")
echo "MD5 of the resulting file for the plugin file: $md5"
echo "Run this tool again to validate the MD5 value from the plugin file."
echo
echo "Please remember to fill the changelog in zabbix_agent.plg."

View File

@ -19,6 +19,8 @@ AllowKey=vfs.fs.*[*]
AllowKey=vm.memory.size[*]
AllowKey=unraid.*
AllowKey=unraid.*[*]
AllowKey=custom.*
AllowKey=custom.*[*]
DenyKey=*
@ -27,3 +29,7 @@ UserParameter=unraid.disk[*],/usr/local/emhttp/plugins/zabbix_agent/scripts/disk
UserParameter=unraid.disks.totals,/usr/local/emhttp/plugins/zabbix_agent/scripts/disks.totals.sh
UserParameter=unraid.qemu.discovery,/usr/local/emhttp/plugins/zabbix_agent/scripts/qemu.discovery.sh
UserParameter=unraid.qemu[*],/usr/local/emhttp/plugins/zabbix_agent/scripts/qemu.sh "$1"
UserParameter=unraid.temperatures,/usr/local/emhttp/plugins/zabbix_agent/scripts/temperatures.sh
UserParameter=unraid.ups,/usr/local/emhttp/plugins/zabbix_agent/scripts/ups.sh
Include=/boot/config/plugins/zabbix_agent/*.custom.conf

19
files/install/slack-desc Normal file
View File

@ -0,0 +1,19 @@
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description. Line
# up the first '|' above the ':' following the base package name, and the '|'
# on the right side marks the last column you can put a character in. You must
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
zabbix_agent: zabbix_agent plugin for UnRAID
zabbix_agent:
zabbix_agent: zabbix_agent is a open-sorce software that can be queried by a central
zabbix_agent: Zabbix server in order to gather metrics and send notifications via
zabbix_agent: triggers.
zabbix_agent:
zabbix_agent:
zabbix_agent:
zabbix_agent:
zabbix_agent:
zabbix_agent:

View File

@ -9,7 +9,7 @@ while read line; do
if [ $found = 1 ]; then
[ $fsFree -ge 0 ] && [ $fsSize -ge 0 ] && fsUsed=$(( $fsSize - $fsFree ))
echo -n '{"device":"'$device'", "name":"'$name'", "status":"'$status'", "temp":'$temp', "size":'$size', "num_reads":'$num_reads', '
echo -n '"num_writes":'$num_writes', "num_errors":'$num_errors', "type":"'$type'", "fs_size":'$fsSize', "fs_free":'$fsFree', "fs_used":'$fsUsed', '
echo -n '"num_writes":'$num_writes', "num_errors":'$num_errors', "type":"'$type'", "fs_size":'$fsSize', "fs_free":'$fsFree', "fs_used":'$fsUsed', "running":'$running', '
break
else
device=''
@ -24,6 +24,7 @@ while read line; do
fsSize=-1
fsFree=-1
fsUsed=-1
running=-1
fi
else
while IFS="=" read key value; do
@ -41,6 +42,12 @@ while read line; do
[ $key = "type" ] && type="$value"
[ $key = "fsSize" ] && fsSize=$(( $value * 1024 ))
[ $key = "fsFree" ] && fsFree=$(( $value * 1024 ))
if [ $key = "color" ]; then
case "$value" in
green-on) running=1;;
green-blink) running=0;;
esac
fi
done <<< "$line"
fi
done < <(cat /var/local/emhttp/disks.ini ; echo "[empty]")
@ -50,5 +57,9 @@ if [ $found = 0 ]; then
exit 1
fi
read bytes_read bytes_written _ < <(grep $device"=" /var/local/emhttp/diskload.ini | cut -d"=" -f2)
echo '"bytes_reading":'$bytes_read', "bytes_writing":'$bytes_written'}'
if [ -e /var/local/emhttp/diskload.ini ]; then
read bytes_read bytes_written _ < <(grep $device"=" /var/local/emhttp/diskload.ini | cut -d"=" -f2)
echo '"bytes_reading":'$bytes_read', "bytes_writing":'$bytes_written'}'
else
echo '"diskload_missing":1}'
fi

View File

@ -16,9 +16,10 @@ while IFS=":" read key value; do
[ "$key" = "Used memory" ] && echo -n ', "memory_used":'$((${value%KiB} * 1024))
done < <(virsh dominfo "$VM")
read interface _ < <(virsh domiflist "$VM" | head -n3 | tail -n1)
while read if key value; do
[ "$key" = "rx_bytes" ] && echo -n ', "network_bytes_in":'$value
[ "$key" = "tx_bytes" ] && echo -n ', "network_bytes_out":'$value
done < <(virsh domifstat "$VM" vnet0)
done < <(virsh domifstat "$VM" "$interface")
echo "}"

View File

@ -0,0 +1,37 @@
#!/bin/bash
result=$( sensors )
error="$?"
if [ "$error" -gt 0 ]; then
echo '{"error": "sensors is not installed"}'
exit 1
fi
echo -n "{"
# CPU temp
line=$( grep 'CPU Temp:' <<< "$result" )
error="$?"
echo -n '"cpu": '
if [ "$error" -eq 0 ]; then
read _ _ temp _ <<< "$line"
temp="${temp#+}"
temp="${temp%°C}"
echo -n "$temp"
else
echo -n "null"
fi
# MB
line=$(grep 'MB Temp:' <<< "$result" )
error="$?"
echo -n ', "mainboard": '
if [ "$error" -eq 0 ]; then
read _ _ temp _ <<< "$line"
temp="${temp#+}"
temp="${temp%°C}"
echo -n "$temp"
else
echo -n "null"
fi
echo "}"

View File

@ -0,0 +1,15 @@
#!/bin/bash
echo -n '{"connected":true'
apcaccess | while read key _ value unit _; do
#echo $key - $value - $unit
case "$key" in
"STATUS") echo -n ", \"status\":\"$value\"" ;;
"LOADPCT") echo -n ", \"loadpct\":$value" ;;
"BCHARGE") echo -n ", \"bcharge\":$value" ;;
"TIMELEFT") echo -n ", \"timeleft\":$value" ;;
"BATTV") echo -n ", \"battv\":$value" ;;
"LINEV") echo -n ", \"linev\":$value" ;;
esac
done
echo "}"

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -4,27 +4,52 @@
<!ENTITY name "zabbix_agent">
<!ENTITY author "fabianonline">
<!ENTITY plgauthor "fabianonline">
<!ENTITY baseURL "https://git.schle.nz/fabian/unraid-zabbix_agent/raw/branch/main">
<!ENTITY baseURL "https://git.schle.nz/fabian/unraid-zabbix_agent/raw/branch/stable">
<!ENTITY pluginURL "&baseURL;/zabbix_agent.plg">
<!ENTITY version "2020.07.16">
<!ENTITY packageName "zabbix_agent-&version;.package.tgz">
<!ENTITY version "2024.12.19.1">
<!ENTITY packageName "zabbix_agent-&version;-x86_64-1.txz">
<!ENTITY packageURL "&baseURL;/&packageName;">
<!ENTITY packageMD5 "2740e36b05204d8f9be5be853cc105cd">
<!ENTITY packageMD5 "6e3a4e4b7712ec531a6da1ff946cf0a2">
]>
<PLUGIN name="&name;" author="&author;" version="&version;" pluginURL="&pluginURL;">
<PLUGIN name="&name;" author="&author;" version="&version;" pluginURL="&pluginURL;" packageMD5="&packageMD5;">
<CHANGES>
##&name;
## &name;
### 2020-07-16
### 2024.12.19.1
- Sometimes, diskload.ini is not available (at least in Unraid 6.12.6). In that case we now skip omitting disk load data
in order to still omit valid JSON.
### 2020.11.25.1
- You can now add a custom zabbix agent configuration file at /boot/config/plugins/zabbix_agent/zabbix_agentd.custom.conf.
It won't be overwritten by a future update of this plugin. Please note that the list of usable keys is heavily restricted
in zabbix_agentd.conf. To have your custom UserParameters accessible, you can either:
- Name them custom.$whatever.
- Add the key to the whitelist via AllowKey.
- Updated zabbix_agentd from 5.0.3 to 5.2.1.
### 2020.10.31.1
- Updated zabbix_agentd from 5.0.2 to 5.0.3
- Download updated plugins from stable instead of main.
- Fixed removal of old plugin packages during updates.
- Added new zabbix endpoint unraid.ups
### 2020.09.05.1
- Added a new field 'running' to qemu.disk
### 2020.08.11
- Added system temperature metrics. Note: These will only work if you have the Dynamix System Temperature plugin installed.
- Fixed the virtual interface detection in unraid.qemu.
### 2020.07.16
- Package based installation process.
- Added a zabbix template file.
### 2020-07-15
### 2020.07.15
- More metrics
### 2020-07-14
### 2020.07.14
- Initial commit
</CHANGES>
@ -34,7 +59,7 @@ if [ -e /boot/config/plugins/zabbix_agent/&packageName; ]; then
echo "Package already exists."
else
echo "Current &packageName; not found; removing old packages (if existing)."
rm /boot/config/plugins/zabbix_agent/*.package.tgz
rm /boot/config/plugins/zabbix_agent/*.txz
echo "Downloading current package..."
fi
</INLINE></FILE>
@ -51,8 +76,9 @@ if [ -x /etc/rc.d/rc.zabbix_agentd ]; then
fi
echo "Extracting support files..."
tar -xzvf /boot/config/plugins/zabbix_agent/&packageName; --strip=1 -C /
upgradepkg --install-new /boot/config/plugins/zabbix_agent/&packageName;
echo "Starting zabbix_agent..."
/etc/rc.d/rc.zabbix_agentd start
</INLINE></FILE>
@ -63,14 +89,13 @@ tar -xzvf /boot/config/plugins/zabbix_agent/&packageName; --strip=1 -C /
echo "Removal of zabbix_agent plugin started."
echo "Stopping zabbix_agentd..."
/etc/rc.d/rc.zabbix_agentd stop
echo "Deleting /usr/sbin/zabbix_agentd..."
rm /usr/sbin/zabbix_agentd
echo "Deleting /etc/rc.d/rc.zabbix_agentd..."
rm /etc/rc.d/rc.zabbix_agentd
echo "Deleting /boot/config/plugins/zabbix_agent/..."
rm -rf /boot/config/plugins/zabbix_agent/
echo "Deleting /usr/local/emhttp/plugins/zabbix_agent/..."
rm -rf /usr/local/emhttp/plugins/zabbix_agent/
echo "Uninstalling package..."
removepkg zabbix_agent
echo "Removing remaining plugin files..."
rm -rf /boot/config/plugins/zabbix_agent
echo "Removal of zabbix_agent plugin completed."
</INLINE></FILE>

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>5.0</version>
<date>2020-07-17T03:56:57Z</date>
<date>2020-09-05T12:40:25Z</date>
<groups>
<group>
<name>Servers</name>
<name>Templates</name>
</group>
</groups>
<templates>
@ -13,7 +13,7 @@
<name>Unraid server</name>
<groups>
<group>
<name>Servers</name>
<name>Templates</name>
</group>
</groups>
<applications>
@ -26,6 +26,9 @@
<application>
<name>Memory</name>
</application>
<application>
<name>System</name>
</application>
<application>
<name>VMs</name>
</application>
@ -230,6 +233,63 @@
<key>unraid.disks.totals</key>
</master_item>
</item>
<item>
<name>Temperature data</name>
<key>unraid.temperatures</key>
<delay>2m</delay>
<history>1d</history>
<trends>0</trends>
<value_type>TEXT</value_type>
<applications>
<application>
<name>System</name>
</application>
</applications>
</item>
<item>
<name>Temperature CPU</name>
<type>DEPENDENT</type>
<key>unraid.temperatures[cpu]</key>
<delay>0</delay>
<value_type>FLOAT</value_type>
<units>°C</units>
<applications>
<application>
<name>System</name>
</application>
</applications>
<preprocessing>
<step>
<type>JSONPATH</type>
<params>$.cpu</params>
</step>
</preprocessing>
<master_item>
<key>unraid.temperatures</key>
</master_item>
</item>
<item>
<name>Temperature Mainboard</name>
<type>DEPENDENT</type>
<key>unraid.temperatures[mainboard]</key>
<delay>0</delay>
<value_type>FLOAT</value_type>
<units>°C</units>
<applications>
<application>
<name>System</name>
</application>
</applications>
<preprocessing>
<step>
<type>JSONPATH</type>
<params>$.mainboard</params>
</step>
</preprocessing>
<master_item>
<key>unraid.temperatures</key>
</master_item>
</item>
<item>
<name>Memory available</name>
<key>vm.memory.size[available]</key>
@ -532,6 +592,29 @@
<key>unraid.disk[{#ID}]</key>
</master_item>
</item_prototype>
<item_prototype>
<name>Disk {#ID} running</name>
<type>DEPENDENT</type>
<key>unraid.disk[{#ID},running]</key>
<delay>0</delay>
<applications>
<application>
<name>Disks</name>
</application>
</applications>
<valuemap>
<name>Yes/No</name>
</valuemap>
<preprocessing>
<step>
<type>JSONPATH</type>
<params>$.running</params>
</step>
</preprocessing>
<master_item>
<key>unraid.disk[{#ID}]</key>
</master_item>
</item_prototype>
<item_prototype>
<name>Disk {#ID} size</name>
<type>DEPENDENT</type>
@ -843,4 +926,19 @@ return j.cpu_time / j.cpus * 100;</params>
</discovery_rules>
</template>
</templates>
<value_maps>
<value_map>
<name>Yes/No</name>
<mappings>
<mapping>
<value>0</value>
<newvalue>No</newvalue>
</mapping>
<mapping>
<value>1</value>
<newvalue>Yes</newvalue>
</mapping>
</mappings>
</value_map>
</value_maps>
</zabbix_export>