Skip to content

stats: select ok latency becomes -nan after 30 seconds #286

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

Closed
no1seman opened this issue May 16, 2022 · 0 comments · Fixed by #288
Closed

stats: select ok latency becomes -nan after 30 seconds #286

no1seman opened this issue May 16, 2022 · 0 comments · Fixed by #288
Assignees

Comments

@no1seman
Copy link

Imagine we have a Cartridge cluster with some data ... if we make the following operations in router console:

unix/:./tmp/run/app-cartridge.router.control> do
                                            >     fiber=require('fiber')
                                            >     crud.cfg({stats = true})
                                            >     t={}
                                            > 
                                            >     res=crud.select('space')
                                            >     table.insert(t, crud.stats().spaces.space.select.ok.latency)
                                            >     fiber.sleep(30);
                                            >     table.insert(t, crud.stats().spaces.space.select.ok.latency)
                                            > end
---
...

unix/:./tmp/run/app-cartridge.router.control> t
---
- - 0.0036880000006931
  - -nan
...

Seems quite strange that "select" "ok" "latency" becomes -nan after 30 seconds

DifferentialOrange added a commit that referenced this issue May 17, 2022
The main motivation of making these parameters configurable is to be
able to write time-adequate test cases for #286 issue, but they may be
useful in getting rid of #286 effect at all or in quantile time window
calibration.

After this patch, statistics summary quantile aging params
`age_bucket_count` and `max_age_time` [1] could be configured:

  crud.cfg{
      stats_quantile_age_bucket_count = 3,
      stats_quantile_max_age_time = 30,
  }

Only type validation is conducted in crud.cfg, every other validation is
performed by metrics itself.

Part of #286
DifferentialOrange added a commit that referenced this issue May 17, 2022
Metrics quantiles display `-nan` if there were no observations for
a whole age. Such behavior is expected and valid: for example, Grafana
should ignore such values and they will be displayed as `No data` for
a window when there wasn't any requests. On the other hand, getting
`-nan` as a `latency` in `crud.stats` is disappointing for a user since
it is rather useless without any historical data. This patch replaces
`-nan` latency value with total average.

Closes #286
DifferentialOrange added a commit that referenced this issue May 17, 2022
The main motivation of making these parameters configurable is to be
able to write time-adequate test cases for #286 issue, but they may be
useful in getting rid of #286 effect at all or in quantile time window
calibration.

After this patch, statistics summary quantile aging params
`age_bucket_count` and `max_age_time` [1] could be configured:

  crud.cfg{
      stats_quantile_age_bucket_count = 3,
      stats_quantile_max_age_time = 30,
  }

Only type validation is conducted in crud.cfg, every other validation is
performed by metrics itself.

1. https://www.tarantool.io/ru/doc/latest/book/monitoring/api_reference/#summary

Part of #286
DifferentialOrange added a commit that referenced this issue May 17, 2022
Metrics quantiles display `-nan` if there were no observations for
a whole age. Such behavior is expected and valid: for example, Grafana
should ignore such values and they will be displayed as `No data` for
a window when there wasn't any requests. On the other hand, getting
`-nan` as a `latency` in `crud.stats` is disappointing for a user since
it is rather useless without any historical data. This patch replaces
`-nan` latency value with total average.

Closes #286
DifferentialOrange added a commit that referenced this issue May 18, 2022
The main motivation of making these parameters configurable is to be
able to write time-adequate test cases for #286 issue, but they may be
useful in getting rid of #286 effect at all or in quantile time window
calibration.

After this patch, statistics summary quantile aging params
`age_bucket_count` and `max_age_time` [1] could be configured:

  crud.cfg{
      stats_quantile_age_bucket_count = 3,
      stats_quantile_max_age_time = 30,
  }

Only type validation is conducted in crud.cfg, every other validation is
performed by metrics itself.

1. https://www.tarantool.io/ru/doc/latest/book/monitoring/api_reference/#summary

Part of #286
DifferentialOrange added a commit that referenced this issue May 18, 2022
Add separate quantile (`latency_quantile_recent`) and average (
`latency_average`) fields to `crud.stats()` output. `latency` field and
tarantool/metrics output remains unchanged.

Before this patch, `latency` displayed `latency_quantile_recent` or
`latency_average` and there wasn't any was to see pre-computed average
if quantiles are enabled. But it may be useful if quantile is `nan`.

