1
0
mirror of https://github.com/limosek/zaf.git synced 2024-11-22 02:19:06 +01:00

Initial release

This commit is contained in:
Lukas Macura 2016-03-23 17:25:18 +01:00
parent 5e566a2046
commit 1e89b27028
6 changed files with 193 additions and 8 deletions

View File

@ -34,7 +34,7 @@ preconf(){
readopt "Git plugins directory" "${ZAF_LIB_DIR}/repo" readopt "Git plugins directory" "${ZAF_LIB_DIR}/repo"
ZAF_REPO_DIR="$opt" ZAF_REPO_DIR="$opt"
readopt "Plugins repository" "https://github.com/limosek/zaf.git/plugins" readopt "Plugins repository" ""
ZAF_PLUGINS_REPO="$opt" ZAF_PLUGINS_REPO="$opt"
readopt "Default plugins to install" "process-info" readopt "Default plugins to install" "process-info"
@ -43,6 +43,9 @@ preconf(){
readopt "Zabbix agent config" "/etc/zabbix/zabbix_agentd.conf" readopt "Zabbix agent config" "/etc/zabbix/zabbix_agentd.conf"
ZAF_AGENT_CONFIG="$opt" ZAF_AGENT_CONFIG="$opt"
readopt "Zabbix agent config.d" "/etc/zabbix/zabbix_agentd.conf.d/"
ZAF_AGENT_CONFIGD="$opt"
readopt "Zabbix agent restart cmd" "service zabbix-agent restart" readopt "Zabbix agent restart cmd" "service zabbix-agent restart"
ZAF_AGENT_RESTART="$opt" ZAF_AGENT_RESTART="$opt"
@ -73,6 +76,7 @@ preconf(){
echo "ZAF_PLUGINS_REPO='$ZAF_PLUGINS_REPO'" >>/etc/zaf.conf echo "ZAF_PLUGINS_REPO='$ZAF_PLUGINS_REPO'" >>/etc/zaf.conf
echo "ZAF_AGENT_RESTART='$ZAF_AGENT_RESTART'" >>/etc/zaf.conf echo "ZAF_AGENT_RESTART='$ZAF_AGENT_RESTART'" >>/etc/zaf.conf
echo "ZAF_AGENT_CONFIG='$ZAF_AGENT_CONFIG'" >>/etc/zaf.conf echo "ZAF_AGENT_CONFIG='$ZAF_AGENT_CONFIG'" >>/etc/zaf.conf
echo "ZAF_AGENT_CONFIGD='$ZAF_AGENT_CONFIGD'" >>/etc/zaf.conf
echo "ZAF_SUDO='$ZAF_SUDO'" >>/etc/zaf.conf echo "ZAF_SUDO='$ZAF_SUDO'" >>/etc/zaf.conf
} }
@ -97,11 +101,20 @@ reconf)
fi fi
install $(getrest lib/zaf.lib.sh) ${ZAF_LIB_DIR}/ install $(getrest lib/zaf.lib.sh) ${ZAF_LIB_DIR}/
mkdir -p ${ZAF_PLUGINS_DIR} mkdir -p ${ZAF_PLUGINS_DIR}
echo "UserParameter=zaf.version,echo master" >${ZAF_AGENT_CONFIGD}/zaf_base.conf
install $(getrest zaf) /usr/bin install $(getrest zaf) /usr/bin
echo "Install OK. Installing plugins (${ZAF_DEFAULT_PLUGINS})." echo "Install OK. Installing plugins (${ZAF_DEFAULT_PLUGINS})."
if ! /usr/bin/zaf check-agent-config; then
echo "Something is wrong with zabbix agent config."
echo "Ensure that zabbix_agentd reads ${ZAF_AGENT_CONFIG}"
echo "and there is Include=${ZAF_AGENT_CONFIGD} directive inside."
echo "Does ${ZAF_AGENT_RESTART} work?"
exit 1
fi
for plugin in ${ZAF_DEFAULT_PLUGINS}; do for plugin in ${ZAF_DEFAULT_PLUGINS}; do
/usr/bin/zaf install $plugin || exit $? /usr/bin/zaf install $plugin || exit $?
done done
rm -rif ${ZAF_TMP_DIR}
echo "Done" echo "Done"
;; ;;
esac esac

