PromQL 연산자

PromQL 연산자

시계열에 따라 검색어 및 필터보다 편리 PromQL를 사용하는 것 외에도, PromQL 풍부한 연산자를 지원, 사용자는 차의 이벤트 처리의 또 다른 시퀀스에 대한 이러한 연산자를 사용할 수있다. 이러한 연산자는 다음과 같습니다 수학, 논리 연산자, 부울 연산자 등을.

수학

예를 들어, 우리가 node_memory_free_bytes_total 지표를 통해 사용할 수있는 현재 호스트 메모리 공간을 얻을 수의 샘플 단위는 바이트입니다. 클라이언트가 데이터에 응답 단위로 MB의 사용을 필요로하는 경우 즉, 그것은 단지 수행 할 수 단위 변환의 시계열의 쿼리 샘플 값으로해야합니다 :

node_memory_free_bytes_total / ( 1,024 * 1,024 )

node_memory_free_bytes_total表达式会查询出所有满足表达式条件的时间序列,在上一小节中我们称该表达式为瞬时向量表达式,而返回的结果成为瞬时向量。

순간 벡터 및 스칼라 사이의 산술 연산은, 수학 연산자는 회전 범위 순간 벡터의 각 샘플 값의 시계열의 새로운 세트를 획득 할 때.

벡터 및 벡터 과도 간의 수학적 연산을 수행 할 때 그 순간 인 경우, 처리는 상대적으로 복잡 할 것이다. 우리가 node_disk_bytes_written 및 node_disk_bytes_read 따라 디스크 IO 호스트의 총량을 받기를 원한다면 예를 들어, 다음과 같은 표현을 사용할 수 있습니다 :

node_disk_bytes_written + node_disk_bytes_read

이 표현은 그것이 작동하는 방법이다? 일치하는 다음 폐기 요소를 찾을 수없는 경우, 좌회전 및 계산을 벡터 요소의 일치 한 벡터 요소의 (라벨 정확히) 권리를 찾을 수 있습니다. 동시에 새로운 시계열에서 이름 인덱스를 포함하지 않습니다. 다음과 같이 표현의 예는 결과를 반환합니다 :

{DEVICE = " SDA " 예 = " 로컬 호스트 : 9100 " , 작업 = " node_exporter " } => 1634967552 @ 1518146427.807 + 864,551,424 @ 1518146427.807 
{기기 = " SDB " 예 = " 로컬 호스트 : 9100 " , 작업 = " node_exporter " } => 0 @ 1518146427.807 + 1,744,384 @ 1518146427.807

PromQL 모든 수학 연산자는 다음과 같습니다 지원

  • + (부기)
  • - (뺄셈)
  • * (곱셈)
  • / (부)
  • % (나머지)
  • ^ (지수화)

부울 필터링 시계열

상기 사용자는 시계열의 일치 모드 PromQL 피쳐 사이즈의 태그에 의해 조회 될 수있다. 부울 연산 및 지원 시계열 필터의 시계열 시료에 따른 유저.

예를 들어, 수학 연산자에 의해 우리가 쉽게 현재의 모든 호스트 노드의 메모리 사용량을 계산할 수 있습니다 :

(node_memory_bytes_total - node_memory_free_bytes_total) / node_memory_bytes_total

그리고 때 문제 해결 시스템 관리자는 현재 메모리 사용량이 호스트 그것의 95 %를 초과 알고 할 수 있습니다? 당신은 쉽게 결과에 대한 액세스가 부울 연산자를 사용하여 얻을 수 있습니다 :

(node_memory_bytes_total - node_memory_free_bytes_total) / node_memory_bytes_total> 0.95

비교가 유지되는 순간에 해당하는 경우 벡터 및 스칼라 부울 연산은 PromQL 순차적 별도로 버려, 벡터 내의 모든 샘플의 시계열 값을 비교.

동일한 기본 일치 모드 다음 순간 벡터와 순간 벡터 직접 부울 연산, : 왼쪽 벡터 요소의 일치와 적절한 조치를 찾기 위해 설정 (라벨 정확히) 일치하는 항목이없는 경우 벡터 요소의 권리, 요소가 삭제됩니다.?.

현재, 프로 메테우스는 다음과 같이 다음과 같은 부울 연산자는 지원합니다

  • == (같음)
  • != (같지 않음)
  • > (보다 큼)
  • < (미만)
  • >= (또는의 이상)
  • <= (또는 이하)

부울 연산자 수정 변경 동작을 사용 BOOL

