PromSqlの書き方の詳細


一:紹介
PromSqlはPrometheusのデータベースクエリー構文であり、監視指標の値を簡単に検索し、数学的な演算を行うことで、データの統計を迅速かつ容易に行い、アラートしきい値を設定することができます.また、Promsqlクエリーはタイミングデータベースであり、履歴データをクエリーしてもすぐであり、zabbixに比べて優れています.
二:Promsql公式ドキュメント
公式サイト
公式の例
3:エクスプレッション言語データ型(Expression language data types)
(1)文字列額面(String literals):文字列の数値、例は以下の通り
"this is a string"
'these are unescaped: 
\\ \t' `these are not unescaped:
' " \t`

(2)浮動小数点型数値(Float literals):つまり、私たちがよく言う小数点、例えば
3.14

(3)ベクトルセレクタ(Instant vector selectors)
http_requests_total    #   /  
http_requests_total{job="prometheus",group="canary"}  #         

次の比較関係が含まれています
  • = : Select labels that are exactly equal to the provided string.——等しい
  • != : Select labels that are not equal to the provided string.——等しくない
  • =~ : Select labels that regex-match the provided string. ——正則マッチング
  • !~ : Select labels that do not regex-match the provided string. —— 正則不整合
  • 例:
    http_requests_total{environment=~"staging|testing|development",method!="GET"}
    {job=~".*"} # Bad!

    このブログのアドレス:https://blog.csdn.net/knight_zhou/article/details/104422672
    (4)タイムセレクタ
  • s-seconds(秒)
  • m-minutes(分)
  • h-hours(時間)
  • d-days(日)
  • w-weeks(週)
  • y-years(年)
  • 例:
    http_requests_total{job="prometheus"}[5m]  # 5     

    四PromSql常用関数
    (1)絶対値をとる(abs関数)
    go_gc_duration_seconds{quantile="0"}

    (2)上向き整列(ceil関数)
    ceil(go_gc_duration_seconds{quantile="0"})

    (3)ceil関数とは反対に下向きに整列(floor関数)する
    floor(go_gc_duration_seconds{quantile="0"})

    (4)四捨五入(round関数)
    round(go_gc_duration_seconds{quantile="0"})

    (5)sum()関数:すべてのvalueを見つけた値を求める
     sum(go_gc_duration_seconds_count)

    (6)avg()関数:平均値を求める
    avg(go_gc_duration_seconds_count)

    (7)irate()関数:統計平均レート
    ##       
    100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100) 

    (8)rate()関数:統計レート
    rate(v range-vector)関数、入力:範囲ベクトル、出力:key:value=メトリック指標なし、ラベルリスト:(last値-first値)/時間差のみ.
    rate(mysql_global_status_questions[2m])

    注意:irateは急速に変化するカウンタ(counter)に適しており、rateは緩やかに変化するカウンタ(counter)に適しています.
    (9)by(ラベル名)
    avg(go_gc_duration_seconds_count) by (instance)   # Element    by     

    (10)delta関数delta(v range-vector)関数は、1つの範囲ベクトルvの最初の要素と最後の要素との差を算出する.戻り値:key:value=メトリック指標:差分値、mysqlの遅いクエリー5分などの新規数を示す式の例.
    delta(mysql_global_status_slow_queries{}[5m])

    五:PromSql演算
    プラス(+)マイナス(-)乗算(*)除算(/)
    たとえば、メモリ使用率の計算
    ((node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Buffers_bytes - node_memory_Cached_bytes) / (node_memory_MemTotal_bytes)) * 100

     
    六:Promsql書き方の例
    1.cpuの個数を計算する
    count (node_cpu_seconds_total) by (instance)

    2.判断負荷
    node_load5 > 5