View File

@ -1,15 +1,159 @@
zaf_fetch_url() {
local scheme
local uri
scheme=$(echo $1|cut -d ':' -f 1)
uri=$(echo $1|cut -d '/' -f 3-)
if [ "$1" = "$scheme" ]; then
cat "$1"
fi
case $scheme in
http|https|ftp|file)
curl -f -s -L -o - "$1";
;;
esac
}
zaf_far(){
local f
local t
local sedcmd="sed"
i=1
while [ "$i" -lt "$#" ];
do
eval f=\$${i}
i=$(expr $i + 1)
eval t=\$${i}
i=$(expr $i + 1)
sedcmd="$sedcmd -e 's~$f~$t~g'"
done
eval $sedcmd
}
zaf_restart_agent() {
${ZAF_AGENT_RESTART}
}
zaf_check_agent_config() {
zaf_restart_agent
zabbix_agentd -t zaf.version
}
# Update repo # Update repo
zaf_update_repo() { zaf_update_repo() {
cd ${ZAF_REPO_DIR} && git pull [ -n "${ZAF_PLUGINS_REPO}" ] && cd ${ZAF_REPO_DIR} && git pull
} }
# List installed plugins # List installed plugins
zaf_list_installed_plugins() { zaf_list_installed_plugins() {
cd ${ZAF_PLUGINS_DIR}; ls -d cd ${ZAF_PLUGINS_DIR}; ls --hide '.'
}
# Check plugin url
# $1 plugin uri
# $2 local file to fetch
zaf_plugin_fetch_control() {
[ -z "$1" ] && return -1
local name=$(basename "$1")
zaf_fetch_url "$1/control" >"$2"
}
# Get option from control file
# $1 control file
# $2 option
zaf_ctrl_get_option() {
grep -E '^(.*): ' "$1" | grep -F "$2:" | cut -d ' ' -f 2-
}
zaf_ctrl_binary_deps() {
local deps
deps=$(zaf_ctrl_get_option "$1" Binary-Depends)
for cmd in $deps; do
if ! which $cmd >/dev/null; then
echo "Missing binary dependency $cmd. Please install it first."
exit 5
fi
done
}
zaf_ctrl_install_bin() {
local binaries
local pdir
binaries=$(zaf_ctrl_get_option "$1" Install-bin)
pdir="${ZAF_PLUGINS_DIR}/${2}/"
for b in $binaries; do
zaf_fetch_url "$url/$b" >"$pdir/$b"
chmod +x "$pdir/$b"
done
}
# Generates zabbix cfg from control file
# $1 control
# $2 pluginname
zaf_ctrl_generate_cfg() {
local items
local cmd
items=$(zaf_ctrl_get_option "$1" Item)
for i in $items; do
cmd=$(zaf_ctrl_get_option "$1" "Item-cmd-$i")
echo "UserParameter=$2.${i},$cmd"
done
} }
# Install plugin. # Install plugin.
# Parameter is url, directory or plugin name (will be searched in default plugin dir) # Parameter is url, directory or plugin name (will be searched in default plugin dir)
zaf_install_plugin() { zaf_install_plugin() {
a local url
local control
local plugin
local plugindir
if echo "$1" | grep -qv '/'; then
url="${ZAF_REPO_DIR}/$1"
else
url="$1"
fi
plugin=$(basename "$url")
echo Installing plugin $plugin from $url...
rm -rf ${ZAF_TMP_DIR}/${plugin}
control=${ZAF_TMP_DIR}/${plugin}/control
plugindir="${ZAF_PLUGINS_DIR}/${plugin}"
mkdir -p "${ZAF_TMP_DIR}/${plugin}"
if zaf_plugin_fetch_control "$url" "${control}"; then
set -e
zaf_ctrl_binary_deps "${control}"
mkdir -p $plugindir
zaf_ctrl_install_bin "${control}" "${plugin}"
zaf_ctrl_generate_cfg "${control}" "${plugin}" | zaf_far '{PLUGINDIR}' "$plugindir" >${ZAF_AGENT_CONFIGD}/zaf_${plugin}.conf
zaf_restart_agent
cp $control "$plugindir"/
zaf_fetch_url $url/template.xml >"$plugindir"/template.xml
else
echo "Cannot fetch control file!"
exit 4
fi
} }
zaf_plugin_info() {
local items
local plugindir
plugindir="${ZAF_PLUGINS_DIR}/$1"
if [ -d "$plugindir" ]; then
items=$(zaf_ctrl_get_option "$plugindir/control" Item)
echo "Items supported:"
echo "$items"
else
echo "Plugin $1 not installed"
fi
}
zaf_remove_plugin() {
rm -rf ${ZAF_PLUGINS_DIR}/$1
rm -f ${ZAF_AGENT_CONFIGD}/zaf_${plugin}.conf
}

