{ __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 functiontrap on_exit EXIT TERM# process the cli optionsprocess_command_line "$@"# get the raw query from prometheusPROMETHEUS_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}" fifor 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}" fiexit