Quantiles may display `-nan` if there were no observations for a several
ages. Such behavior is expected [1] and valid: for example, Grafana
should ignore such values and they will be displayed as `No data` for
a window when there wasn't any requests.

1. tarantool/metrics#303

Closes #286
DifferentialOrange added a commit that referenced this issue May 18, 2022
Add separate quantile (`latency_quantile_recent`) and average (
`latency_average`) fields to `crud.stats()` output. `latency` field and
tarantool/metrics output remains unchanged.

Before this patch, `latency` displayed `latency_quantile_recent` or
`latency_average` and there wasn't any was to see pre-computed average
if quantiles are enabled. But it may be useful if quantile is `nan`.

Quantiles may display `-nan` if there were no observations for a several
ages. Such behavior is expected [1] and valid: for example, Grafana
should ignore such values and they will be displayed as `No data` for
a window when there wasn't any requests.

1. tarantool/metrics#303

Closes #286
DifferentialOrange added a commit that referenced this issue May 18, 2022
Add separate quantile (`latency_quantile_recent`) and average (
`latency_average`) fields to `crud.stats()` output. `latency` field and
tarantool/metrics output remains unchanged.

Before this patch, `latency` displayed `latency_quantile_recent` or
`latency_average` and there wasn't any was to see pre-computed average
if quantiles are enabled. But it may be useful if quantile is `nan`.

Quantiles may display `-nan` if there were no observations for a several
ages. Such behavior is expected [1] and valid: for example, Grafana
should ignore such values and they will be displayed as `No data` for
a window when there wasn't any requests.

1. tarantool/metrics#303

Closes #286
DifferentialOrange added a commit that referenced this issue May 18, 2022
The main motivation of making these parameters configurable is to be
able to write time-adequate test cases for #286 issue, but they may be
useful in getting rid of #286 effect at all or in quantile time window
calibration.

After this patch, statistics summary quantile aging params
`age_bucket_count` and `max_age_time` [1] could be configured:

  crud.cfg{
      stats_quantile_age_bucket_count = 3,
      stats_quantile_max_age_time = 30,
  }

Only type validation is conducted in crud.cfg, every other validation is
performed by metrics itself.

1. https://www.tarantool.io/ru/doc/latest/book/monitoring/api_reference/#summary

Part of #286
DifferentialOrange added a commit that referenced this issue May 18, 2022
Add separate quantile (`latency_quantile_recent`) and average (
`latency_average`) fields to `crud.stats()` output. `latency` field and
tarantool/metrics output remains unchanged.

Before this patch, `latency` displayed `latency_quantile_recent` or
`latency_average` and there wasn't any was to see pre-computed average
if quantiles are enabled. But it may be useful if quantile is `nan`.

Quantiles may display `-nan` if there were no observations for a several
ages. Such behavior is expected [1] and valid: for example, Grafana
should ignore such values and they will be displayed as `No data` for
a window when there wasn't any requests.

1. tarantool/metrics#303

Closes #286
DifferentialOrange added a commit that referenced this issue May 18, 2022
Add separate quantile (`latency_quantile_recent`) and average (
`latency_average`) fields to `crud.stats()` output. `latency` field and
tarantool/metrics output remains unchanged.

Before this patch, `latency` displayed `latency_quantile_recent` or
`latency_average` and there wasn't any was to see pre-computed average
if quantiles are enabled. But it may be useful if quantile is `nan`.

Quantiles may display `-nan` if there were no observations for a several
ages. Such behavior is expected [1] and valid: for example, Grafana
should ignore such values and they will be displayed as `No data` for
a window when there wasn't any requests.

1. tarantool/metrics#303

Closes #286
DifferentialOrange added a commit that referenced this issue May 19, 2022
Add separate quantile (`latency_quantile_recent`) and average (
`latency_average`) fields to `crud.stats()` output. `latency` field and
tarantool/metrics output remains unchanged.

Before this patch, `latency` displayed `latency_quantile_recent` or
`latency_average` and there wasn't any was to see pre-computed average
if quantiles are enabled. But it may be useful if quantile is `nan`.

Quantiles may display `-nan` if there were no observations for a several
ages. Such behavior is expected [1] and valid: for example, Grafana
should ignore such values and they will be displayed as `No data` for
a window when there wasn't any requests.

1. tarantool/metrics#303

Closes #286
DifferentialOrange added a commit that referenced this issue May 20, 2022
Add separate quantile (`latency_quantile_recent`) and average (
`latency_average`) fields to `crud.stats()` output. `latency` field and
tarantool/metrics output remains unchanged.