부울 연산자는 기본 행동 시계열 데이터는 필터링됩니다. 우리가해야 할 수도 있습니다 다른 경우에는 실제 부울 결과입니다. 예를 들어,이 모듈은 HTTP의 양이> = 1000, 1000를 요청 여부를 알 필요가보다 크거나 같은 반환 값이 1 (참) 그렇지 않은 경우 0 (거짓)의 경우. 그럼 당신은 부울 작업 부울 기본 동작을 변경하는 수정을 사용할 수 있습니다. 예를 들면 :

http_requests_total> BOOL  1,000

벡터는 0 또는 1의 각 시료를 순차적으로 순시 스칼라 데이터의 시계열을 필터링하지 않는 부울 연산을 수정 bool에 사용할 수 있지만, 직접 비교 결과 후. 새로운 시계열을 형성한다.

http_requests_total {코드 = " 200 " , 핸들러 = " 쿼리 " 예 = " 로컬 호스트 : 9090 " , 작업 = " 프로 메테우스 " , 방법 = " " }   1 
http_requests_total {코드 = " 200 " , 핸들러 = " query_range " 예 = " 로컬 호스트 : 9090 " , 작업 = " 프로 메테우스 " , 방법 = " " }   0

또한 두 개의 스칼라 사이에 부울 연산을 사용하는 경우, 당신은 수정 BOOL을 사용해야합니다

2 == BOOL  2 # 1 결과

 

사용 설정 운영

시계열의 복수를 포함하는 세트를 획득 할 수있는 일시적 발현 벡터를 이용하여, 우리는 순간 벡터를 호출한다. 이것은 순간 벡터 설정 동작에 의해 두 개의 벡터 사이의 순간 동작에 대응하는 설정 될 수있다. 현재, 프로 메테우스는 사업자의 다음 세트를 지원합니다 :

  • and (그리고)
  • or (또는)
  • unless (별도)

vector1 및 vector2는  새로운 벡터 vector1 조성물로 구성되어 생성합니다. 벡터는 완전 구성 요소와 일치 vector1 vector2를 포함한다.

vector1 또는 vector2는  ? 샘플 모든 데이터를 포함하는 새 벡터를 생성합니다 및 샘플 데이터는 vector1 vector2에 vector1에 일치하지 않습니다.

vector1의 vector2이하지 않는  새로운 벡터를 생산 요소에 의해 새로운 벡터 요소는 vector1 vector2 구성과 일치하지 않습니다.

연산자 우선 순위

표현의 복잡한 유형의 경우, 우리는 산술 연산의 운영 우선 순위를 이해할 필요가있다

예를 들어, 쿼리 호스트 CPU 사용률, 당신은 표현을 사용할 수 있습니다 :

100 * ( 1 - 평균 (내고 (node_cpu {MODE = ' 대기 ' }까지 [5m])) (작업))

其中irate是PromQL中的内置函数,用于计算区间向量中时间序列每秒的即时增长率。关于内置函数的部分,会在下一节详细介绍。

우선 순위의 내림차순으로 PromQL 연산자 :

  1. ^
  2. *, /, %
  3. +, -
  4. ==, !=, <=, <, >=, >
  5. and, unless
  6. or

자세한 매치 모드

일치하는 다음 폐기 요소를 찾을 수없는 경우, 왼쪽 및 계산을 (정확히 라벨) 벡터 요소의 일치 한 벡터 요소의 권리를 찾기 기능 : 벡터 및 벡터 연산 사이에서 작동 할 때 기본 일치 규칙을 기반으로합니다.

다음 PromQL 두 개의 전형적인 패턴 매칭에 대하여 설명한다 : 대부분의 온 (일대일), 하나 (일대일 대 다) 또는 다수 (일대 다).

하나 개의 일치

독특한 샘플 값이 일치 (라벨 정확하게)를 비교하고 찾기 위해 인수 과도 발현 벡터 연산자의 양쪽에서 하나? 매치 모드에서 하나. 기본적으로 표현식을 사용 :

vector1 < 조작 > vector2

운영자 표현의 양쪽에서 일치하지 않는 경우 라벨은 음의 동작을 수정하기 일치 (레이블 목록) 또는 무시 (레이블 목록)에 사용할 수있다. 사용 ignoreing는 경기의 몇 가지 메모를 무시할 수 있습니다. 그리고 노트에 정의 된 특정 내 행동에 일치하는 수단.

