-
Notifications
You must be signed in to change notification settings - Fork 52
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Metrics with NULL values are not processed correctly #178
Comments
Hi. To have proper |
Humm. Possibly i don't understand correctly what is "valid" retention config in this case.
rollup config in
With this configuration,
Now, related to https://clickhouse.com/docs/en/engines/table-engines/mergetree-family/graphitemergetree/#rollup-configuration
purpose of this config - keep only 1 value for each minute, if more that 1 value received within a 60s interval, and keep this data with 1-minute resolution without re-sampling (rollup). Just in case, table's schema
Maybe i missing something or misunderstanding the documentation? |
Ok, sorry for my previous comment, I haven't slept enough today and got the issue differently, because you have a distributed table So, the case is legal, although it would very significantly change the default behavior, and would be unexpected for the most of users. Currently even is old metrics are in index, they aren't listed in a metrics list #83 It's possible to add a setting and fill-up missing metrics, though. Since the project doesn't have an active maintainer currently, it makes sense to consider a PR. We can discuss it in https://t.me/ru_go_graphite 😉 |
No problems, i haven't sleep enough as well and thought i was missing something 😅 |
Recently we migrated from
graphite-web + whisper
tographite-web + graphite-clickhouse + clickhouse
schema, and there are some issues with processing NULL values.Whisper's
*.wsp
files has pre-defined resolution:which means that value for each timestamp may be NULL or some actual value, like following:
In this case, graphite + whisper always return some value for each datapoint, even if all of them are NULLs. This may be used by
transformNull()
graphite functions to convert them into specific values and fill the gaps if necessary.graphite-clickhouse
+clickhouse
has different behavior:in case if at least 1 datapoint has non-NULL value, this value + NULL for other datapoints will be returned. This is query result from ClickHouse and how data is presented in
Grafana
(exported CSV)Grafana (exported CSV)
In case if selected interval has only NULL values, nothing is returned from ClickHouse to
graphite-clickhouse
, and fromgraphite-web
toGrafana
:Grafana
displaying "No data" for this time period, but "No data" and "NULL" values are completely different, and expected behavior in this case - return NULL values for all datapoints.Real-world problem: we have a metric representing request processing quantiles, and if there are no requests (night time), there are no values for quantiles is calculated. In the monitoring system, tracking this quantiles, we can replace NULL values with
0
usingtransformNull()
, and differentiate the situation, when metric is broken and when there are just no requests served. This logic is broken now, because we may have a sequence of NULL values for the metric, exceeding selected time-window (5 minutes in our case).I suppose it can be possible to send NULLs for all datapoints from
graphite-clickhouse
even if there are empty result returned from the ClickHouse, if we're using rollup config and already know the metric's precision for selected time interval.We're using "dummy" rollup configuration for now:
Or, if there are any other way for workaround - i'd be happy to know.
And thank you for the amazing
go-graphite
stack :)The text was updated successfully, but these errors were encountered: