feat(alerting): ClickHouse projections for alerting read paths
Adds alerting_projections.sql with four projections (alerting_app_status, alerting_route_status on executions; alerting_app_level on logs; alerting_instance_metric on agent_metrics). ClickHouseSchemaInitializer now runs both init.sql and alerting_projections.sql, with ADD PROJECTION and MATERIALIZE treated as non-fatal — executions (ReplacingMergeTree) requires deduplicate_merge_projection_mode=rebuild which is unavailable via JDBC pool. MergeTree projections (logs, agent_metrics) always succeed and are asserted in IT. Column names confirmed from init.sql: logs uses 'application' (not application_id), agent_metrics uses 'collected_at' (not timestamp). All column names match the plan. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
-- Alerting projections — additive and idempotent (IF NOT EXISTS).
|
||||
-- Safe to run on every startup alongside init.sql.
|
||||
--
|
||||
-- NOTE: executions uses ReplacingMergeTree which requires deduplicate_merge_projection_mode='rebuild'
|
||||
-- to support projections (ClickHouse 24.x). The ADD PROJECTION and MATERIALIZE statements for
|
||||
-- executions are treated as best-effort by the schema initializer (non-fatal on failure).
|
||||
-- logs and agent_metrics use plain MergeTree and always succeed.
|
||||
--
|
||||
-- MATERIALIZE statements are also wrapped as non-fatal to handle empty tables in fresh deployments.
|
||||
|
||||
-- Plain MergeTree tables: always succeed
|
||||
ALTER TABLE logs
|
||||
ADD PROJECTION IF NOT EXISTS alerting_app_level
|
||||
(SELECT * ORDER BY (tenant_id, environment, application, level, timestamp));
|
||||
|
||||
ALTER TABLE agent_metrics
|
||||
ADD PROJECTION IF NOT EXISTS alerting_instance_metric
|
||||
(SELECT * ORDER BY (tenant_id, environment, instance_id, metric_name, collected_at));
|
||||
|
||||
-- ReplacingMergeTree tables: best-effort (requires deduplicate_merge_projection_mode='rebuild')
|
||||
ALTER TABLE executions
|
||||
ADD PROJECTION IF NOT EXISTS alerting_app_status
|
||||
(SELECT * ORDER BY (tenant_id, environment, application_id, status, start_time));
|
||||
|
||||
ALTER TABLE executions
|
||||
ADD PROJECTION IF NOT EXISTS alerting_route_status
|
||||
(SELECT * ORDER BY (tenant_id, environment, route_id, status, start_time));
|
||||
|
||||
-- MATERIALIZE: best-effort on all tables (non-fatal if table is empty or already running)
|
||||
ALTER TABLE logs MATERIALIZE PROJECTION alerting_app_level;
|
||||
ALTER TABLE agent_metrics MATERIALIZE PROJECTION alerting_instance_metric;
|
||||
ALTER TABLE executions MATERIALIZE PROJECTION alerting_app_status;
|
||||
ALTER TABLE executions MATERIALIZE PROJECTION alerting_route_status;
|
||||
Reference in New Issue
Block a user