At the moment it can be relatively opaque as to why a tcp probe with a set of query_response blocks failed. Was there a connection error? Was there a timeout? Did the connection get closed by the other end before you saw an expect: value? It's at best hard to tell, and it's also hard to tell how far you got through the query_response sequence. It would be nice if the query_response processing exposed clearer metrics here. A hypthetical all in one solution might be a new metric probe_failed_at_step{reason="..."} STEP-NUMBER metric. Then various places would set reason="read-error" or reason="send-error" or reason="tls-handshake-failed" or the like, with the appropriate step number (which would be something like -1 when the probe succeeded).