Delen via


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

Grafiek met de snelheid per seconde van de metrische gegevens voor schijfschrijfbewerkingen voor alle schijven.

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

Grafiek met de snelheid per seconde van de metrische schrijfgegevens van de hoofdschijf in de afgelopen twee uur met een tussenruimte van 10 bins.