プロメテウス学習シリーズ6:プロメテウスpromQLクエリ言語

 プロメテウスpromQLクエリ言語

プロメテウスはPromQL(プロメテウスのクエリ言語)と呼ばれる機能クエリ言語を提供され、ユーザーはリアルタイムかつ重合時系列データに選択することができます。式の結果は、発現ブラウザのプロメテウスにデータを表示するためにグラフィックとして、またはテーブルのいずれかとして表示、またはHTTP APIを介して外部のシステムを使用することができます。

準備

以下の私のプロフィールをここに、お問い合わせを行います

[ルート@ node00プロメテウス]#猫prometheus.yml 
#私のグローバル設定
 グローバル
  scrape_interval:15秒位ごとにこすり間隔を設定し15秒。デフォルトはあるごとに1 分。
  evaluation_intervalは:15秒位ごとにルール評価15秒。デフォルトでは あるごとに1 分。
  #1 scrape_timeoutを 設定グローバルな デフォルト(10秒)。

#1のAlertManagerの設定
警告:
  alertmanagers:
   - static_configs:
     - 対象: -のAlertManager:9093の

#ロードルールに一度、定期的に応じてそれらを評価するグローバルな evaluation_intervalは
rule_files:  - first_rules.yml 
  #は - second_rules.yml 

#正確に一つのエンドポイントを含むこすり構成はこすりする:
ここで#それは" sのプロメテウスそのもの。
scrape_configs: ジョブ名がされて追加として掻き取っいかなる時系列に`<JOB_NAME> =ラベル`仕事から この設定。
  - 職種名:プロメテウス

    に#のmetrics_pathのデフォルトは/メトリクス
    に#スキームのデフォルトはHTTP " 

    static_configs:
     -対象:[ ' localhostを:9090 ' ]
   - JOB_NAME:" ノード" 
    file_sd_configs:
     - REFRESH_INTERVAL:1メートル
      のファイル:
       - " /usr/local/prometheus/prometheus/conf/node*.yml " 
remote_write:
   - URL:" http:// localhostを:8086 / API / V1 /ウエディング/書き込みデシベル=プロメテウス?" 

remote_read:
   - URL:"http:// localhostを:8086 / API / V1 /ウエディング/読みデシベル=プロメテウス?" 


[ルート@ node00プロメテウス]#猫のconf /リンパ節転移dis.yml 
 - ターゲット: 
   - " 192.168.100.10:20001 
  ラベル:
    __datacenter__: DC0 
    __HOSTNAME__:node00 
    __businees_line__:" LINE_A " 
    __region_id__:" CN-北京" 
    __availability_zone__:" A " 
- ターゲット: 
   - " 192.168.100.11:20001 " 
  ラベル:
    __datacenter__:DC1 
    __HOSTNAME__:node01
    __businees_line__:" LINE_A " 
    __region_id__:" CN-北京" 
    __availability_zone__:" A " 
- ターゲット: 
   - " 192.168.100.12:20001 " 
  ラベル:
    __datacenter__:DC0 
    __HOSTNAME__:node02で
    __businees_line__:" line_c " 
    __region_id__:" CN-北京" 
    __availability_zone__:" B "

シンプルなタイミング問い合わせ

特定のMETRIC_NAMEへの直接アクセス

ノード#1におけるフォークの総数
node_forks_total 
次のように#の結果でした
 
 
素子
node_forks_total {インスタンス= "192.168.100.10:20001"、ジョブ= "ノード"} 201518
node_forks_total {インスタンス= "192.168.100.11:20001"、ジョブ= "ノード"} 23951
node_forks_total {インスタンス= "192.168.100.12:20001"、ジョブ= "ノード"} 24127
 

タグ付けされたクエリ

= {インスタンスnode_forks_total " 192.168.100.10:20001 " } 
次のように#の結果でした
素子
node_forks_total {インスタンス= "192.168.100.10:20001"、ジョブ= "ノード"} 201816

マルチラベルクエリ

= {インスタンスnode_forks_total " 192.168.100.10:20001 "、ジョブ= " ノード" } 

次のように#の結果でした
素子
node_forks_total {インスタンス= "192.168.100.10:20001"、ジョブ= "ノード"} 201932

2分のクエリタイミング値

node_forks_total {インスタンス= " 192.168.100.10:20001 "、ジョブ= " ノード" } [2メートル]

素子
node_forks_total {インスタンス= "192.168.100.10:20001"、ジョブ= "ノード"} 201932 1569492864.036 @
1569492879.036 @ 201932
1569492894.035 @ 201932
1569492909.036 @ 201932
1569492924.036 @ 201985
1569492939.036 @ 201989
1569492954.036 @ 201993

 定期的な試合