Before this patch, `latency` displayed `latency_quantile_recent` or
`latency_average` and there wasn't any was to see pre-computed average
if quantiles are enabled. But it may be useful if quantile is `nan`.

Quantiles may display `-nan` if there were no observations for a several
ages. Such behavior is expected [1] and valid: for example, Grafana
should ignore such values and they will be displayed as `No data` for
a window when there wasn't any requests.

1. tarantool/metrics#303

Closes #286
DifferentialOrange added a commit that referenced this issue May 20, 2022
Add separate quantile (`latency_quantile_recent`) and average (
`latency_average`) fields to `crud.stats()` output. `latency` field and
tarantool/metrics output remains unchanged.

Before this patch, `latency` displayed `latency_quantile_recent` or
`latency_average` and there wasn't any was to see pre-computed average
if quantiles are enabled. But it may be useful if quantile is `nan`.

Quantiles may display `-nan` if there were no observations for a several
ages. Such behavior is expected [1] and valid: for example, Grafana
should ignore such values and they will be displayed as `No data` for
a window when there wasn't any requests.

1. tarantool/metrics#303

Closes #286
DifferentialOrange added a commit that referenced this issue May 20, 2022
Add separate quantile (`latency_quantile_recent`) and average (
`latency_average`) fields to `crud.stats()` output. `latency` field and
tarantool/metrics output remains unchanged.

Before this patch, `latency` displayed `latency_quantile_recent` or
`latency_average` and there wasn't any was to see pre-computed average
if quantiles are enabled. But it may be useful if quantile is `nan`.

Quantiles may display `-nan` if there were no observations for a several
ages. Such behavior is expected [1] and valid: for example, Grafana
should ignore such values and they will be displayed as `No data` for
a window when there wasn't any requests.

1. tarantool/metrics#303

Closes #286
Totktonada pushed a commit that referenced this issue May 20, 2022
The main motivation of making these parameters configurable is to be
able to write time-adequate test cases for #286 issue, but they may be
useful in getting rid of #286 effect at all or in quantile time window
calibration.

After this patch, statistics summary quantile aging params
`age_bucket_count` and `max_age_time` [1] could be configured:

  crud.cfg{
      stats_quantile_age_bucket_count = 3,
      stats_quantile_max_age_time = 30,
  }

Only type validation is conducted in crud.cfg, every other validation is
performed by metrics itself.

1. https://www.tarantool.io/ru/doc/latest/book/monitoring/api_reference/#summary

Part of #286
Totktonada pushed a commit that referenced this issue May 20, 2022
Add separate quantile (`latency_quantile_recent`) and average (
`latency_average`) fields to `crud.stats()` output. `latency` field and
tarantool/metrics output remains unchanged.

Before this patch, `latency` displayed `latency_quantile_recent` or
`latency_average` and there wasn't any was to see pre-computed average
if quantiles are enabled. But it may be useful if quantile is `nan`.

Quantiles may display `-nan` if there were no observations for a several
ages. Such behavior is expected [1] and valid: for example, Grafana
should ignore such values and they will be displayed as `No data` for
a window when there wasn't any requests.

1. tarantool/metrics#303

Closes #286
DifferentialOrange added a commit that referenced this issue May 23, 2022
Overview

    This is a bugfix release. Several things related to crud
    statistics (0.11.0 and 0.11.1 release features) was improved or
    fixed.

Breaking changes

    There are no breaking changes in the release.

New features

    Make metrics quantile collector age params configurable (#286).

    Add separate `latency_average` and `latency_quantile_recent`
    fields to `crud.stats()` output (#286).

Bugfixes

    Preset `stats_quantile_tolerated_error` `crud.cfg` parameter is no
    more lost on configuration update (#284).
DifferentialOrange added a commit that referenced this issue May 23, 2022
Overview

    This is a bugfix release. Several things related to crud
    statistics (0.11.0 and 0.11.1 release features) was improved or
    fixed.

Breaking changes

    There are no breaking changes in the release.

New features

    Make metrics quantile collector age params configurable (#286).

    Add separate `latency_average` and `latency_quantile_recent`
    fields to `crud.stats()` output (#286).

Bugfixes

    Preset `stats_quantile_tolerated_error` `crud.cfg` parameter is no
    more lost on configuration update (#284).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants