Add munin plugin to show connections and file descriptors

This commit is contained in:
Sandro Santilli 2013-05-24 10:50:51 +02:00
parent 64c0494105
commit b737f8440d
4 changed files with 99 additions and 0 deletions

View File

@ -3,6 +3,7 @@
* Fixed problem identifying OAuth request protocol
* Make base url configurable
* Update underscore dependency
* Add munin plugin
1.3.9
-----

19
tools/munin/Makefile Normal file
View File

@ -0,0 +1,19 @@
MUNIN_PLUGINS_DIR=/etc/munin/plugins
MUNIN_PLUGINS_CONFIG_DIR=/etc/munin/plugin-conf.d
PWD=$(shell pwd)
all: cdbsqlapi.conf
cdbsqlapi.conf: cdbsqlapi.conf.in
sed 's#@PWD@#$(PWD)#' < $< > $@
install-munin-plugin-conf: cdbsqlapi.conf
install -m 644 $< $(MUNIN_PLUGINS_CONFIG_DIR)/cdbsqlapi.conf
install-munin-plugin: cdbsqlapi
install -m 755 $< $(MUNIN_PLUGINS_DIR)/cdbsqlapi
install: install-munin-plugin install-munin-plugin-conf
clean:
rm -f cdbsqlapi.conf

74
tools/munin/cdbsqlapi Executable file
View File

@ -0,0 +1,74 @@
#!/bin/sh
envnik=$(basename "${SQLAPI_ENVIRONMENT}" .js)
if test "$1" = "config"; then
echo "graph_title fd usage (${envnik})"
cat <<"EOM"
graph_vlabel number of file descriptors
graph_category sqlapi
graph_scale no
procs.label Number of worker processes
pgsql.label PostgreSQL connections (max)
redis.label Redis connections (max)
http.label Incoming http requests (max)
nfd.label Total file descriptors (max)
EOM
exit 0
fi
if test x"$1" != x; then
SQLAPI_ENVIRONMENT=$(cd $(dirname $0); pwd)/../../config/environments/${1}.js
fi
if test -z "$SQLAPI_ENVIRONMENT"; then
echo "Usage: $0 [<environment>]" >&2
echo " or: [SQLAPI_ENVIRONMENT=<environment>] $0" >&2
exit 1
fi
http_port=$(echo "console.log(require('${SQLAPI_ENVIRONMENT}').node_port)" | node) || exit 1
pgsql_port=$(echo "console.log(require('${SQLAPI_ENVIRONMENT}').db_port)" | node) || exit 1
redis_port=$(echo "console.log(require('${SQLAPI_ENVIRONMENT}').redis_port)" | node) || exit 1
pids=$(lsof -i :${http_port} | grep LISTEN | awk '{print $2}')
nworkers=$(echo "${pids}" | wc -l)
pids=$(echo "${pids}" | paste -sd ' ')
if test -z "${pids}"; then
echo "No processes found listening on tcp port '${http_port}'" >&2
exit 1
fi
tmpreport="/tmp/checkfd.$$.txt"
lsof -Pp $(echo "${pids}" | tr ' ' ',') > "${tmpreport}"
maxdb=0
maxredis=0
maxhttp=0
maxtot=0
for pid in ${pids}; do
cnt=$(grep "${pid}" "${tmpreport}" | grep ":${pgsql_port} " | wc -l);
if test $cnt -gt $maxdb; then maxdb=$cnt; fi
cnt=$(grep "${pid}" "${tmpreport}" | grep ":${redis_port} " | wc -l);
if test $cnt -gt $maxredis; then maxredis=$cnt; fi
cnt=$(grep "${pid}" "${tmpreport}" | grep ":${http_port}-" | grep -v "LISTEN" | wc -l);
if test $cnt -gt $maxhttp; then maxhttp=$cnt; fi
cnt=$(grep "${pid}" "${tmpreport}" | wc -l);
if test $cnt -gt $maxtot; then maxtot=$cnt; fi
done
echo "procs.value ${nworkers}"
echo "pgsql.value ${maxdb}"
echo "redis.value ${maxredis}"
echo "http.value ${maxhttp}"
echo "nfd.value ${maxtot}"
rm -f "${tmpreport}"

View File

@ -0,0 +1,5 @@
# Configuration file for munin plugin
[cdbsqlapi]
user root
env.SQLAPI_ENVIRONMENT @PWD@/../../config/environments/production.js