<벡터 EXPR> <빈 조합> 무시 (<라벨 목록>) <벡터 EXPR> 
<벡터 EXPR> <빈 조합>에서 (<라벨 목록>) <벡터 EXPR>

예를 들어, 샘플이 존재하는 경우 :

method_code : http_errors : rate5m {METHOD = " 얻을 " 코드 =를 " 500 " }   24 
method_code : http_errors : rate5m {있어서 = " 얻을 " 코드 = " 404 " }   30 
method_code : http_errors : rate5m {있어서 = " 넣어 " , 코드 = " 501 " }   3 
method_code : http_errors : rate5m 방법 { = " 포스트 " 코드 = " 500 " } 6 
method_code : http_errors :rate5m 방법 {= " 포스트 " 코드 = " 404 " } 21 
에있어서 http_requests : rate5m {있어서 = " 얻을 " }   (600) 
에있어서 http_requests : rate5m {있어서 = " " }   34 
에있어서 http_requests : rate5m {있어서 = " 포스트 " } (120)

 

사용 PromQL 표현 :

method_code : http_errors : {rate5m 코드 = " 500 " } / 무시 (코드)에있어서 http_requests : rate5m

모든 요청의 비율 마지막 다섯 분 HTTP 요청 상태 코드 (500)의 표현으로 돌아갑니다. 어떤이 (코드) 무시하면, 운영자의 측면에서 과도 표현은 라벨 동일한 벡터가 어떤 경기를 찾을 수 없습니다 반환하지 않습니다.

다음과 같이 따라서 결과는 다음과 같습니다

{METHOD = " 얻을 " }   0.04             //   600분의 24 
{= 방법 " 포스트 " } 0.05             //    120분의 6

방법을 넣어와 델은의? 샘플? 없음 일치하는 항목이 있기 때문에, 그것은 그들의 결과에 나타나지 않습니다.

그리고 대다

그리고 대다 매칭 모드의 두 종류가 일치하는 요소의 복수의 각각의 벡터 요소의 "A"측이 될 수있다 "다"측을 말한다. 이 경우 그룹 수정을 사용해야합니다 group_left 또는 group_right를 ( "다"역할의 역할) 높은 기반을 가지고있는 벡터 결정합니다.

<벡터 EXPR> <빈 조합> 무시 (<라벨 목록>) group_left (<라벨 목록>) <벡터 EXPR> 
<벡터 EXPR> <빈 조합> 무시 (<라벨 목록>) group_right (<라벨 목록>) <벡터 EXPR> 
<벡터 EXPR> <빈 조합>에서 (<라벨 목록>) group_left (<라벨 목록>) <벡터 EXPR> 
<벡터 EXPR> <빈 조합>에서 (<라벨 목록>) group_right (< 라벨 목록>) <벡터 EXPR>

그리고 다 대다 모드 불일치 태그 벡터 표현을 반환 모두 운영자의 경우에 있어야합니다. 무시 및 사용에 제외 할 필요가 또는 수정이 일치하는 태그 목록을 정의.

예를 들어, 표현식을 사용 :

method_code : http_errors : rate5m / 무시 (코드) group_left 방법 : http_requests : rate5m

표현은, 왼쪽 벡터 두 개의 탭 방법과 코드가 포함되어 있습니다. 그리고 바로 벡터가 하나의 레이블 방법을 포함, 일치하는 태그가 코드 일치를 무시하고 정의를 사용하는 것이 필요하다. 매칭 태그를 형성 한 후, 오른쪽 벡터 요소는 요소 벡터의 복수의 매칭 될 수있다 왼쪽 한 많은 일치 발현 양상은, 수정 group_left 좌측 기저 벡터가 더있는 특정 그룹의 사용을 필요로하므로.method_code:http_errors:rate5mmethod:http_requests:rate5m

다음 최종 연산 결과이다 :

{METHOD = " 얻을 " 코드 = " 500 " }   0.04             //   600분의 24 
{METHOD = " 얻을 " 코드 = " 404 " }   0.05             //   600분의 30 
{METHOD = " 포스트 " 코드 = " 500 " } 0.05             //    120분의 6 
{METHOD = " 포스트 " 코드 = " 404 " } 0.175            //   120분의 21

알림 : 그룹 수정은 비교 및 ​​수학 연산자를 사용할 수있다. 논리 연산과, 언급하지 않는 한, 오른쪽 벡터의 모든 요소와 일치하는 경우에만 작동 또는 기본.

추천

출처www.cnblogs.com/twobrother/p/11937743.html