node_forks_total {インスタンス=〜" 192.168 *:20001 "、ジョブ= " ノード" }
素子
node_forks_total {インスタンス= "192.168.100.10:20001"、ジョブ= "ノード"} 202107
node_forks_total {インスタンス= "192.168.100.11:20001"、ジョブ= "ノード"} 24014
node_forks_total {インスタンス= "192.168.100.12:20001"、ジョブ= "ノード"} 24186

共通機能のクエリ

:公式によって提供される機能は、より具体的には、以下のアドレスを参照することができますhttps://prometheus.io/docs/prometheus/latest/querying/functions/

ここでは一般的に使用される機能の主なデモ。

激怒

怒っ率を計算するために使用されます。

ラベル、具体例としては仕事アイドル状態で特定、特定の周波数と速度CPUのCPUを介して、#クエリ
激怒(CPU node_cpu_seconds_total = { 0 、インスタンス= 192.168.100.10:20001 、ジョブ= ノード、MODE = " アイドル" } [1M])

素子
{CPU = "0"、インスタンス= "192.168.100.10:20001"、ジョブ= "ノード"、モード= "アイドル"} 0.9833988932595507

count_over_time

特定のタイミングデータ計算の数。

#番号と値取得周波数は、我々の収集間隔である15Sは、データポイントの1分は、4ビットであってもよいです。
count_over_time(node_boot_time_seconds [1メートル])

素子
{インスタンス= "192.168.100.10:20001"、ジョブ= "ノード"} 4
{インスタンス= "192.168.100.11:20001"、ジョブ= "ノード"} 4
{インスタンス= "192.168.100.12:20001"、ジョブ= "ノード"} 4

 

サブクエリ

 

#最後の10分、過去5分の値の分率。10メートル/ 1mが10の値の合計を収集します。
レート({node_cpu_seconds_total CPU = " 0 "、インスタンス= " 192.168.100.10:20001 "、仕事= " ノード"、MODE = " IDLE " } [5メートル])[10メートル:1M]
素子
{CPU = "0"、インスタンス= "192.168.100.10:20001"、ジョブ= "ノード"、モード= "アイドル"} 0.9865228543057867 1569494040 @
0.9862807017543735 1569494100 @
1569494160 @ 0.9861087231885309
1569494220 @ 0.9864946894550303
1569494280 @ 0.9863192502430038
1569494340 @ 0.9859649122807017
1569494400 @ 0.9859298245613708
1569494460 @ 0.9869122807017177
1569494520 @ 0.9867368421052672
1569494580 @ 0.987438596491273

 

複雑なクエリ

メモリの割合を使用して計算

node_memory_MemFree_bytes / node_memory_MemTotal_bytes * 100 

素子
{インスタンス= "192.168.100.10:20001"、ジョブ= "ノード"} 9.927579722322251
{インスタンス= "192.168.100.11:20001"、ジョブ= "ノード"} 59.740727403673034
{インスタンス= "192.168.100.12:20001"、ジョブ= "ノード"} 63.2080982675149

最初の2のすべてのインスタンスに使用されるメモリの割合(%)を取得します。

topk(2,node_memory_MemFree_bytes / node_memory_MemTotal_bytes  * 100 )
Element Value
{instance="192.168.100.12:20001",job="node"} 63.20129636298163
{instance="192.168.100.11:20001",job="node"} 59.50586164125955

实用查询样例

获取cpu核心个数

# 计算所有的实例cpu核心数
count by (instance) ( count by (instance,cpu) (node_cpu_seconds_total{mode="system"}) )
# 计算单个实例的
count by (instance) ( count by (instance,cpu) (node_cpu_seconds_total{mode="system",instance="192.168.100.11:20001"})

计算内存使用率

(1 - (node_memory_MemAvailable_bytes{instance=~"192.168.100.10:20001"} / (node_memory_MemTotal_bytes{instance=~"192.168.100.10:20001"})))* 100
Element Value
{instance="192.168.100.10:20001",job="node"} 87.09358620413717
 

计算根分区使用率

100 - ((node_filesystem_avail_bytes{instance="192.168.100.10:20001",mountpoint="/",fstype=~"ext4|xfs"} * 100) / node_filesystem_size_bytes {instance=~"192.168.100.10:20001",mountpoint="/",fstype=~"ext4|xfs"})
Element Value
{device="/dev/mapper/centos-root",fstype="xfs",instance="192.168.100.10:20001",job="node",mountpoint="/"} 4.175111443575972

 预测磁盘空间

 # 整体分为 2个部分, 中间用and分割, 前面部分计算根分区使用率大于85的, 后面计算根据近6小时的数据预测接下来24小时的磁盘可用空间是否小于0 。
(1- node_filesystem_avail_bytes{fstype=~"ext4|xfs",mountpoint="/"} / node_filesystem_size_bytes{fstype=~"ext4|xfs",mountpoint="/"}) * 100 >= 85 and (predict_linear(node_filesystem_avail_bytes[6h],3600 * 24) < 0)

 

おすすめ

転載: www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_liunx_63_prometheus_promql.html