View File

@ -4,12 +4,14 @@ Maintainer: Lukas Macura <lukas@macura.cz>
Item: cpu[*] Item: cpu[*]
This item will return cpu usage of given process. In zabbix, it will be prefixed automaticaly by plugin name (processlist.cpu) This item will return cpu usage of given process. In zabbix, it will be prefixed automaticaly by plugin name (processlist.cpu)
Item-cmd-cpu[*]: TOTAL=0; for PROC in $(/bin/ps u -C $1 | /bin/grep -e '^$2' | /usr/bin/awk '{ print $$3 }'); do TOTAL=$(echo "$TOTAL $PROC" | /usr/bin/awk '{print $$1 + $$2}') ; done; echo $TOTAL Item-cmd-cpu[*]: {PLUGINDIR}/cpu-get.sh
Item: discovery Item: discovery
Discovery of runing processes Discovery of runing processes
Item-cmd-discovery: echo "{\n \"data\":[" ; /bin/ps --no-headers caux | /usr/bin/awk '{ print " { \"{#PSUSER}\":\"" $1 "\", \"{#PSNAME}\":\"" $11 "\" },"}' | /usr/bin/sort | /usr/bin/uniq | /bin/sed -e 's/\//\\\//g' -e '$s/.$//' ; echo " ]\n}" Item-cmd-discovery: {PLUGINDIR}/cpu-get.sh
Binary-Depends: echo ps awk sort uniq sed Binary-Depends: echo ps awk sort uniq sed
Install-bin: cpu-get.sh proc-discovery.sh

View File

@ -0,0 +1,6 @@
#!/bin/sh
TOTAL=0
for PROC in $(/bin/ps u -C $1 | /bin/grep -e '^$2' | /usr/bin/awk '{ print $$3 }'); do TOTAL=$(echo "$TOTAL $PROC" | /usr/bin/awk '{print $$1 + $$2}') ; done;
echo $TOTAL

View File

@ -0,0 +1,4 @@
#!/bin/sh
echo "{\n \"data\":[" ; /bin/ps --no-headers caux | /usr/bin/awk '{ print " { \"{#PSUSER}\":\"" $1 "\", \"{#PSNAME}\":\"" $11 "\" },"}' | /usr/bin/sort | /usr/bin/uniq | /bin/sed -e 's/\//\\\//g' -e '$s/.$//' ; echo " ]\n}"

18
zaf
View File

@ -14,21 +14,37 @@ fi
. ${ZAF_LIB_DIR}/zaf.lib.sh . ${ZAF_LIB_DIR}/zaf.lib.sh
case $1 in case $1 in
check-agent-config)
zaf_check_agent_config
;;
update) update)
zaf_update_repo zaf_update_repo
;; ;;
list-installed) list)
zaf_list_installed_plugins zaf_list_installed_plugins
;; ;;
info)
zaf_plugin_info "$2"
;;
install) install)
zaf_install_plugin "$2" zaf_install_plugin "$2"
;; ;;
remove)
zaf_remove_plugin "$2"
;;
*) *)
echo "$0 update" echo "$0 update"
echo "$0 list"
echo "$0 install plugin" echo "$0 install plugin"
echo "$0 remove plugin"
;; ;;
esac esac