{ __name__: sc_pcd_g2version, container: mgmtbroker, endpoint: vxexporter, instance: 10.42.24.132:9116, job: prometheus, namespace: delivery, pod: chn1-d1-ac-0, service: prometheus }
{ __name__: sc_pcd_g2version, container: mgmtbroker, endpoint: vxexporter, instance: 10.42.3.110:9116, job: prometheus, namespace: delivery, pod: chn1-d1-ia-0, service: prometheus }
There are two block below how to iterate the below data block using jq filter which should pick on first iteration { name: sc_pcd_g2version, container: mgmtbroker, endpoint: vxexporter, instance: 10.42.24.132:9116, job: prometheus, namespace: delivery, pod: chn1-d1-ac-0, service: prometheus }
On second iteration, it should pick the second one { name: sc_pcd_g2version, container: mgmtbroker, endpoint: vxexporter, instance: 10.42.3.110:9116, job: prometheus, namespace: delivery, pod: chn1-d1-ia-0, service: prometheus }
The response of the above which needs to be later selected each {} block
The required output filtered and captured below. Now i am looking to select the first element {} block and then next iteration must select the next one.
function get_prometheus_vector_value {
local _RESULT
for i in 0 1
do
# return the value of the first element of the vector
_RESULT=$(echo $1 | jq -r '.['$i'].value?')
printf '%s' "${_RESULT}"
done
}
function get_prometheus_vector_metric {
local _RESULT
for i in 0 1
do
# return the metric information of the first element of the vector
_RESULT=$(echo $1 | jq -r '.['$i'].metric?' | xargs)
printf '%s' "${_RESULT}"
done
}
# set up exit function
trap on_exit EXIT TERM
# process the cli options
process_command_line "$@"
# get the raw query from prometheus
PROMETHEUS_RAW_RESULT="$( get_prometheus_raw_result )"
# extract the metric value from the raw prometheus result
if [[ "${PROMETHEUS_QUERY_TYPE}" = "scalar" ]]
then
PROMETHEUS_RESULT=$( get_prometheus_scalar_result "$PROMETHEUS_RAW_RESULT" )
PROMETHEUS_METRIC=UNKNOWN
else
PROMETHEUS_VALUE=$( get_prometheus_vector_value "$PROMETHEUS_RAW_RESULT" )
PROMETHEUS_RESULT=$( get_prometheus_scalar_result "$PROMETHEUS_VALUE" )
printf 'PROMETHEUS_RESULT: %s\n' "${PROMETHEUS_RESULT}"
PROMETHEUS_METRIC=$( get_prometheus_vector_metric "$PROMETHEUS_RAW_RESULT" )
PROMETHEUS_METRIC=$(echo $PROMETHEUS_METRIC | jq -Rr 'scan("({[^}]*})")')
printf 'PROMETHEUS_METRIC after scan: %s\n' "${PROMETHEUS_METRIC}"
fi
for i in "$PROMETHEUS_METRIC"
do
# check the value
**PROMETHEUS_METRIC=$(echo $PROMETHEUS_METRIC) |jq .[1]**
if [[ ${PROMETHEUS_RESULT} =~ ^-?[0-9]+$ ]]
then
if eval [[ ${PROMETHEUS_RESULT} -${COMPARISON_METHOD} ${CRITICAL_LEVEL} ]]
then
NAGIOS_STATUS=CRITICAL
NAGIOS_SHORT_TEXT="${METRIC_NAME} is ${PROMETHEUS_RESULT}"
elif eval [[ ${PROMETHEUS_RESULT} -${COMPARISON_METHOD} $WARNING_LEVEL ]]
then
NAGIOS_STATUS=WARNING
NAGIOS_SHORT_TEXT="${METRIC_NAME} is ${PROMETHEUS_RESULT}"
else
NAGIOS_STATUS=OK
NAGIOS_SHORT_TEXT="${METRIC_NAME} is ${PROMETHEUS_RESULT}"
fi
else
if [[ "${NAN_OK}" = "true" && "${PROMETHEUS_RESULT}" = "NaN" ]]
then
NAGIOS_STATUS=OK
NAGIOS_SHORT_TEXT="${METRIC_NAME} is ${PROMETHEUS_RESULT}"
else
NAGIOS_SHORT_TEXT="unable to parse prometheus response"
NAGIOS_LONG_TEXT="${METRIC_NAME} is ${PROMETHEUS_RESULT}"
fi
fi
if [[ "${NAGIOS_INFO}" = "true" ]]
then
NAGIOS_SHORT_TEXT="${NAGIOS_SHORT_TEXT}: ${PROMETHEUS_METRIC}"
fi
if [[ "${PERFDATA}" = "true" ]]
then
NAGIOS_SHORT_TEXT="${NAGIOS_SHORT_TEXT} | query_result=${PROMETHEUS_RESULT}"
fi
exit