mirror of
https://github.com/hibiken/asynqmon.git
synced 2025-10-26 08:16:10 +08:00
Add tasks processed/failed and error_rate charts
This commit is contained in:
@@ -15,6 +15,9 @@ type getMetricsResponse struct {
|
|||||||
QueueSize *json.RawMessage `json:"queue_size"`
|
QueueSize *json.RawMessage `json:"queue_size"`
|
||||||
QueueLatency *json.RawMessage `json:"queue_latency_seconds"`
|
QueueLatency *json.RawMessage `json:"queue_latency_seconds"`
|
||||||
QueueMemUsgApprox *json.RawMessage `json:"queue_memory_usage_approx_bytes"`
|
QueueMemUsgApprox *json.RawMessage `json:"queue_memory_usage_approx_bytes"`
|
||||||
|
ProcessedPerSecond *json.RawMessage `json:"tasks_processed_per_second"`
|
||||||
|
FailedPerSecond *json.RawMessage `json:"tasks_failed_per_second"`
|
||||||
|
ErrorRate *json.RawMessage `json:"error_rate"`
|
||||||
PendingTasksByQueue *json.RawMessage `json:"pending_tasks_by_queue"`
|
PendingTasksByQueue *json.RawMessage `json:"pending_tasks_by_queue"`
|
||||||
RetryTasksByQueue *json.RawMessage `json:"retry_tasks_by_queue"`
|
RetryTasksByQueue *json.RawMessage `json:"retry_tasks_by_queue"`
|
||||||
ArchivedTasksByQueue *json.RawMessage `json:"archived_tasks_by_queue"`
|
ArchivedTasksByQueue *json.RawMessage `json:"archived_tasks_by_queue"`
|
||||||
@@ -36,6 +39,19 @@ func newGetMetricsHandlerFunc(client *http.Client, prometheusAddr string) http.H
|
|||||||
err error
|
err error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// List of PromQLs.
|
||||||
|
const (
|
||||||
|
promQLQueueSize = "asynq_queue_size"
|
||||||
|
promQLQueueLatency = "asynq_queue_latency_seconds"
|
||||||
|
promQLMemUsage = "asynq_queue_memory_usage_approx_bytes"
|
||||||
|
promQLProcessedTasks = "rate(asynq_tasks_processed_total[5m])"
|
||||||
|
promQLFailedTasks = "rate(asynq_tasks_failed_total[5m])"
|
||||||
|
promQLErrorRate = "rate(asynq_tasks_failed_total[5m]) / rate(asynq_tasks_processed_total[5m])"
|
||||||
|
promQLPendingTasks = "asynq_tasks_enqueued_total{state=\"pending\"}"
|
||||||
|
promQLRetryTasks = "asynq_tasks_enqueued_total{state=\"retry\"}"
|
||||||
|
promQLArchivedTasks = "asynq_tasks_enqueued_total{state=\"archived\"}"
|
||||||
|
)
|
||||||
|
|
||||||
// Optional query params:
|
// Optional query params:
|
||||||
// `duration_sec`: specifies the number of seconds to scan
|
// `duration_sec`: specifies the number of seconds to scan
|
||||||
// `end_time`: specifies the end_time in Unix time seconds
|
// `end_time`: specifies the end_time in Unix time seconds
|
||||||
@@ -47,12 +63,15 @@ func newGetMetricsHandlerFunc(client *http.Client, prometheusAddr string) http.H
|
|||||||
}
|
}
|
||||||
// List of queries (i.e. promQL) to send to prometheus server.
|
// List of queries (i.e. promQL) to send to prometheus server.
|
||||||
queries := []string{
|
queries := []string{
|
||||||
"asynq_queue_size",
|
promQLQueueSize,
|
||||||
"asynq_queue_latency_seconds",
|
promQLQueueLatency,
|
||||||
"asynq_queue_memory_usage_approx_bytes",
|
promQLMemUsage,
|
||||||
"asynq_tasks_enqueued_total{state=\"pending\"}",
|
promQLProcessedTasks,
|
||||||
"asynq_tasks_enqueued_total{state=\"retry\"}",
|
promQLFailedTasks,
|
||||||
"asynq_tasks_enqueued_total{state=\"archived\"}",
|
promQLErrorRate,
|
||||||
|
promQLPendingTasks,
|
||||||
|
promQLRetryTasks,
|
||||||
|
promQLArchivedTasks,
|
||||||
}
|
}
|
||||||
resp := getMetricsResponse{}
|
resp := getMetricsResponse{}
|
||||||
// Make multiple API calls concurrently
|
// Make multiple API calls concurrently
|
||||||
@@ -72,17 +91,23 @@ func newGetMetricsHandlerFunc(client *http.Client, prometheusAddr string) http.H
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
switch r.query {
|
switch r.query {
|
||||||
case "asynq_queue_size":
|
case promQLQueueSize:
|
||||||
resp.QueueSize = r.msg
|
resp.QueueSize = r.msg
|
||||||
case "asynq_queue_latency_seconds":
|
case promQLQueueLatency:
|
||||||
resp.QueueLatency = r.msg
|
resp.QueueLatency = r.msg
|
||||||
case "asynq_queue_memory_usage_approx_bytes":
|
case promQLMemUsage:
|
||||||
resp.QueueMemUsgApprox = r.msg
|
resp.QueueMemUsgApprox = r.msg
|
||||||
case "asynq_tasks_enqueued_total{state=\"pending\"}":
|
case promQLProcessedTasks:
|
||||||
|
resp.ProcessedPerSecond = r.msg
|
||||||
|
case promQLFailedTasks:
|
||||||
|
resp.FailedPerSecond = r.msg
|
||||||
|
case promQLErrorRate:
|
||||||
|
resp.ErrorRate = r.msg
|
||||||
|
case promQLPendingTasks:
|
||||||
resp.PendingTasksByQueue = r.msg
|
resp.PendingTasksByQueue = r.msg
|
||||||
case "asynq_tasks_enqueued_total{state=\"retry\"}":
|
case promQLRetryTasks:
|
||||||
resp.RetryTasksByQueue = r.msg
|
resp.RetryTasksByQueue = r.msg
|
||||||
case "asynq_tasks_enqueued_total{state=\"archived\"}":
|
case promQLArchivedTasks:
|
||||||
resp.ArchivedTasksByQueue = r.msg
|
resp.ArchivedTasksByQueue = r.msg
|
||||||
}
|
}
|
||||||
if n == 0 {
|
if n == 0 {
|
||||||
|
|||||||
@@ -80,6 +80,9 @@ export interface MetricsResponse {
|
|||||||
queue_size: PrometheusMetricsResponse;
|
queue_size: PrometheusMetricsResponse;
|
||||||
queue_latency_seconds: PrometheusMetricsResponse;
|
queue_latency_seconds: PrometheusMetricsResponse;
|
||||||
queue_memory_usage_approx_bytes: PrometheusMetricsResponse;
|
queue_memory_usage_approx_bytes: PrometheusMetricsResponse;
|
||||||
|
tasks_processed_per_second: PrometheusMetricsResponse;
|
||||||
|
tasks_failed_per_second: PrometheusMetricsResponse;
|
||||||
|
error_rate: PrometheusMetricsResponse;
|
||||||
pending_tasks_by_queue: PrometheusMetricsResponse;
|
pending_tasks_by_queue: PrometheusMetricsResponse;
|
||||||
retry_tasks_by_queue: PrometheusMetricsResponse;
|
retry_tasks_by_queue: PrometheusMetricsResponse;
|
||||||
archived_tasks_by_queue: PrometheusMetricsResponse;
|
archived_tasks_by_queue: PrometheusMetricsResponse;
|
||||||
|
|||||||
@@ -126,6 +126,36 @@ function MetricsView(props: Props) {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<Grid container spacing={3}>
|
<Grid container spacing={3}>
|
||||||
|
{data?.tasks_processed_per_second && (
|
||||||
|
<Grid item xs={12}>
|
||||||
|
<ChartRow
|
||||||
|
title="Tasks Processed"
|
||||||
|
metrics={data.tasks_processed_per_second}
|
||||||
|
endTime={endTimeSec}
|
||||||
|
startTime={endTimeSec - durationSec}
|
||||||
|
/>
|
||||||
|
</Grid>
|
||||||
|
)}
|
||||||
|
{data?.tasks_failed_per_second && (
|
||||||
|
<Grid item xs={12}>
|
||||||
|
<ChartRow
|
||||||
|
title="Tasks Failed"
|
||||||
|
metrics={data.tasks_failed_per_second}
|
||||||
|
endTime={endTimeSec}
|
||||||
|
startTime={endTimeSec - durationSec}
|
||||||
|
/>
|
||||||
|
</Grid>
|
||||||
|
)}
|
||||||
|
{data?.error_rate && (
|
||||||
|
<Grid item xs={12}>
|
||||||
|
<ChartRow
|
||||||
|
title="Error Rate"
|
||||||
|
metrics={data.error_rate}
|
||||||
|
endTime={endTimeSec}
|
||||||
|
startTime={endTimeSec - durationSec}
|
||||||
|
/>
|
||||||
|
</Grid>
|
||||||
|
)}
|
||||||
{data?.queue_size && (
|
{data?.queue_size && (
|
||||||
<Grid item xs={12}>
|
<Grid item xs={12}>
|
||||||
<ChartRow
|
<ChartRow
|
||||||
|
|||||||
Reference in New Issue
Block a user