series_rate_fl()
De functie series_rate_fl()
is een door de gebruiker gedefinieerde functie (UDF) die de gemiddelde snelheid van metrische toename per seconde berekent. De logica volgt de functie PromQL rate(). Deze moet worden gebruikt voor tijdreeksen van metrische tellergegevens die zijn opgenomen in uw cluster door het Prometheus-bewakingssysteem en worden opgehaald door series_metric_fl().
Syntax
T | invoke series_rate_fl(
[ n_bins [,
fix_reset ]])
T
is een tabel die wordt geretourneerd door series_metric_fl(). Het schema bevat (timestamp:dynamic, name:string, labels:string, value:dynamic)
.
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
n_bins | int |
Het aantal opslaglocaties om de kloof tussen de geëxtraheerde metrische waarden op te geven voor de berekening van de snelheid. De functie berekent het verschil tussen de huidige steekproef en de steekproef die eerder n_bins en deelt deze door het verschil van de respectieve tijdstempels in seconden. De standaardwaarde is één bin. De standaardinstellingen berekenen irate(), de promQL instantane rate-functie. | |
fix_reset | bool |
Hiermee bepaalt u of u moet controleren op het opnieuw instellen van tellers en deze moet worden gecorrigeerd, zoals de PromQL rate() -functie. De standaardwaarde is true . Stel deze in op false om redundante analyse op te slaan voor het geval u niet hoeft te controleren op opnieuw instellen. |
Functiedefinitie
U kunt de functie definiëren door de code in te sluiten als een door een query gedefinieerde functie of door deze als volgt te maken als een opgeslagen functie in uw database:
Definieer de functie met behulp van de volgende let-instructie. Er zijn geen machtigingen vereist.
Belangrijk
Een let-instructie kan niet zelfstandig worden uitgevoerd. Deze moet worden gevolgd door een tabellaire expressie-instructie. Zie Voorbeelden om een werkend voorbeeld van series_rate_fl()
uit te voeren.
let series_rate_fl=(tbl:(timestamp:dynamic, value:dynamic), n_bins:int=1, fix_reset:bool=true)
{
tbl
| where fix_reset // Prometheus counters can only go up
| mv-apply value to typeof(double) on
( extend correction = iff(value < prev(value), prev(value), 0.0) // if the value decreases we assume it was reset to 0, so add last value
| extend cum_correction = row_cumsum(correction)
| extend corrected_value = value + cum_correction
| summarize value = make_list(corrected_value))
| union (tbl | where not(fix_reset))
| extend timestampS = array_shift_right(timestamp, n_bins), valueS = array_shift_right(value, n_bins)
| extend dt = series_subtract(timestamp, timestampS)
| extend dt = series_divide(dt, 1e7) // converts from ticks to seconds
| extend dv = series_subtract(value, valueS)
| extend rate = series_divide(dv, dt)
| project-away dt, dv, timestampS, value, valueS
};
// Write your query to use the function here.
Voorbeelden
In de volgende voorbeelden wordt de operator invoke gebruikt om de functie uit te voeren.
De gemiddelde toename van metrische gegevens berekenen
Als u een door een query gedefinieerde functie wilt gebruiken, roept u deze aan na de definitie van de ingesloten functie.
let series_rate_fl=(tbl:(timestamp:dynamic, value:dynamic), n_bins:int=1, fix_reset:bool=true)
{
tbl
| where fix_reset // Prometheus counters can only go up
| mv-apply value to typeof(double) on
( extend correction = iff(value < prev(value), prev(value), 0.0) // if the value decreases we assume it was reset to 0, so add last value
| extend cum_correction = row_cumsum(correction)
| extend corrected_value = value + cum_correction
| summarize value = make_list(corrected_value))
| union (tbl | where not(fix_reset))
| extend timestampS = array_shift_right(timestamp, n_bins), valueS = array_shift_right(value, n_bins)
| extend dt = series_subtract(timestamp, timestampS)
| extend dt = series_divide(dt, 1e7) // converts from ticks to seconds
| extend dv = series_subtract(value, valueS)
| extend rate = series_divide(dv, dt)
| project-away dt, dv, timestampS, value, valueS
};
//
demo_prometheus
| invoke series_metric_fl('TimeStamp', 'Name', 'Labels', 'Val', 'writes', offset=now()-datetime(2020-12-08 00:00))
| invoke series_rate_fl(2)
| render timechart with(series=labels)
Uitvoer
Selecteert de hoofdschijf van twee hosts
In het volgende voorbeeld wordt de hoofdschijf van twee hosts geselecteerd en wordt ervan uitgegaan dat de functie al is geïnstalleerd. In dit voorbeeld wordt een alternatieve syntaxis voor direct aanroepen gebruikt, waarbij de invoertabel als eerste parameter wordt opgegeven:
Als u een door een query gedefinieerde functie wilt gebruiken, roept u deze aan na de definitie van de ingesloten functie.
let series_rate_fl=(tbl:(timestamp:dynamic, value:dynamic), n_bins:int=1, fix_reset:bool=true)
{
tbl
| where fix_reset // Prometheus counters can only go up
| mv-apply value to typeof(double) on
( extend correction = iff(value < prev(value), prev(value), 0.0) // if the value decreases we assume it was reset to 0, so add last value
| extend cum_correction = row_cumsum(correction)
| extend corrected_value = value + cum_correction
| summarize value = make_list(corrected_value))
| union (tbl | where not(fix_reset))
| extend timestampS = array_shift_right(timestamp, n_bins), valueS = array_shift_right(value, n_bins)
| extend dt = series_subtract(timestamp, timestampS)
| extend dt = series_divide(dt, 1e7) // converts from ticks to seconds
| extend dv = series_subtract(value, valueS)
| extend rate = series_divide(dv, dt)
| project-away dt, dv, timestampS, value, valueS
};
//
series_rate_fl(series_metric_fl(demo_prometheus, 'TimeStamp', 'Name', 'Labels', 'Val', 'writes', '"disk":"sda1"', lookback=2h, offset=now()-datetime(2020-12-08 00:00)), n_bins=10)
| render timechart with(series=labels)
Uitvoer
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor