has a TODO about adding name of failing predicate query to metric set
defines the TTL field but does not implement it
lacks test cover
Add "predicate queries" to decide whether a given metric query should be scraped at runtime. Implements #41
These can be used to express complex conditions that may change over time, such as "collect this metric set if the foo extension is installed and is at least version 2.1", "collect this metric only when running on (some specific vendor postgres flavour)" or "only try to collect this if this specific table exists and has this specific column".
This helps with maintaining a single configuration to support multiple postgres versions, vendor flavours, access privilege levels, installed extensions and extension versions, etc. E.g. you can selectively query pg_stat_statements only if the extension is installed in the current DB.
The new syntax is added at query level in the configuration and looks like this:
rowcount_in_foo_table:
predicate_queries:
- name: foo_table exists
predicate_query: |
SELECT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'foo')
query: |
SELECT count(1) FROM public.foo;
WIP:
Add "predicate queries" to decide whether a given metric query should be scraped at runtime. Implements #41
These can be used to express complex conditions that may change over time, such as "collect this metric set if the foo extension is installed and is at least version 2.1", "collect this metric only when running on (some specific vendor postgres flavour)" or "only try to collect this if this specific table exists and has this specific column".
This helps with maintaining a single configuration to support multiple postgres versions, vendor flavours, access privilege levels, installed extensions and extension versions, etc. E.g. you can selectively query
pg_stat_statements
only if the extension is installed in the current DB.The new syntax is added at query level in the configuration and looks like this: