다음을 통해 공유


series_metric_fl()

함수는 series_metric_fl()Prometheus 모니터링 시스템을 사용하여 클러스터에 수집된 일련의 메트릭을 선택하고 검색하는 UDF(사용자 정의 함수)입니다. 이 함수는 클러스터에 저장된 데이터가 Prometheus 데이터 모델에 따라 구조화되어 있다고 가정합니다. 특히 각 레코드에는 다음이 포함됩니다.

  • timestamp
  • 메트릭 이름
  • 메트릭 값
  • 레이블의 변수 집합("key":"value" 쌍)

Prometheus는 메트릭 이름과 고유한 레이블 집합으로 시계열을 정의합니다. 메트릭 이름 및 시계열 선택기(레이블 집합)를 지정하여 Prometheus Query Language(PromQL) 를 사용하여 시계열 집합을 검색할 수 있습니다.

Syntax

T | invoke series_metric_fl(, timestamp_col, name_col, labels_col, value_col, metric_name, labels_selectorlookback,오프셋)

구문 규칙에 대해 자세히 알아봅니다.

매개 변수

이름 형식 필수 Description
timestamp_col string ✔️ 타임스탬프를 포함하는 열의 이름입니다.
name_col string ✔️ 메트릭 이름을 포함하는 열의 이름입니다.
labels_col string ✔️ 레이블 사전이 포함된 열의 이름입니다.
value_col string ✔️ 메트릭 값이 포함된 열의 이름입니다.
metric_name string ✔️ 검색할 메트릭 시계열입니다.
labels_selector string PromQL과 유사한 시계열 선택기 문자열입니다. 쌍 목록을 "key":"value" 포함하는 문자열입니다(예 '"key1":"val1","key2":"val2"': ). 기본값은 빈 문자열이며 필터링이 없음을 의미합니다. 정규식은 지원되지 않습니다.
lookback timespan PromQL과 유사하게 검색할 범위 벡터입니다. 기본값은 10분입니다.
offset datetime PromQL과 유사하게 검색할 현재 시간에서 다시 오프셋합니다. 데이터는 ago(offset)-lookback 에서 ago(offset)로 검색됩니다. 기본값은 0입니다. 즉, 데이터가 최대 로 now()검색됩니다.

함수 정의

코드를 쿼리 정의 함수로 포함하거나 다음과 같이 데이터베이스에 저장된 함수로 만들어 함수를 정의할 수 있습니다.

다음 let 문을 사용하여 함수를 정의합니다. 사용 권한이 필요 없습니다.

중요

let 문은 자체적으로 실행할 수 없습니다. 테이블 형식 식 문 뒤에 이어서야 합니다. 의 작업 예제 series_metric_fl()를 실행하려면 예제를 참조하세요.

let series_metric_fl=(metrics_tbl:(*), timestamp_col:string, name_col:string, labels_col:string, value_col:string, metric_name:string, labels_selector:string='', lookback:timespan=timespan(10m), offset:timespan=timespan(0))
{
    let selector_d=iff(labels_selector == '', dynamic(['']), split(labels_selector, ','));
    let etime = ago(offset);
    let stime = etime - lookback;
    metrics_tbl
    | extend timestamp = column_ifexists(timestamp_col, datetime(null)), name = column_ifexists(name_col, ''), labels = column_ifexists(labels_col, dynamic(null)), value = column_ifexists(value_col, 0)
    | extend labels = dynamic_to_json(labels)       //  convert to string and sort by key
    | where name == metric_name and timestamp between(stime..etime)
    | order by timestamp asc
    | summarize timestamp = make_list(timestamp), value=make_list(value) by name, labels
    | where labels has_all (selector_d)
};
// Write your query to use the function here.

예제

다음 예제에서는 invoke 연산자를 사용하여 함수를 실행합니다.

선택기 지정

쿼리 정의 함수를 사용하려면 포함된 함수 정의 다음에 호출합니다.

let series_metric_fl=(metrics_tbl:(*), timestamp_col:string, name_col:string, labels_col:string, value_col:string, metric_name:string, labels_selector:string='', lookback:timespan=timespan(10m), offset:timespan=timespan(0))
{
    let selector_d=iff(labels_selector == '', dynamic(['']), split(labels_selector, ','));
    let etime = ago(offset);
    let stime = etime - lookback;
    metrics_tbl
    | extend timestamp = column_ifexists(timestamp_col, datetime(null)), name = column_ifexists(name_col, ''), labels = column_ifexists(labels_col, dynamic(null)), value = column_ifexists(value_col, 0)
    | extend labels = dynamic_to_json(labels)       //  convert to string and sort by key
    | where name == metric_name and timestamp between(stime..etime)
    | order by timestamp asc
    | summarize timestamp = make_list(timestamp), value=make_list(value) by name, labels
    | where labels has_all (selector_d)
};
demo_prometheus
| invoke series_metric_fl('TimeStamp', 'Name', 'Labels', 'Val', 'writes', '"disk":"sda1","host":"aks-agentpool-88086459-vmss000001"', offset=now()-datetime(2020-12-08 00:00))
| render timechart with(series=labels)

출력

10분 이상 디스크 쓰기 메트릭을 보여 주는 그래프입니다.

선택기를 지정하지 않고

다음 예제에서는 선택기를 지정하지 않으므로 모든 '쓰기' 메트릭이 선택됩니다. 이 예제에서는 함수가 이미 설치되어 있다고 가정하고 대체 직접 호출 구문을 사용하여 입력 테이블을 첫 번째 매개 변수로 지정합니다.

쿼리 정의 함수를 사용하려면 포함된 함수 정의 다음에 호출합니다.

let series_metric_fl=(metrics_tbl:(*), timestamp_col:string, name_col:string, labels_col:string, value_col:string, metric_name:string, labels_selector:string='', lookback:timespan=timespan(10m), offset:timespan=timespan(0))
{
    let selector_d=iff(labels_selector == '', dynamic(['']), split(labels_selector, ','));
    let etime = ago(offset);
    let stime = etime - lookback;
    metrics_tbl
    | extend timestamp = column_ifexists(timestamp_col, datetime(null)), name = column_ifexists(name_col, ''), labels = column_ifexists(labels_col, dynamic(null)), value = column_ifexists(value_col, 0)
    | extend labels = dynamic_to_json(labels)       //  convert to string and sort by key
    | where name == metric_name and timestamp between(stime..etime)
    | order by timestamp asc
    | summarize timestamp = make_list(timestamp), value=make_list(value) by name, labels
    | where labels has_all (selector_d)
};
series_metric_fl(demo_prometheus, 'TimeStamp', 'Name', 'Labels', 'Val', 'writes', offset=now()-datetime(2020-12-08 00:00))
| render timechart with(series=labels, ysplit=axes)

출력

10분 이상 모든 디스크에 대한 디스크 쓰기 메트릭을 보여 주는 그래프입니다.