diff --git a/CHANGELOG.md b/CHANGELOG.md index c5203415fd2428f587bbe10bac031559d6246e86..f1b6565f1969d11e97357b520d268f58872a7340 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,13 +6,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.1.0] - 2022-04-26 +### Added +- Reachability of controlplane gateways + ## [1.0.5] - 2021-10-14 ### Changed - none, simple rebuild ## [1.0.4] - 2021-07-13 ### Fixed -- dockermon id assert corrected, now expects `/docker/` prefix +- dockermon id assert corrected, now expects `/docker/` prefix ## [1.0.3] - 2021-07-12 ### Fixed diff --git a/entrypoint.sh b/entrypoint.sh index 18c69f8e128864f52cc1ca3c896b88f66e58380f..135ac1bcb314f1912ee1bdda2afabdfc67fba643 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -11,7 +11,7 @@ CMG_MAX_JITTER_DELAY="${CMG_MAX_JITTER_DELAY:-"3"}" CMG_OUT_METRICS_DIR="${CMG_OUT_METRICS_DIR:-"${CMG_BASE_DIR}/out-metrics-dir"}" CMG_STDOUT_LOG="${CMG_STDOUT_LOG:-"${CMG_BASE_DIR}/custom-metrics-generator.stdout.log"}" CMG_STDERR_LOG="${CMG_STDERR_LOG:-"${CMG_BASE_DIR}/custom-metrics-generator.stderr.log"}" -CMG_EXEC_MODULES="${CMG_EXEC_MODULES:-"smartmon dockermon puppetmon noderolemon"}" +CMG_EXEC_MODULES="${CMG_EXEC_MODULES:-"smartmon dockermon puppetmon noderolemon gatewaypingmon"}" CMG_NODEROLEMON_METRICS_TEXTFILE=${CMG_NODEROLEMON_METRICS_TEXTFILE:-"/etc/node-exporter/node-role.prom"} # load the library diff --git a/src/metric-generators/gatewaypingmon.sh b/src/metric-generators/gatewaypingmon.sh new file mode 100644 index 0000000000000000000000000000000000000000..283669ba3178c6d8a37b2fd0ea0dbcf17d49f17d --- /dev/null +++ b/src/metric-generators/gatewaypingmon.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +# prometheus textfile metrics generator for node-exporter textfile collector +# Monitors: gateway reachability from host +# Usage: gatewaypingmon.sh <gw1> <gw2> ... + +set -eo pipefail + +METRIC_NAME="gatewaypingmon_prefix_gateway_accessible" +if [ -z "${GATEWAYPINGMON_GATEWAYS}" ] ; then + if hostname | grep -qF .stage.; then + GATEWAYPINGMON_GATEWAYS=("10.16.113.1" "10.16.104.1" "10.16.127.129" "147.251.62.129") + else + GATEWAYPINGMON_GATEWAYS=("10.16.100.1" "10.16.108.1" "10.16.61.1" "147.251.62.129") + fi +else + if ! declare -p GATEWAYPINGMON_GATEWAYS | grep -qE "declare[ \t]+-a[ \t]+"; then + GATEWAYPINGMON_GATEWAYS=(${GATEWAYPINGMON_GATEWAYS}) + fi +fi +GATEWAYPINGMON_PING_ARGS=${GATEWAYPINGMON_PING_ARGS:-"-c 4 -i 0.2"} +ACCESS_RATIO=() +CMG_SRC_DIR=$(dirname $(dirname $(readlink -f $0))) + +STAGE_NAME="configuration loaded" +source "${CMG_SRC_DIR}/../custom-metrics-generator.conf.env" + +STAGE_NAME="library loaded" +source "${CMG_SRC_DIR}/lib.sh" + +STAGE_NAME="accessibility of mandatory gateways from host tested" +for gateway in ${GATEWAYPINGMON_GATEWAYS[@]}; do + ping_result=$(ping ${GATEWAYPINGMON_PING_ARGS} ${gateway} || echo "0 received, 100% packet loss") + packet_loss_percent=$(echo $ping_result | sed -n -e 's/^.*, \(.*\)% packet.*/\1/p') + ACCESS_RATIO+=($(echo "scale=2 ; 1 - ${packet_loss_percent} / 100" | bc)) +done + +STAGE_NAME="accessibility of gateways is generated" +printf '# HELP %s: Current network gateway ping access ratio. (1 ~ no loss, 0 ~ complete loss)\n' "${METRIC_NAME}" +for ((i=0; i<${#GATEWAYPINGMON_GATEWAYS[*]}; i++)); do + printf '%s{gateway="%s"} %.2f\n' \ + "${METRIC_NAME}" "${GATEWAYPINGMON_GATEWAYS[${i}]}" "${ACCESS_RATIO[${i}]}" +done