diff --git a/observability/dashboards/product-metrics.json b/observability/dashboards/product-metrics.json index bf5156b..e2bfcbb 100644 --- a/observability/dashboards/product-metrics.json +++ b/observability/dashboards/product-metrics.json @@ -1769,24 +1769,6 @@ "type": "prometheus", "uid": "victoriametrics" }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "short" - } - }, "fieldConfig": { "defaults": { "color": { @@ -1852,24 +1834,6 @@ "type": "prometheus", "uid": "victoriametrics" }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "short" - } - }, "fieldConfig": { "defaults": { "color": { @@ -2232,7 +2196,7 @@ "pluginVersion": "11.0.0", "targets": [ { - "expr": "count(count_over_time(trackly_session_heartbeat{job=\"trackly_backend\"}[24h]) by (session_hash))", + "expr": "count((sum by (session_hash) (count_over_time(trackly_session_heartbeat{job=\"trackly_backend\"}[24h]))) > 0)", "refId": "A" } ], @@ -2420,7 +2384,7 @@ ], "title": "Funnel: Upload → View → Enrich → Export → Edit → Delete (7d)", "type": "bargauge" - } + }, { "datasource": { "type": "prometheus", @@ -2736,7 +2700,7 @@ "pluginVersion": "11.0.0", "targets": [ { - "expr": "count(count_over_time(trackly_session_heartbeat{job=\"trackly_backend\"}[7d]) by (session_hash))", + "expr": "count((sum by (session_hash) (count_over_time(trackly_session_heartbeat{job=\"trackly_backend\"}[7d]))) > 0)", "refId": "A" } ], @@ -2801,7 +2765,7 @@ "pluginVersion": "11.0.0", "targets": [ { - "expr": "count(count_over_time(trackly_session_heartbeat{job=\"trackly_backend\"}[30d]) by (session_hash))", + "expr": "count((sum by (session_hash) (count_over_time(trackly_session_heartbeat{job=\"trackly_backend\"}[30d]))) > 0)", "refId": "A" } ], diff --git a/observability/recording_rules.yml b/observability/recording_rules.yml index 9c6e5a0..e84616c 100644 --- a/observability/recording_rules.yml +++ b/observability/recording_rules.yml @@ -14,19 +14,19 @@ groups: ) - record: sessions_active_1d expr: | - count(count_over_time(trackly_session_heartbeat[1d]) by (session_hash)) + count((sum by (session_hash) (count_over_time(trackly_session_heartbeat[1d]))) > 0) - record: sessions_active_7d expr: | - count(count_over_time(trackly_session_heartbeat[7d]) by (session_hash)) + count((sum by (session_hash) (count_over_time(trackly_session_heartbeat[7d]))) > 0) - record: sessions_active_30d expr: | - count(count_over_time(trackly_session_heartbeat[30d]) by (session_hash)) + count((sum by (session_hash) (count_over_time(trackly_session_heartbeat[30d]))) > 0) - record: sessions_churn_risk expr: | count( - count_over_time(trackly_session_heartbeat[30d]) by (session_hash) + sum by (session_hash) (count_over_time(trackly_session_heartbeat[30d])) unless - count_over_time(trackly_session_heartbeat[14d]) by (session_hash) + sum by (session_hash) (count_over_time(trackly_session_heartbeat[14d])) ) - record: sessions_churn_rate expr: | @@ -55,30 +55,30 @@ groups: - record: retention_d1 expr: | count( - count_over_time(trackly_session_heartbeat[1d] offset 1d) by (session_hash) + sum by (session_hash) (count_over_time(trackly_session_heartbeat[1d] offset 1d)) and - count_over_time(trackly_session_heartbeat[1d]) by (session_hash) + sum by (session_hash) (count_over_time(trackly_session_heartbeat[1d])) ) / - count(count_over_time(trackly_session_heartbeat[1d] offset 1d) by (session_hash)) + count(sum by (session_hash) (count_over_time(trackly_session_heartbeat[1d] offset 1d))) - record: retention_d7 expr: | count( - count_over_time(trackly_session_heartbeat[7d] offset 7d) by (session_hash) + sum by (session_hash) (count_over_time(trackly_session_heartbeat[7d] offset 7d)) and - count_over_time(trackly_session_heartbeat[7d]) by (session_hash) + sum by (session_hash) (count_over_time(trackly_session_heartbeat[7d])) ) / - count(count_over_time(trackly_session_heartbeat[7d] offset 7d) by (session_hash)) + count(sum by (session_hash) (count_over_time(trackly_session_heartbeat[7d] offset 7d))) - record: retention_d30 expr: | count( - count_over_time(trackly_session_heartbeat[30d] offset 30d) by (session_hash) + sum by (session_hash) (count_over_time(trackly_session_heartbeat[30d] offset 30d)) and - count_over_time(trackly_session_heartbeat[30d]) by (session_hash) + sum by (session_hash) (count_over_time(trackly_session_heartbeat[30d])) ) / - count(count_over_time(trackly_session_heartbeat[30d] offset 30d) by (session_hash)) + count(sum by (session_hash) (count_over_time(trackly_session_heartbeat[30d] offset 30d))) # Engagement segments (passive/active/power) derived from engagement_score_7d - record: engagement_segment_passive @@ -95,7 +95,7 @@ groups: - record: new_sessions_1d_approx expr: | count( - count_over_time(trackly_session_heartbeat[1d]) by (session_hash) + sum by (session_hash) (count_over_time(trackly_session_heartbeat[1d])) unless - count_over_time(trackly_session_heartbeat[30d] offset 1d) by (session_hash) + sum by (session_hash) (count_over_time(trackly_session_heartbeat[30d] offset 1d)) )