X-Git-Url: https://iankelling.org/git/?p=buildscripts;a=blobdiff_plain;f=prom-node-exporter;fp=prom-node-exporter;h=4263b3e44e18790731349d31a256b8eb5df56fa0;hp=0000000000000000000000000000000000000000;hb=6d5364acaf732814110b7ab98ef1d266276f64ee;hpb=f22fdf4a151ff0dcbbf1902977559eebe18613ea diff --git a/prom-node-exporter b/prom-node-exporter new file mode 100755 index 0000000..4263b3e --- /dev/null +++ b/prom-node-exporter @@ -0,0 +1,263 @@ +#!/bin/bash + +if ! test "$BASH_VERSION"; then echo "error: shell is not bash" >&2; exit 1; fi +shopt -s inherit_errexit 2>/dev/null ||: # ignore fail in bash < 4.4 +set -eE -o pipefail +trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" exit status: $?, PIPESTATUS: ${PIPESTATUS[*]}" >&2' ERR + +[[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@" + + +usage() { + cat </dev/null; then + apt-get -y install $p + fi + done +fi +if $do_setup && ! type -t rsync &>/dev/null; then + # note: we could use diff or cmp instead. + apt-get -y install rsync +fi + +sysd_reload=false +installed_file=false + +i() { # install file + local tmp tmpdir dest="$1" + local base="${dest##*/}" + local dir="${dest%/*}" + if [[ $dir != "$base" ]]; then + # dest has a directory component + mkdir -p "$dir" + fi + tmpdir=$(mktemp -d) + cat >$tmpdir/"$base" + tmp=$(rsync -ic $tmpdir/"$base" "$dest") + if [[ $tmp ]]; then + printf "%s\n" "$tmp" + installed_file=true + if [[ $dest == /etc/systemd/system/* ]]; then + sysd_reload=true + fi + fi + rm -rf $tmpdir +} + + +if $dl_bin; then + if [[ -s /usr/local/src/node-exporter-url ]]; then + installed_url=$(cat /usr/local/src/node-exporter-url) + fi + url=$(curl -s https://api.github.com/repos/prometheus/node_exporter/releases/latest | jq -r '.assets[].browser_download_url | match(".*linux-amd64.tar.gz$").string') + if [[ ! $url ]]; then + echo $0: error failed to get url + exit 1 + fi + if [[ $url != "$installed_url" ]]; then + tmpdir=$(mktemp -d) + cd $tmpdir + f=${url##*/} + wget -nv $url + tar -xf $f + dir=${f%.tar.gz} + install $dir/node_exporter /usr/local/bin/prometheus-node-exporter + printf "%s\n" "$url" >/usr/local/src/node-exporter-url + cd + rm -rf $tmpdir + fi +fi + +if ! $do_setup; then + exit 0 +fi + +# taken from postinstall script +if ! getent passwd prometheus &>/dev/null; then + adduser --quiet --system --home /var/lib/prometheus --no-create-home \ + --group --gecos "Prometheus daemon" prometheus +fi + + +# textfile collector dir +mkdir -p /var/lib/prometheus/node-exporter + +chown prometheus:prometheus /var/lib/prometheus + + +i /etc/default/prometheus-node-exporter < +# Author: Guillem Jover + +DESC="Prometheus exporter for machine metrics" +NAME=prometheus-node-exporter +USER=prometheus +GROUP=$USER +DAEMON=/usr/bin/$NAME +PIDFILE=/run/prometheus/$NAME.pid +LOGFILE=/var/log/prometheus/$NAME.log + +START_ARGS="--no-close --background --make-pidfile" +STOP_ARGS="--remove-pidfile" + +do_start_prepare() +{ + mkdir -p $(dirname $PIDFILE) +} + +do_start_cmd_override() +{ + start-stop-daemon --start --quiet --oknodo \ + --exec $DAEMON --pidfile $PIDFILE --user $USER --group $GROUP \ + --chuid $USER:$GROUP $START_ARGS -- $ARGS >>$LOGFILE 2>&1 +} + +do_stop_cmd_override() +{ + start-stop-daemon --stop --quiet --oknodo --retry=TERM/30/KILL/5 \ + --exec $DAEMON --pidfile $PIDFILE --user $USER $STOP_ARGS +} + +alias do_reload=do_reload_sigusr1 +EOF + chmod +x /etc/init.d/prometheus-node-exporter + + mkdir -p /var/log/prometheus + chown prometheus:prometheus /var/log/prometheus + update-rc.d prometheus-node-exporter defaults + + running=false + if type -t pgrep &>/dev/null && pgrep -f prometheus-node-exporter &>/dev/null; then + running=true + fi + if $installed_file || ! $running; then + /etc/init.d/prometheus-node-exporter restart + fi + + i /etc/logrotate.d/prometheus-node-exporter <<'EOF' +/var/log/prometheus/prometheus-node-exporter.log { + weekly + rotate 10 + copytruncate + compress + delaycompress + notifempty + missingok +} +EOF + +fi