X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=zabbix%2Fmonitor-zabbix.init;fp=zabbix%2Fmonitor-zabbix.init;h=185f7671102bc7c7686a3bcad7a5ccc3f0bc30ac;hb=63a6fc543039abc801829f3c94588489f74757cd;hp=0000000000000000000000000000000000000000;hpb=245f15188158d7c6a1fc89d5f0fd417197971a8a;p=monitor.git diff --git a/zabbix/monitor-zabbix.init b/zabbix/monitor-zabbix.init new file mode 100644 index 0000000..185f767 --- /dev/null +++ b/zabbix/monitor-zabbix.init @@ -0,0 +1,208 @@ +#!/bin/bash +# +# priority: 850 +# +# Manage settings for the Zabbix installtion and +# other monitor-related things +# +# Stephen Soltesz +# Copyright (C) 2008 The Trustees of Princeton University +# +# $Id$ +# + +# Source function library and configuration +. /etc/plc.d/functions +. /etc/plc.d/monitor.functions +. /etc/planetlab/plc_config +local_config=/etc/planetlab/configs/site.xml + +MONITORPATH=/usr/share/monitor +# Be verbose +set -x + + +function if_present_load () +{ + file=$1 + if [ -f $file ] ; then + psql -d $ZABBIX_DB_NAME -U $ZABBIX_DB_USER < $file + fi +} + + +function check_zabbix_schema_and_data() +{ + schema_present=$( psql -U $ZABBIX_DB_USER $ZABBIX_DB_NAME -c "\d;" < /dev/null | grep hosts ) + if [ -z $schema_present ] ; then + echo "... initial import can take SEVERAL minutes. please wait ..." + if_present_load "/usr/local/zabbix/misc/create/schema/postgresql.sql" + if_present_load "/usr/local/zabbix/misc/create/data/data.sql" + if_present_load "/usr/local/zabbix/misc/create/data/images_pgsql.sql" + ## TODO: update ZABBIX Server entry, "update hosts set status=0, host='MyPLC Server' where hostid=10017" + fi +} + +function check_zabbix_templates_and_import () +{ + # LOG IN + COOKIE_FILE=/tmp/cookiejar.txt + rm -f ${COOKIE_FILE} + TEMPLATES_DIR=${MONITORPATH}/zabbix/templates + curl -s --cookie $COOKIE_FILE --cookie-jar $COOKIE_FILE \ + --form "enter=Enter" \ + --form "name=Admin" \ + --form "password=zabbix" \ + "http://${PLC_MONITOR_HOST}/zabbix/index.php?login=1" + + deleted=$( grep 'deleted' $COOKIE_FILE ) + if [ -n "$deleted" ] ; then + echo "Login to the zabbix web server failed!!!" + return 1 + fi + + for file in ${TEMPLATES_DIR}/*.xml ; do + # 0 - update , 1 - skip, 0 - add + echo "############### IMPORTING $file" >> /var/log/monitor.log + curl -s --cookie $COOKIE_FILE --cookie-jar $COOKIE_FILE \ + --form "config=1" \ + --form "import_file=@${file}" \ + --form "rules[host][exist]=0" \ + --form "rules[host][missed]=0" \ + --form "rules[template][exist]=0" \ + --form "rules[template][missed]=1" \ + --form "rules[item][exist]=0" \ + --form "rules[item][missed]=0" \ + --form "rules[trigger][exist]=0" \ + --form "rules[trigger][missed]=0" \ + --form "rules[graph][exist]=0" \ + --form "rules[graph][missed]=0" \ + --form "import=Import" \ + "http://${PLC_MONITOR_HOST}/zabbix/exp_imp.php" >> /var/log/monitor.log + done +} + +function check_zab_server () +{ + ZABBIXCFG=/etc/zabbix + TMP_FILE=`mktemp /tmp/zbxtmpXXXXXX` + + if [ -f ${ZABBIXCFG}/zabbix_server.conf ] ; then + sed -e "s/#DBHost=.*/DBHost=$PLC_MONITOR_HOST/g" \ + -e "s#DBName=.*#DBName=$ZABBIX_DB_NAME#g" \ + -e "s#DBUser=.*#DBUser=$ZABBIX_DB_USER#g" \ + -e "s#DBPassword=.*#DBPassword=$PLC_MONITOR_DBPASSWORD#g" \ + -e "s#.*ExternalScripts=.*#ExternalScripts=${MONITORPATH}/zabbix#g" \ + ${ZABBIXCFG}/zabbix_server.conf > $TMP_FILE + cat $TMP_FILE > ${ZABBIXCFG}/zabbix_server.conf + fi + service zabbix_server start + rm -f $TMP_FILE + +} +function check_zab_agentd () +{ + ZABBIXCFG=/etc/zabbix + TMP_FILE=`mktemp /tmp/zbxtmpXXXXXX` + if [ -f ${ZABBIXCFG}/zabbix_agentd.conf ] ; then + HOST=`hostname` + sed -e "s#Server=.*#Server=$PLC_MONITOR_HOST#g" \ + -e "s#Hostname=.*#Hostname=$HOST#g" \ + ${ZABBIXCFG}/zabbix_agentd.conf > $TMP_FILE + cat $TMP_FILE > ${ZABBIXCFG}/zabbix_agentd.conf + fi + service zabbix_agentd start + rm -f $TMP_FILE +} +function check_zab_webconfig() +{ + # SETUP zabbix gui configuration + ZABBIX_WEB_CFG=/var/www/html/zabbix/conf/zabbix.conf.php + if [ ! -f $ZABBIX_WEB_CFG ] ; then + touch $ZABBIX_WEB_CFG + cat < $ZABBIX_WEB_CFG + +EOF + chmod 644 $ZABBIX_WEB_CFG + fi +} + +case "$1" in + start) + MESSAGE=$"Bootstrap Zabbix (please wait...)" + dialog "$MESSAGE" + + # DATABASE acces, creation, and data loading + check_pg_hba $ZABBIX_DB_NAME $ZABBIX_DB_USER + check_user_and_db $ZABBIX_DB_NAME $ZABBIX_DB_USER + + if [ -n "$WROTE_PG_CONFIG" ] ; then + # NOTE: restart db to enable access by users granted above. + service plc restart postgresql + service plc restart httpd + MESSAGE=$"Bootstrap Zabbix 2 (please wait...)" + dialog "$MESSAGE" + fi + + check_zabbix_schema_and_data + check_zabbix_templates_and_import + + # START zabbix services. SETUP default config files. + check_zab_server + check_zab_agentd + check_zab_webconfig + + result "$MESSAGE" + ;; + + sync) + MESSAGE=$"Syncing PLC db with Zabbix DB" + dialog "$MESSAGE" + + # turn off zabbix server, etc. before writing to the db. + service plc stop monitor-zabbix + + $MONITORPATH/zabbix/zabbixsync.py --setupids &> /var/log/monitor-server + $MONITORPATH/zabbix/zabbixsync.py --setupglobal 2>&1 >> /var/log/monitor-server + # import any templates + check_zabbix_templates_and_import + + service plc start monitor-zabbix + + result "$MESSAGE" + ;; + + delete) + MESSAGE=$"Deleting Zabbix databases..." + dialog "$MESSAGE" + + dropdb -U postgres $ZABBIX_DB_NAME + dropuser -U postgres $ZABBIX_DB_USER + + result "$MESSAGE" + ;; + + stop) + MESSAGE=$"Stopping Zabbix" + dialog "$MESSAGE" + + service zabbix_server stop + service zabbix_agentd stop + + result "$MESSAGE" + ;; +esac + +exit $ERRORS