プロメテウス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)