commit 6154cf3218f09c3539521672f1c23d28c0d7f38a Author: mischa Date: Tue Mar 12 16:14:48 2019 +0100 Initial commit diff --git a/cores.sh b/cores.sh new file mode 100755 index 0000000..2bb32e1 --- /dev/null +++ b/cores.sh @@ -0,0 +1,82 @@ +#!/bin/sh +# +# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +test -n "$1" || exit 1 +HOST="$1" +COMMUNITY="public" +RRDFILES="/var/rrdtool" +IMAGES="/var/www/htdocs" +RRDTOOL="/usr/local/bin/rrdtool" +CPUINFO="/tmp/${HOST}-cores.txt" +UPTIME=$(cat /tmp/${HOST}-uptime.txt) +NOW=$(date "+%Y-%m-%d %H:%M:%S %Z" | sed 's/:/\\:/g') + +if ! test -f "${RRDFILES}/${HOST}-cores.rrd" +then +echo "Creating ${RRDFILES}/${HOST}-cores.rrd" +${RRDTOOL} create ${RRDFILES}/${HOST}-cores.rrd \ + --step 300 \ + DS:ds0:GAUGE:600:U:U \ + DS:ds1:GAUGE:600:U:U \ + DS:ds2:GAUGE:600:U:U \ + DS:ds3:GAUGE:600:U:U \ + DS:ds4:GAUGE:600:U:U \ + DS:ds5:GAUGE:600:U:U \ + DS:ds6:GAUGE:600:U:U \ + DS:ds7:GAUGE:600:U:U \ + DS:ds8:GAUGE:600:U:U \ + DS:ds9:GAUGE:600:U:U \ + DS:ds10:GAUGE:600:U:U \ + DS:ds11:GAUGE:600:U:U \ + RRA:MAX:0.5:1:20000 +fi + +snmpctl snmp walk ${HOST} community ${COMMUNITY} oid hrProcessorLoad | cut -d= -f2 > ${CPUINFO} +CORES=$(cat ${CPUINFO} | wc -l) +ACT_CORES=$((${CORES}/2)) +CPU_LOAD=$(cat ${CPUINFO} | paste -s -d: - | cut -d: -f1-${ACT_CORES}) + +${RRDTOOL} update ${RRDFILES}/${HOST}-cores.rrd N:${CPU_LOAD} + +${RRDTOOL} graph ${IMAGES}/${HOST}-cores.png \ + --start -432000 \ + --title "${HOST} - CPU" \ + --vertical-label "% CPU Used" \ + --watermark "OpenBSD Amsterdam - https://obsda.ms" \ + DEF:CORE0=${RRDFILES}/${HOST}-cores.rrd:ds0:AVERAGE \ + DEF:CORE1=${RRDFILES}/${HOST}-cores.rrd:ds1:AVERAGE \ + DEF:CORE2=${RRDFILES}/${HOST}-cores.rrd:ds2:AVERAGE \ + DEF:CORE3=${RRDFILES}/${HOST}-cores.rrd:ds3:AVERAGE \ + DEF:CORE4=${RRDFILES}/${HOST}-cores.rrd:ds4:AVERAGE \ + DEF:CORE5=${RRDFILES}/${HOST}-cores.rrd:ds5:AVERAGE \ + DEF:CORE6=${RRDFILES}/${HOST}-cores.rrd:ds6:AVERAGE \ + DEF:CORE7=${RRDFILES}/${HOST}-cores.rrd:ds7:AVERAGE \ + DEF:CORE8=${RRDFILES}/${HOST}-cores.rrd:ds8:AVERAGE \ + DEF:CORE9=${RRDFILES}/${HOST}-cores.rrd:ds9:AVERAGE \ + DEF:CORE10=${RRDFILES}/${HOST}-cores.rrd:ds10:AVERAGE \ + DEF:CORE11=${RRDFILES}/${HOST}-cores.rrd:ds11:AVERAGE \ + LINE1:CORE0#FFFA00:"CORE0" \ + LINE1:CORE1#FFFA00:"CORE1" \ + LINE1:CORE2#FFF000:"CORE2" \ + LINE1:CORE3#FFE600:"CORE3" \ + LINE1:CORE4#FFDC00:"CORE4" \ + LINE1:CORE5#FFD200:"CORE5" \ + LINE1:CORE6#FFC800:"CORE6" \ + LINE1:CORE7#FFBE00:"CORE7" \ + LINE1:CORE8#FFB400:"CORE8" \ + LINE1:CORE9#FFAA00:"CORE9" \ + LINE1:CORE10#FFA000:"CORE10" \ + LINE1:CORE11#FF9600:"CORE11" \ + COMMENT:"\\n" \ + COMMENT:" Up for ${UPTIME} at ${NOW}" diff --git a/cpu_load.sh b/cpu_load.sh new file mode 100755 index 0000000..4363ea7 --- /dev/null +++ b/cpu_load.sh @@ -0,0 +1,54 @@ +#!/bin/sh +# +# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +test -n "$1" || exit 1 +HOST="$1" +COMMUNITY="public" +RRDFILES="/var/rrdtool" +IMAGES="/var/www/htdocs" +RRDTOOL="/usr/local/bin/rrdtool" +CPUINFO="/tmp/${HOST}-cpu.txt" +UPTIME=$(cat /tmp/${HOST}-uptime.txt) +NOW=$(date "+%Y-%m-%d %H:%M:%S %Z" | sed 's/:/\\:/g') + +if ! test -f "${RRDFILES}/${HOST}-cpu.rrd" +then +echo "Creating ${RRDFILES}/${HOST}-cpu.rrd" +${RRDTOOL} create ${RRDFILES}/${HOST}-cpu.rrd \ + --step 300 \ + DS:ds0:GAUGE:600:U:U \ + RRA:MAX:0.5:1:20000 +fi + +snmpctl snmp walk ${HOST} community ${COMMUNITY} oid hrProcessorLoad | cut -d= -f2 > ${CPUINFO} +CORES=$(grep -cv "^0$" ${CPUINFO}) +CPU_LOAD_SUM=$(awk '{sum += $1} END {print sum}' ${CPUINFO}) +CPU_LOAD=$(echo "scale=2; ${CPU_LOAD_SUM}/${CORES}" | bc -l) + +${RRDTOOL} update ${RRDFILES}/${HOST}-cpu.rrd N:${CPU_LOAD} + +${RRDTOOL} graph ${IMAGES}/${HOST}-cpu.png \ + --start -43200 \ + --title "${HOST} - CPU" \ + --vertical-label "% CPU Used" \ + --watermark "OpenBSD Amsterdam - https://obsda.ms" \ + DEF:CPU=${RRDFILES}/${HOST}-cpu.rrd:ds0:AVERAGE \ + AREA:CPU#FFCC00 \ + LINE2:CPU#CC0033:"CPU" \ + GPRINT:CPU:MAX:"Max\:%2.2lf %s" \ + GPRINT:CPU:AVERAGE:"Average\:%2.2lf %s" \ + GPRINT:CPU:LAST:" Current\:%2.2lf %s\n" \ + COMMENT:"\\n" \ + COMMENT:" SUM CPU Load / Active Cores = % CPU Used\n" \ + COMMENT:" Up for ${UPTIME} at ${NOW}" diff --git a/interface.sh b/interface.sh new file mode 100755 index 0000000..4084f4c --- /dev/null +++ b/interface.sh @@ -0,0 +1,67 @@ +#!/bin/sh +# +# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +test -n "$1" || exit 1 +test -n "$2" || exit 1 +HOST="$1" +INTERFACE="$2" +COMMUNITY="public" +RRDFILES="/var/rrdtool" +IMAGES="/var/www/htdocs" +RRDTOOL="/usr/local/bin/rrdtool" +UPTIME=$(cat /tmp/${HOST}-uptime.txt) +NOW=$(date "+%Y-%m-%d %H:%M:%S %Z" | sed 's/:/\\:/g') + +if ! test -f "${RRDFILES}/${HOST}-${INTERFACE}.rrd" +then +echo "Creating ${RRDFILES}/${HOST}-${INTERFACE}.rrd" +${RRDTOOL} create ${RRDFILES}/${HOST}-${INTERFACE}.rrd \ + --step 300 \ + DS:ds0:COUNTER:600:0:1250000000 \ + DS:ds1:COUNTER:600:0:1250000000 \ + RRA:AVERAGE:0.5:1:600 \ + RRA:AVERAGE:0.5:6:700 \ + RRA:AVERAGE:0.5:24:775 \ + RRA:AVERAGE:0.5:288:797 \ + RRA:MAX:0.5:1:600 \ + RRA:MAX:0.5:6:700 \ + RRA:MAX:0.5:24:775 \ + RRA:MAX:0.5:288:797 +fi + +IN=$(snmpctl snmp get ${HOST} community ${COMMUNITY} oid ifInOctets.${INTERFACE} | cut -d= -f2) +OUT=$(snmpctl snmp get ${HOST} community ${COMMUNITY} oid ifOutOctets.${INTERFACE} | cut -d= -f2) +DESCR=$(snmpctl snmp get ${HOST} community ${COMMUNITY} oid ifDescr.${INTERFACE} | cut -d= -f2 | tr -d '"') + +${RRDTOOL} update ${RRDFILES}/${HOST}-${INTERFACE}.rrd N:${IN}:${OUT} + +${RRDTOOL} graph ${IMAGES}/${HOST}-${INTERFACE}.png \ + --start -43200 \ + --title "${HOST} - ${DESCR}" \ + --vertical-label "Bits per Second" \ + --watermark "OpenBSD Amsterdam - https://obsda.ms" \ + DEF:IN=${RRDFILES}/${HOST}-${INTERFACE}.rrd:ds0:AVERAGE \ + DEF:OUT=${RRDFILES}/${HOST}-${INTERFACE}.rrd:ds1:AVERAGE \ + CDEF:IN_CDEF="IN,8,*" \ + CDEF:OUT_CDEF="OUT,8,*" \ + AREA:IN_CDEF#00FF00:"In " \ + GPRINT:IN_CDEF:MAX:"Max\:%5.2lf %s" \ + GPRINT:IN_CDEF:AVERAGE:"Average\:%5.2lf %s" \ + GPRINT:IN_CDEF:LAST:" Current\:%5.2lf %s\n" \ + LINE2:OUT_CDEF#0000FF:"Out" \ + GPRINT:OUT_CDEF:MAX:"Max\:%5.2lf %s" \ + GPRINT:OUT_CDEF:AVERAGE:"Average\:%5.2lf %s" \ + GPRINT:OUT_CDEF:LAST:" Current\:%5.2lf %s\n" \ + COMMENT:"\\n" \ + COMMENT:" Up for ${UPTIME} at ${NOW}" diff --git a/uptime.sh b/uptime.sh new file mode 100755 index 0000000..7950cb3 --- /dev/null +++ b/uptime.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# +# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +test -n "$1" || exit 1 +HOST="$1" +COMMUNITY="public" +UPTIMEINFO="/tmp/${HOST}-uptime.txt" + +TICKS=$(snmpctl snmp get ${HOST} community ${COMMUNITY} oid hrSystemUptime.0 | cut -d= -f2) +DAYS=$(echo "${TICKS}/8640000" | bc -l) +HOURS=$(echo "0.${DAYS##*.} * 24" | bc -l) +MINUTES=$(echo "0.${HOURS##*.} * 60" | bc -l) +SECS=$(echo "0.${MINUTES##*.} * 60" | bc -l) +test -n "$DAYS" && printf '%s days, ' "${DAYS%.*}" > ${UPTIMEINFO} +printf '%02d\\:%02d\\:%02d\n' "${HOURS%.*}" "${MINUTES%.*}" "${SECS%.*}" >> ${UPTIMEINFO} diff --git a/wrapper.sh b/wrapper.sh new file mode 100755 index 0000000..3ff512b --- /dev/null +++ b/wrapper.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# +# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +SCRIPTS="/var/rrdtool" + +for i in $(jot 2 1); do ${SCRIPTS}/uptime.sh host${i}.domain.tld; done +for i in $(jot 2 1); do ${SCRIPTS}/cpu_load.sh host${i}.domain.tld; done +${SCRIPTS}/interface.sh host1.domain.tld 12 +${SCRIPTS}/interface.sh host2.domain.tld 11