This file tracks the LogQL queries we use for continuous monitoring of SpeakTrue logs.
host="hl-dockervmla2-speaktrue") via Promtail.192.168.1.118).Use these windows for all trend/count queries:
10s30s1m5m30m1h6h12hIn queries below, replace <RANGE> with one of the above.
Current baseline labels (already configured):
job="docker"host="hl-dockervmla2-speaktrue"If you later enable Docker metadata relabeling, also use:
containercompose_servicecompose_projectlog_typecount_over_time({job="docker",host="hl-dockervmla2-speaktrue"}[<RANGE>])
container label exists)sum by (container) (count_over_time({job="docker",host="hl-dockervmla2-speaktrue"}[<RANGE>]))
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "(?i)error|exception|traceback|failed|fatal|panic" [<RANGE>])
These rely on status strings in logs (access logs or app logs with
status=XYZ).
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]2[0-9][0-9]|\\s2[0-9][0-9]\\s" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]3[0-9][0-9]|\\s3[0-9][0-9]\\s" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]4[0-9][0-9]|\\s4[0-9][0-9]\\s" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]5[0-9][0-9]|\\s5[0-9][0-9]\\s" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]400|\\s400\\s" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]401|\\s401\\s|unauthorized" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]403|\\s403\\s|STRICT_MODE_POLICY_DENIED|strict_mode_policy_denied" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]404|\\s404\\s" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]405|\\s405\\s|METHOD_NOT_ALLOWED_IN_SUPABASE_STRICT_MODE|method_not_allowed_in_supabase_strict_mode" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]409|\\s409\\s" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]422|\\s422\\s|preprocessing_failed|INVALID_PREPROCESSING_" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]429|\\s429\\s|quota|rate limit|too many requests" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]500|\\s500\\s|internal_error|SPEECH_RUNTIME_ERROR" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]502|\\s502\\s|SUPABASE_EDGE_STRICT_FAILURE|provider_error|Bad Gateway" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]503|\\s503\\s|service unavailable|provider unavailable" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]504|\\s504\\s|timeout|deadline exceeded" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |= "backend=supabase_edge" [<RANGE>])
outcome=error)count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |= "backend=supabase_edge" |= "outcome=error" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |= "backend=supabase_edge" |= "fallback_used=true" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |= "SUPABASE_EDGE_STRICT_FAILURE" [<RANGE>])
avg_over_time(
{job="docker",host="hl-dockervmla2-speaktrue"} |= "backend=supabase_edge"
| logfmt
| unwrap latency_ms
[<RANGE>])
quantile_over_time(
0.95,
{job="docker",host="hl-dockervmla2-speaktrue"} |= "backend=supabase_edge"
| logfmt
| unwrap latency_ms
[<RANGE>])
sum by (operation) (
count_over_time(
{job="docker",host="hl-dockervmla2-speaktrue"} |= "backend=supabase_edge" |= "outcome=error"
| logfmt
[<RANGE>])
)
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "provider_error|provider_validation_error|voice_authorization_provider_error" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "ElevenLabs|xi-api-key|speech-to-text|text-to-speech" |~ "(?i)error|failed|status=" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "Supabase (stt-transcribe|tts-generate|voices-list|models-list) failed status=" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |= "operation=stt_preprocess" |= "outcome=applied" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |= "operation=stt_preprocess" |= "outcome=bypassed" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |= "operation=stt_preprocess" |~ "outcome=attempt_failed|outcome=failed_non_strict|preprocessing_failed" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "stt-transcribe|speech-to-text" |~ "(?i)error|failed|status=" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "speech-to-speech" |~ "(?i)error|failed|status=" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "tts-generate|text-to-speech" |~ "(?i)error|failed|status=" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "STRICT_MODE_POLICY_DENIED|strict_mode_policy_denied" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "METHOD_NOT_ALLOWED_IN_SUPABASE_STRICT_MODE|method_not_allowed_in_supabase_strict_mode" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "unauthorized|INVALID_CREDENTIALS|SUPABASE_AUTH_UNAVAILABLE|AuthLookupFailed" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status=failed|combine job failed|regeneration.*failed" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |= "status=succeeded" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |= "status=failed" [<RANGE>])
log_type label rollout){job="docker",host="hl-dockervmla2-speaktrue",log_type="app"}
{job="docker",host="hl-dockervmla2-speaktrue",log_type="access"}
sum by (log_type) (count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "(?i)error|failed|exception" [<RANGE>]))
Use these on one dashboard with 10s auto-refresh:
1m)1m)1m)1m)5m)5m)5m)5m){job="docker",host="hl-dockervmla2-speaktrue"})count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "stt-transcribe|speech-to-text" |~ "status[=: ]502|SUPABASE_EDGE_STRICT_FAILURE|provider_error" [5m]) > 5
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]5[0-9][0-9]|\\s5[0-9][0-9]\\s" [5m]) > 20
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |= "SUPABASE_EDGE_STRICT_FAILURE" [5m]) > 0
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"}[5m]) == 0
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "tts-generate|text-to-speech|/api/text-to-speech" |~ "(?i)error|failed|status=|provider_error" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]4[0-9][0-9]|status[=: ]5[0-9][0-9]|\\s4[0-9][0-9]\\s|\\s5[0-9][0-9]\\s|(?i)error|failed|exception" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "/api/|speech-to-text|speech-to-speech|text-to-speech|soundboard|settings|voice-clone|models-list|voices-list|quota-status" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]2[0-9][0-9]|\\s2[0-9][0-9]\\s|\"success\":true|\"ok\":true" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "status[=: ]429|\\s429\\s|quota|rate limit|limit reached|usage|audio_payload_too_large|CATEGORY_LIMIT|category_limit" [<RANGE>])
count_over_time({job="docker",host="hl-dockervmla2-speaktrue"} |~ "soundboard|/api/soundboard|category|categories|clip|clips|combine|reorder|copy|delete|regeneration|save-clip" [<RANGE>])
container, compose_service, log_type).