1
1
-- Metric downsampling by metric type
2
- CREATE OR REPLACE PROCEDURE _prom_catalog .downsample_gauge (_schema TEXT , _table_name TEXT , _resolution INTERVAL)
2
+ CREATE OR REPLACE PROCEDURE _prom_catalog .downsample_gauge (_schema TEXT , _table_name TEXT , _interval INTERVAL)
3
3
SET search_path = pg_catalog, pg_temp
4
4
AS
5
5
$$
@@ -18,12 +18,12 @@ BEGIN
18
18
max(value) as max
19
19
FROM prom_data.%2$I
20
20
GROUP BY public.time_bucket(%4$L, time), series_id WITH NO DATA
21
- ' , _schema, _table_name, ' UTC' , _resolution ::text );
21
+ ' , _schema, _table_name, ' UTC' , _interval ::text );
22
22
END;
23
23
$$
24
24
LANGUAGE plpgsql;
25
25
26
- CREATE OR REPLACE PROCEDURE _prom_catalog .downsample_counter (_schema TEXT , _table_name TEXT , _resolution INTERVAL)
26
+ CREATE OR REPLACE PROCEDURE _prom_catalog .downsample_counter (_schema TEXT , _table_name TEXT , _interval INTERVAL)
27
27
SET search_path = pg_catalog, pg_temp
28
28
AS
29
29
$$
@@ -41,12 +41,12 @@ BEGIN
41
41
_prom_catalog.irate(array_agg(value)) irate
42
42
FROM prom_data.%2$I
43
43
GROUP BY public.time_bucket(%4$L, time), series_id WITH NO DATA
44
- ' , _schema, _table_name, ' UTC' , _resolution ::text );
44
+ ' , _schema, _table_name, ' UTC' , _interval ::text );
45
45
END;
46
46
$$
47
47
LANGUAGE PLPGSQL;
48
48
49
- CREATE OR REPLACE PROCEDURE _prom_catalog .downsample_summary (_schema TEXT , _table_name TEXT , _resolution INTERVAL)
49
+ CREATE OR REPLACE PROCEDURE _prom_catalog .downsample_summary (_schema TEXT , _table_name TEXT , _interval INTERVAL)
50
50
SET search_path = pg_catalog, pg_temp
51
51
AS
52
52
$$
63
63
count(value) as count
64
64
FROM prom_data.%2$I
65
65
GROUP BY public.time_bucket(%4$L, time), series_id WITH NO DATA
66
- ' , _schema, _table_name, ' UTC' , _resolution ::text );
66
+ ' , _schema, _table_name, ' UTC' , _interval ::text );
67
67
END;
68
68
$$
69
69
LANGUAGE PLPGSQL;
@@ -104,7 +104,7 @@ LANGUAGE PLPGSQL;
104
104
105
105
-- create_metric_downsampling_view decides which query should be used for downsampling the given metric depending of metric type
106
106
-- and calls the respective creation function. It returns true if metric downsampling view was created.
107
- CREATE OR REPLACE FUNCTION _prom_catalog .create_metric_downsampling_view(_schema TEXT , _metric_name TEXT , _table_name TEXT , _resolution INTERVAL)
107
+ CREATE OR REPLACE FUNCTION _prom_catalog .create_metric_downsampling_view(_schema TEXT , _metric_name TEXT , _table_name TEXT , _interval INTERVAL)
108
108
RETURNS BOOLEAN
109
109
SET search_path = pg_catalog, pg_temp
110
110
AS
@@ -129,12 +129,12 @@ BEGIN
129
129
130
130
CASE
131
131
WHEN _metric_type = ' GAUGE' THEN
132
- CALL _prom_catalog .downsample_gauge (_schema, _table_name, _resolution );
132
+ CALL _prom_catalog .downsample_gauge (_schema, _table_name, _interval );
133
133
WHEN _metric_type = ' COUNTER' OR _metric_type = ' HISTOGRAM' THEN
134
- CALL _prom_catalog .downsample_counter (_schema, _table_name, _resolution );
134
+ CALL _prom_catalog .downsample_counter (_schema, _table_name, _interval );
135
135
_default_query_column := ' last' ;
136
136
WHEN _metric_type = ' SUMMARY' THEN
137
- CALL _prom_catalog .downsample_summary (_schema, _table_name, _resolution );
137
+ CALL _prom_catalog .downsample_summary (_schema, _table_name, _interval );
138
138
ELSE
139
139
RAISE WARNING ' [Downsampling] Skipping creation of metric downsampling for %. REASON: invalid metric_type. Wanted {GAUGE, COUNTER, HISTOGRAM, SUMMARY}, received %' , _metric_name, _metric_type;
140
140
RETURN FALSE;
146
146
$$
147
147
LANGUAGE PLPGSQL;
148
148
149
- -- scan_for_new_downsampling_views is called in regular intervals to scan for either new metrics or for new downsampling resolutions
149
+ -- scan_for_new_downsampling_views is called in regular intervals to scan for either new metrics or for new downsampling configs
150
150
-- and create metric downsampling for them.
151
151
CREATE OR REPLACE PROCEDURE _prom_catalog .scan_for_new_downsampling_views (job_id int , config jsonb)
152
152
AS
@@ -162,7 +162,7 @@ BEGIN
162
162
-- Note: We cannot use SET in the procedure declaration because we do transaction control
163
163
-- and we can _only_ use SET LOCAL in a procedure which _does_ transaction control
164
164
SET LOCAL search_path = pg_catalog, pg_temp;
165
- IF ( SELECT prom_api .get_downsampling_state ()::BOOLEAN IS FALSE ) THEN
165
+ IF ( SELECT prom_api .get_global_downsampling_state ()::BOOLEAN IS FALSE ) THEN
166
166
RETURN;
167
167
END IF;
168
168
@@ -176,7 +176,7 @@ BEGIN
176
176
SELECT 1 FROM _prom_catalog .metric_downsample md WHERE md .downsample_id = d .id AND md .metric_id = mt .id
177
177
) ORDER BY mt .id -- Get metric names that have a pending downsampling creation.
178
178
LOOP
179
- SELECT INTO downsampling_view_created _prom_catalog .create_metric_downsampling_view (d .schema_name , m .metric_name , m .table_name , d .resolution );
179
+ SELECT INTO downsampling_view_created _prom_catalog .create_metric_downsampling_view (d .schema_name , m .metric_name , m .table_name , d .ds_interval );
180
180
IF downsampling_view_created THEN
181
181
INSERT INTO _prom_catalog .metric_downsample (downsample_id, metric_id, refresh_pending) VALUES (d .id , m .id , TRUE);
182
182
downsampling_view_count := downsampling_view_count + 1 ;
@@ -199,7 +199,7 @@ BEGIN
199
199
md .id as metric_downsample_id,
200
200
dwn .schema_name as schema_name,
201
201
mt .table_name as table_name,
202
- dwn .resolution as resolution ,
202
+ dwn .ds_interval as ds_interval ,
203
203
dwn .id as downsample_id
204
204
FROM _prom_catalog .metric_downsample md
205
205
INNER JOIN _prom_catalog .downsample dwn ON (md .downsample_id = dwn .id )
@@ -219,7 +219,7 @@ BEGIN
219
219
-- 2. In case of non-graceful shutdown, we will successfully register the non-registered downsampling viws the
220
220
-- next time this procedure is called. Earlier, this was done using temp table, which did not
221
221
-- provide this guarantee
222
- PERFORM prom_api .register_metric_view (d .schema_name , d .table_name , d .resolution , false, d .downsample_id );
222
+ PERFORM prom_api .register_metric_view (d .schema_name , d .table_name , d .ds_interval , false, d .downsample_id );
223
223
COMMIT ;
224
224
SET LOCAL search_path = pg_catalog, pg_temp;
225
225
END LOOP;
@@ -230,6 +230,7 @@ LANGUAGE PLPGSQL;
230
230
-- apply_downsample_config does 2 things:
231
231
-- 1. Create new downsampling configurations based on the given config
232
232
-- 2. Update the existing downsampling config in terms of retention, enabling/disabling downsampling config
233
+ -- The given config must be an array of <schema_name, ds_interval, retention>
233
234
CREATE OR REPLACE FUNCTION _prom_catalog .apply_downsample_config(config jsonb)
234
235
RETURNS VOID
235
236
SET search_path = pg_catalog, pg_temp
@@ -251,8 +252,8 @@ BEGIN
251
252
END LOOP;
252
253
253
254
-- Insert or update the retention duration and enable the downsampling if disabled.
254
- INSERT INTO _prom_catalog .downsample (schema_name, resolution , retention, should_refresh)
255
- SELECT a .schema_name , a .resolution , a .retention , TRUE FROM unnest(_input) a
255
+ INSERT INTO _prom_catalog .downsample (schema_name, ds_interval , retention, should_refresh)
256
+ SELECT a .schema_name , a .ds_interval , a .retention , TRUE FROM unnest(_input) a
256
257
ON CONFLICT (schema_name) DO UPDATE
257
258
SET
258
259
retention = excluded .retention ,
@@ -265,6 +266,7 @@ BEGIN
265
266
END;
266
267
$$
267
268
LANGUAGE PLPGSQL;
269
+ GRANT EXECUTE ON FUNCTION _prom_catalog .apply_downsample_config (jsonb) TO prom_writer;
268
270
269
271
-- delete_downsampling deletes everything related to the given downsampling schema name. It does the following in order:
270
272
-- 1. Delete the entries in _prom_catalog.downsample
291
293
LANGUAGE PLPGSQL;
292
294
GRANT EXECUTE ON PROCEDURE _prom_catalog .delete_downsampling (text ) TO prom_writer;
293
295
294
- CREATE OR REPLACE FUNCTION _prom_catalog .update_downsampling_state(_schema_name TEXT , _should_refresh BOOLEAN )
295
- RETURNS VOID
296
- SET search_path = pg_catalog, pg_temp
297
- AS
298
- $$
299
- BEGIN
300
- UPDATE _prom_catalog .downsample SET should_refresh = _should_refresh WHERE schema_name = _schema_name;
301
- IF NOT FOUND THEN
302
- RAISE EXCEPTION ' No entry found for schema %' , _schema_name;
303
- END IF;
304
- END;
305
- $$
306
- LANGUAGE PLPGSQL;
307
- GRANT EXECUTE ON FUNCTION _prom_catalog .update_downsampling_state (TEXT , BOOLEAN ) TO prom_admin;
308
-
309
- CREATE OR REPLACE FUNCTION prom_api .set_downsampling_state(_state BOOLEAN )
296
+ CREATE OR REPLACE FUNCTION prom_api .set_global_downsampling_state(_state BOOLEAN )
310
297
RETURNS VOID
311
298
SET search_path = pg_catalog, pg_temp
312
299
AS $$
313
300
SELECT _prom_catalog .set_default_value (' downsample' , _state::text );
314
301
$$
315
302
LANGUAGE SQL;
316
- COMMENT ON FUNCTION prom_api .set_downsampling_state (BOOLEAN )
303
+ COMMENT ON FUNCTION prom_api .set_global_downsampling_state (BOOLEAN )
317
304
IS ' Set automatic-downsampling state for metrics. Downsampled data will be created only if this returns true' ;
318
- GRANT EXECUTE ON FUNCTION prom_api .set_downsampling_state (BOOLEAN ) TO prom_admin;
305
+ GRANT EXECUTE ON FUNCTION prom_api .set_global_downsampling_state (BOOLEAN ) TO prom_admin;
319
306
320
- CREATE OR REPLACE FUNCTION prom_api .get_downsampling_state ()
307
+ CREATE OR REPLACE FUNCTION prom_api .get_global_downsampling_state ()
321
308
RETURNS BOOLEAN
322
309
SET search_path = pg_catalog, pg_temp
323
310
AS $$
324
311
SELECT _prom_catalog .get_default_value (' downsample' )::boolean ;
325
312
$$
326
313
LANGUAGE SQL;
327
- COMMENT ON FUNCTION prom_api .get_downsampling_state ()
314
+ COMMENT ON FUNCTION prom_api .get_global_downsampling_state ()
328
315
IS ' Get automatic downsample state' ;
329
- GRANT EXECUTE ON FUNCTION prom_api .get_downsampling_state () TO prom_admin;
316
+ GRANT EXECUTE ON FUNCTION prom_api .get_global_downsampling_state () TO prom_admin;
330
317
331
318
CREATE OR REPLACE FUNCTION prom_api .set_downsample_old_data(_state BOOLEAN )
332
319
RETURNS VOID
0 commit comments