日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

开源监控Prometheus介绍,安装,配置,使用详解

發布時間:2024/3/13 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 开源监控Prometheus介绍,安装,配置,使用详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

介紹

什么是Prometheus?

Prometheus是一個開源監控系統,前身是SoundCloud的告警插件。從2012年開始,Prometheus逐漸被大量公司使用。該項目的社區也便躍起來,收到越來越的貢獻。在2016年繼Kurberntes之后,Prometheus加入了Cloud Native Computing Foundation。

特征

  • 多維度數據模型
  • 不依賴分布式存儲,單個服務器節點是自主的
  • 以HTTP方式,通過pull模型拉去時間序列數據
  • 靈活的查詢語言
  • 也通過中間網關支持push模型
  • 通過服務發現或者靜態配置,來發現目標服務對象
  • 支持多種多樣的圖表和界面展示,prometheus和grafana是部署監控的最佳實踐
  • 組件

    Prometheus生態包括了很多組件,它們中的一些是可選的:

  • 主服務Prometheus Server負責抓取和存儲時間序列數據
  • 客戶庫負責檢測應用程序代碼
  • 支持短生命周期的PUSH網關
  • 基于Rails/SQL儀表盤構建器的GUI
  • 多種導出工具,可以支持Prometheus存儲數據轉化為HAProxy、StatsD、Graphite等工具所需要的
  • 數據存儲格式
  • 警告管理器
  • 命令行查詢工具
  • 其他各種支撐工具
  • 多數Prometheus組件是Go語言寫的,這使得這些組件很容易編譯和部署。

    構架

    下面這張圖說明了Prometheus的整體架構,以及生態中的一些組件作用:

    Prometheus服務,可以直接通過目標拉取數據,或者間接地通過中間網關拉取數據。它在本地存儲抓取的所有數據,并通過一定規則進行清理和整理數據,并把得到的結果存儲到新的時間序列中,PromQL和其他API可視化地展示收集的數據

    適用場景

    Prometheus在記錄純數字時間序列方面表現非常好。它既適用于面向服務器等硬件指標的監控,也適用于高動態的面向服務架構的監控。對于現在流行的微服務,Prometheus的多維度數據收集和數據篩選查詢語言也是非常的強大。

    Prometheus是為服務的可靠性而設計的,當服務出現故障時,它可以使你快速定位和診斷問題。它的搭建過程對硬件和服務沒有很強的依賴關系。

    不適用場景

    Prometheus,它的價值在于可靠性,甚至在很惡劣的環境下,你都可以隨時訪問它和查看系統服務各種指標的統計信息。 如果你對統計數據需要100%的精確,它并不適用,例如:它不適用于實時計費系統


    安裝

    使用預編譯二進制文件
    我們為Prometheus大多數的官方組件,提供了預編譯二進制文件。可用版本下載列表
    源碼安裝
    如果要從源碼安裝Prometheus的官方組件,可以查看各個項目源碼目錄下的Makefile
    注意點:在web上的文檔指向最新的穩定版(不包括預發布版)。下一個版本指向master分支還沒有發布的版本

    Docker安裝

    Docker安裝
    所有Prometheus服務的Docker鏡像在官方組織prom下,都是可用的

    在Docker上運行Prometheus服務,只需要簡單地執行docker run -p 9090:9090 prom/prometheus命令行即可。這條命令會啟動Prometheus服務,使用的是默認配置文件,并對外界暴露9090端口

    Prometheus鏡像使用docker中的volumn卷存儲實際度量指標。在生產環境上使用容器卷模式, 可以在Prometheus更新和升級時輕松管理Prometheus數據, 這種使用docker volumn卷方式存儲數據,是被docker官方強烈推薦的.

    通過幾個選項,可以達到使用自己的配置的目的。下面有兩個例子。

    卷&綁定掛載
    在運行Prometheus服務的主機上,做一個本地到docker容器的配置文件關系映射。

    docker run -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

    或者為這個配置文件使用一個獨立的volumn

    docker run -p 9090:9090 -v /prometheus-data
    prom/prometheus -config.file=/prometheus-data/prometheus.yml

    自定義鏡像

    為了避免在主機上與docker映射配置文件,我們可以直接將配置文件拷貝到docker鏡像中。如果Prometheus配置是靜態的,并且在所有服務器上的配置相同,這種把配置文件直接拷貝到鏡像中的方式是非常好的。

    例如:利用Dockerfile創建一個Prometheus配置目錄, Dockerfile應該這樣寫:

    FROM prom/prometheus
    ADD prometheus.yml /etc/prometheus/

    然后編譯和運行它:

    docker build -t my-prometheus .
    docker run -p 9090:9090 my-prometheus

    一個更高級的選項是可以通過一些工具動態地渲染配置,甚至后臺定期地更新配置

    使用配置管理系統
    如果你喜歡使用配置管理系統,你可能對下面地第三方庫感興趣:
    Ansible:

    • griggheo/ansible-prometheus
    • William-Yeh/ansible-prometheus

    Chef:

    • rayrod2030/chef-prometheus

    SaltStack:

    • bechtoldt/saltstack-prometheus-formula

    啟動

    入門教程

    本篇是一篇hello,world風格的入門指南,使用一個簡單的例子,向大家演示怎么樣安裝、配置和使用Prometheus。你可以下載和本地運行Prometheus服務,通過配置文件收集Prometheus服務自己產生的數據,并在這些收集數據的基礎上,進行查詢、制定規則和圖表化顯示所關心的數據

    下載和運行Prometheus

    tar xvfz prometheus-*.tar.gz

    cd prometheus-*

    在運行Prometheus服務之前,我們需要指定一個該服務運行所需要的配置文件

    配置Prometheus服務監控本身
    Prometheus通過Http方式拉取目標機上的度量指標。Prometheus服務也暴露自己運行所產生的數據,它能夠抓取和監控自己的健康狀況。

    實際上,Prometheus服務收集自己運行所產生的時間序列數據,是沒有什么意義的。但是它是一個非常好的入門級教程。保存一下的Prometheus配置到文件中,并自定義命名該文件名,如:prometheus.yml

    global:scrape_interval: 15s # By default, scrape targets every 15 seconds.# Attach these labels to any time series or alerts when communicating with# external systems (federation, remote storage, Alertmanager).external_labels:monitor: 'codelab-monitor'# A scrape configuration containing exactly one endpoint to scrape: # Here its Prometheus itself. scrape_configs:# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.- job_name: 'prometheus'# Override the global default and scrape targets from this job every 5 seconds.scrape_interval: 5sstatic_configs:- targets: ['localhost:9090']

    一個完整的配置選項,可以查看文件文檔

    啟動Prometheus服務

    cd到Prometheus服務目錄,并指定剛剛自定義好的配置文件,并啟動Prometheus服務, 如下所示:

    start Prometheus.

    By default, Prometheus stores its database in ./data (flag -storage.local.path).

    ./prometheus -config.file={$dir}/prometheus.yml # $dir = absolutely/relative path

    Prometheus服務啟動成功后,然后再打開瀏覽器在頁面上數據http://localhost:9090. 服務運行幾秒后,會開始收集自身的時間序列數據

    你也可以通過在瀏覽器輸入http://localhost:9090/metrics, 直接查看Prometheus服務收集到的自身數據

    Prometheus服務執行的操作系統線程數量由GOMAXPROCS環境變量控制。從Go 1.5開始,默認值是可用的CPUs數量

    盲目地設置GOMAXPROCS到一個比較高德值,有可能會適得其反。見Go FAQs

    注意:Prometheus服務默認需要3GB的內存代銷。如果你的機器內存比較小, 你可以調整Prometheus服務使用更少的內存。詳細見內存使用文檔

    使用表達式瀏覽器

    我們試著查看一些Prometheus服務自身產生的數據。為了使用Prometheus內置表達式瀏覽器,可以在瀏覽器中數據http://localhost:9090/graph, 選擇"Console"視圖,同一層級還有"Graph"tab。

    如果你可以從http://localhost:9090/metrics查看到收集的度量指標數據,那么其中有一個指標數據名稱為prometheus_target_interval_length_seconds(兩次抓取數據之間的時間差)可以被提取出來,可以在表達式控制框中輸入:

    prometheus_target_interval_length_seconds

    它應該會返回帶有prometheus_target_interval_length_seconds度量指標的許多時間序列數據,只是帶有不能標簽, 這些標簽有不同的延遲百分比和目標群組之間的間隔。

    如果我們僅僅對p99延遲感興趣,我們使用下面的查詢表達式收集該信息

    prometheus_target_interval_length_seconds{quantile=“0.99”}

    為了統計時間序列數據記錄的總數量,你可以寫:

    count(prometheus_target_interval_length_seconds)
    更多的表達式語言,詳見表達式語言文檔

    使用圖形界面

    使用http://localhost:9090/graph鏈接,查看圖表"Graph"。
    例如:輸入下面的表達式,繪制在Prometheus服務中每秒存儲的速率.

    rate(prometheus_local_storage_chunk_ops_total[1m])

    啟動一些樣本目標機

    我們更感興趣的是Prometheus服務抓取其他目標機的數據采樣,并非自己的時間序列數據。Go客戶庫有一個例子,它會產生一些自己造的RPC延遲。啟動三個帶有不同的延時版本。

    首先需要確保你有Go的環境

    下載Go的Prometheus客戶端,并運行下面三個服務:

    # Fetch the client library code and compile example. git clone https://github.com/prometheus/client_golang.git cd client_golang/examples/random go get -d go build# Start 3 example targets in separate terminals: ./random -listen-address=:8080 ./random -listen-address=:8081 ./random -listen-address=:8082

    你現在應該瀏覽器輸入http://localhost:8080/metrics, http://localhost:8081/metrics, and http://localhost:8082/metrics, 會看到這些服務所產生的度量指標數據.

    配置Prometheus服務,監聽樣本目標實例

    現在我們將配置Prometheus服務,收集這三個例子的度量指標數據。我們把這三個服務實例命名為一個任務稱為example-random, 并把8080端口服務和8081端口服務作為生產目標group,8082端口成為canary group。 為了在Prometheus服務中建模這個,我們需要添加兩個群組到這個任務中,增加一些標簽到不同的目標群組中。在這個例子中,我們會增加group="production"標簽到帶個目標組中,另外一個則是group=“canary”

    為了達到這個目的,在prometheus.yml配置文件中,增加下面任務定義到scrape_config區域中, 并重啟Prometheus服務:

    scrape_configs:- job_name: 'example-random'# Override the global default and scrape targets from this job every 5 seconds.scrape_interval: 5sstatic_configs:- targets: ['localhost:8080', 'localhost:8081']labels:group: 'production'- targets: ['localhost:8082']labels:group: 'canary'

    去表達式瀏覽器中驗證Prometheus服務是否能統計到這兩個群組的目標機度量數據,如:rpc_durations_seconds度量指標

    為聚集到抓取的數據,設置規則并寫入到新的時間序列中

    當計算ad-hoc時,如果在累計到上千個時間序列數據的查詢,可能會變慢。為了使這種多時間序列數據點查詢更有效率,我們允許通過使用配置的記錄規則,把預先記錄表達式實時收集的數據存入到新的持久時間序列中。該例子中,如果我們對每秒RPCs數量(rpc_durations_seconds_count)的5分鐘窗口流入的統計數量感興趣的話。我們可以下面的表達式:

    avg(rate(rpc_durations_seconds_count)[5m]) by (job, service)

    試著使用圖形化這個表達式

    為了存儲這個表達式所統計到的數據,我們可以使用新的度量指標,如job_service:rpc_durations_seconds_count:avg_rate5m, 創建一個配置規則文件,并把該文件保存為prometheus.rules:

    job_service:rpc_durations_seconds_count:avg_rate5m = avg(rate(rpc_durations_seconds_count[5m])) by (job, service)

    為了使Prometheus服務使用這個新的規則,在prometheus.yml配置文件的global配置區域添加一個rule_files語句。這個配置應該向下面這樣寫:

    global:scrape_interval: 15s # By default, scrape targets every 15 seconds.evaluation_interval: 15s # Evaluate rules every 15 seconds.# Attach these extra labels to all timeseries collected by this Prometheus instance.external_labels:monitor: 'codelab-monitor'rule_files:- 'prometheus.rules'scrape_configs:- job_name: 'prometheus'# Override the global default and scrape targets from this job every 5 seconds.scrape_interval: 5sstatic_configs:- targets: ['localhost:9090']- job_name: 'example-random'# Override the global default and scrape targets from this job every 5 seconds.scrape_interval: 5sstatic_configs:- targets: ['localhost:8080', 'localhost:8081']labels:group: 'production'- targets: ['localhost:8082']labels:group: 'canary'

    指定這個新的配置文件,并重啟Prometheus服務。驗證新的時間序列度量指標job_service:rpc_durations_seconds_count:avg_rate5m是否能夠在Console控制框中查找出時間序列數據

    常見問題

    一般問題

  • Prometheus是什么?
  • Prometheus是一款高活躍生態系統的開源系統監控和警告工具包。詳見概覽

  • Prometheus與其他的監控系統比較
  • 詳見比較

  • Prometheus有什么依賴?
  • Prometheus服務獨立運行,沒有其他依賴

  • Prometheus有高可用的保證嗎?
  • 是的,在多臺服務器上運行相同的Prometheus服務,相同的報警會由警告管理器刪除
    警告管理器當前不能保證高可用,但高可用是目標

  • 我被告知Prometheus"不能水平擴展"
  • 事實上,有許多方式可以擴展Prometheus。 閱讀Robust Percetion的博客關于Prometheus的擴展

    在通常的設置中,不可能使用inode。 有一個可能的缺點:如果你想刪除Prometheus的存儲目錄,你會注意到,一些文件系統在刪除文件時非常慢。

  • 為什么Prometheus服務器組件不支持TLS或身份驗證? 我可以添加這些嗎?
  • 雖然TLS和身份驗證是經常請求的功能,但我們有意不在Prometheus的任何服務器端組件中實現它們。 有這么多不同的選項和參數(僅限TLS的10多個選項),我們決定專注于建立最佳的監控系統,而不是在每個服務器組件中支持完全通用的TLS和身份驗證解決方案。

    如果您需要TLS或身份驗證,我們建議將反向代理放在Prometheus前面。 參見例如使用Nginx添加對Prometheus的基本認證。

    請注意,這僅適用于入站連接。 Prometheus確實支持刪除TLS-和auth啟用的目標,以及其他創建出站連接的Prometheus組件具有類似的支持。

    概念

    數據模型

    Prometheus從根本上存儲的所有數據都是時間序列: 具有時間戳的數據流只屬于單個度量指標和該度量指標下的多個標簽維度。除了存儲時間序列數據外,Prometheus也可以利用查詢表達式存儲5分鐘的返回結果中的時間序列數據

    metrics和labels(度量指標名稱和標簽)

    每一個時間序列數據由metric度量指標名稱和它的標簽labels鍵值對集合唯一確定。

    這個metric度量指標名稱指定監控目標系統的測量特征(如:http_requests_total- 接收http請求的總計數). metric度量指標命名ASCII字母、數字、下劃線和冒號,他必須配正則表達式[a-zA-Z_:][a-zA-Z0-9_:]*。

    標簽開啟了Prometheus的多維數據模型:對于相同的度量名稱,通過不同標簽列表的結合, 會形成特定的度量維度實例。(例如:所有包含度量名稱為/api/tracks的http請求,打上method=POST的標簽,則形成了具體的http請求)。這個查詢語言在這些度量和標簽列表的基礎上進行過濾和聚合。改變任何度量上的任何標簽值,則會形成新的時間序列圖

    標簽label名稱可以包含ASCII字母、數字和下劃線。它們必須匹配正則表達式[a-zA-Z_][a-zA-Z0-9_]*。帶有_下劃線的標簽名稱被保留內部使用。

    標簽labels值包含任意的Unicode碼。

    具體詳見metrics和labels命名最佳實踐。

    有序的采樣值

    有序的采樣值形成了實際的時間序列數據列表。每個采樣值包括:

    • 一個64位的浮點值
    • 一個精確到毫秒級的時間戳
    • 一個樣本數據集是針對一個指定的時間序列在一定時間范圍的數據收集。這個時間序列是由<metric_name>{<label_name>=<label_value>, …}
      ‘‘小結:指定度量名稱和度量指標下的相關標簽值,則確定了所關心的目標數據,隨著時間推移形成一個個點,在圖表上實時繪制動態變化的線條’’

    Notation(符號)
    表示一個度量指標和一組鍵值對標簽,需要使用以下符號:

    [metric name]{[label name]=[label value], …}

    例如,度量指標名稱是api_http_requests_total, 標簽為method=“POST”, handler="/messages" 的示例如下所示:

    api_http_requests_total{method=“POST”, handler="/messages"}

    這些命名和OpenTSDB使用方法是一樣的

    度量指標模型

    metrics類型

    Prometheus客戶庫提供了四個核心的metrics類型。這四種類型目前僅在客戶庫和wire協議中區分。Prometheus服務還沒有充分利用這些類型。不久的將來就會發生改變。

    Counter(計數器)

    counter 是一個累計度量指標,它是一個只能遞增的數值。計數器主要用于統計服務的請求數、任務完成數和錯誤出現的次數等等。計數器是一個遞增的值。反例:統計goroutines的數量。計數器的使用方式在下面的各個客戶端例子中:

    客戶端使用計數器的文檔

    • Go
    • Java
    • Python
    • Ruby

    Gauge(測量器)

    gauge是一個度量指標,它表示一個既可以遞增, 又可以遞減的值。

    測量器主要測量類似于溫度、當前內存使用量等,也可以統計當前服務運行隨時增加或者減少的Goroutines數量

    客戶端使用計量器的文檔:

    • Go
    • Java
    • Python
    • Ruby

    Histogram(柱狀圖)

    histogram,是柱狀圖,在Prometheus系統中的查詢語言中,有三種作用:

  • 對每個采樣點進行統計,打到各個分類值中(bucket)
  • 對每個采樣點值累計和(sum)
  • 對采樣點的次數累計和(count)
  • 度量指標名稱: [basename]的柱狀圖, 上面三類的作用度量指標名稱

    • [basename]_bucket{le=“上邊界”}, 這個值為小于等于上邊界的所有采樣點數量
    • [basename]_sum
    • [basename]_count
      小結:所以如果定義一個度量類型為Histogram,則Prometheus系統會自動生成三個對應的指標
      使用histogram_quantile()函數, 計算直方圖或者是直方圖聚合計算的分位數閾值。 一個直方圖計算Apdex值也是合適的, 當在buckets上操作時,記住直方圖是累計的。詳見直方圖和總結

    客戶庫的直方圖使用文檔:

    • Go
    • Java
    • Python
    • Ruby

    [Summary]總結

    類似histogram柱狀圖,summary是采樣點分位圖統計,(通常的使用場景:請求持續時間和響應大小)。 它也有三種作用:

    對于每個采樣點進行統計,并形成分位圖。(如:正態分布一樣,統計低于60分不及格的同學比例,統計低于80分的同學比例,統計低于95分的同學比例)

    • 統計班上所有同學的總成績(sum)
    • 統計班上同學的考試總人數(count)
    • 帶有度量指標的[basename]的summary 在抓取時間序列數據展示。

    觀察時間的φ-quantiles (0 ≤ φ ≤ 1), 顯示為[basename]{分位數="[φ]"}

    • [basename]_sum, 是指所有觀察值的總和
    • [basename]_count, 是指已觀察到的事件計數值

    詳見histogram和summaries
    有關summaries的客戶端使用文檔:

    • Go
    • Java
    • Python
    • Ruby

    任務與實例

    Jobs和Instances(任務和實例)

    就Prometheus而言,pull拉取采樣點的端點服務稱之為instance。多個這樣pull拉取采樣點的instance, 則構成了一個job

    例如, 一個被稱作api-server的任務有四個相同的實例。

    • job: api-server
      • instance 1:1.2.3.4:5670
      • instance 2:1.2.3.4:5671
      • instance 3:5.6.7.8:5670
      • instance 4:5.6.7.8:5671

    自動化生成的標簽和時間序列
    當Prometheus拉取一個目標, 會自動地把兩個標簽添加到度量名稱的標簽列表中,分別是:

    • job: 目標所屬的配置任務名稱api-server。
    • instance: 采樣點所在服務: host:port
      如果以上兩個標簽二者之一存在于采樣點中,這個取決于honor_labels配置選項。詳見文檔

    對于每個采樣點所在服務instance,Prometheus都會存儲以下的度量指標采樣點:

    • up{job="[job-name]", instance=“instance-id”}: up值=1,表示采樣點所在服務健康; 否則,網絡不通, 或者服務掛掉了
    • scrape_duration_seconds{job="[job-name]", instance="[instance-id]"}: 嘗試獲取目前采樣點的時間開銷
    • scrape_samples_post_metric_relabeling{job="", instance=""}: 表示度量指標的標簽變化后,標簽沒有變化的度量指標數量。
    • scrape_samples_scraped{job="", instance=""}: 這個采樣點目標暴露的樣本點數量

    備注:我查了下scrape_samples_post_metric_relabeling 和 scrape_samples_scraped的值好像是一樣的。還是這兩個值沒有理解

    up度量指標對服務健康的監控是非常有用的。


    查詢

    Prometheus提供一個函數式的表達式語言,可以使用戶實時地查找和聚合時間序列數據。表達式計算結果可以在圖表中展示,也可以在Prometheus表達式瀏覽器中以表格形式展示,或者作為數據源, 以HTTP API的方式提供給外部系統使用。

    examples

    這個文檔僅供參考, 這里先舉幾個容易上手的例子。

    表達式語言數據類型

    在Prometheus的表達式語言中,任何表達式或者子表達式都可以歸為四種類型:

    • instant vector 瞬時向量 - 它是指在同一時刻,抓取的所有度量指標數據。這些度量指標數據的key都是相同的,也即相同的時間戳。
    • range vector 范圍向量 - 它是指在任何一個時間范圍內,抓取的所有度量指標數據。
    • scalar 標量 - 一個簡單的浮點值
    • string 字符串 - 一個當前沒有被使用的簡單字符串
      依賴于使用場景(例如:圖表 vs. 表格),根據用戶所寫的表達式,僅僅只有一部分類型才適用這種表達式。例如:瞬時向量類型是唯一可以直接在圖表中使用的。

    Literals

    字符串

    字符串可以用單引號、雙引號或者反引號表示

    PromQL遵循與Go相同的轉義規則。在單引號,雙引號中,反斜杠成為了轉義字符,后面可以跟著a, b, f, n, r, t, v或者\。 可以使用八進制(\nnn)或者十六進制(\xnn, \unnnn和\Unnnnnnnn)提供特定字符。

    在反引號內不處理轉義字符。與Go不同,Prom不會丟棄反引號中的換行符。例如:

    “this is a string”
    ‘these are unescaped: \n \ \t’
    these are not unescaped: \n ’ " \t"’

    浮點數

    標量浮點值可以直接寫成形式-[.(digits)]。

    -2.43

    時間序列選擇器
    即時向量選擇器
    瞬時向量選擇器可以對一組時間序列數據進行篩選,并給出結果中的每個結果鍵值對(時間戳-樣本值): 最簡單的形式是,只有一個度量名稱被指定。在一個瞬時向量中這個結果包含有這個度量指標名稱的所有樣本數據鍵值對。

    下面這個例子選擇所有時間序列度量名稱為http_requests_total的樣本數據:

    http_requests_total

    通過在度量指標后面增加{}一組標簽可以進一步地過濾這些時間序列數據。

    下面這個例子選擇了度量指標名稱為http_requests_total,且一組標簽為 job=prometheus, group=canary:

    http_requests_total{job=“prometheus”,group=“canary”}

    可以采用不匹配的標簽值也是可以的,或者用正則表達式不匹配標簽。標簽匹配操作如下所示:

    • =: 精確地匹配標簽給定的值
    • !=: 不等于給定的標簽值
    • =~: 正則表達匹配給定的標簽值
    • !=: 給定的標簽值不符合正則表達式
      例如:度量指標名稱為http_requests_total,正則表達式匹配標簽environment為staging, testing, development的值,且http請求方法不等于GET。

    http_requests_total{environment=~“staging|testing|development”, method!=“GET”}

    匹配空標簽值的標簽匹配器也可以選擇沒有設置任何標簽的所有時間序列數據。正則表達式完全匹配。

    向量選擇器必須指定一個度量指標名稱或者至少不能為空字符串的標簽值。以下表達式是非法的:

    {job=~".*"} #Bad!

    上面這個例子既沒有度量指標名稱,標簽選擇器也可以正則匹配空標簽值,所以不符合向量選擇器的條件

    相反地,下面這些表達式是有效的,第一個一定有一個字符。第二個有一個有用的標簽method

    {job=~".+"} # Good!
    {job=~".*", method=“get”} # Good!

    標簽匹配器能夠被應用到度量指標名稱,使用__name__標簽篩選度量指標名稱。例如:表達式http_requests_total等價于{name=“http_requests_total”}。 其他的匹配器,如:= ( !=, =~, !~)都可以使用。下面的表達式選擇了度量指標名稱以job:開頭的時間序列數據:

    {name=~"^job:.*"} #

    范圍向量選擇器
    范圍向量類似瞬時向量, 不同在于,它們從當前實例選擇樣本范圍區間。在語法上,時間長度被追加在向量選擇器尾部的方括號[]中,用以指定對于每個樣本范圍區間中的每個元素應該抓取的時間范圍樣本區間。

    時間長度有一個數值決定,后面可以跟下面的單位:

    • s - seconds
    • m - minutes
    • h - hours
    • d - days
    • w - weeks
    • y - years
      在下面這個例子中, 選擇過去5分鐘內,度量指標名稱為http_requests_total, 標簽為job="prometheus"的時間序列數據:

    http_requests_total{job=“prometheus”}[5m]

    偏移修飾符
    這個offset偏移修飾符允許在查詢中改變單個瞬時向量和范圍向量中的時間偏移

    例如,下面的表達式返回相對于當前時間的前5分鐘時的時刻, 度量指標名稱為http_requests_total的時間序列數據:

    http_requests_total offset 5m

    注意:offset偏移修飾符必須直接跟在選擇器后面,例如:

    sum(http_requests_total{method=“GET”} offset 5m) // GOOD.

    然而,下面這種情況是不正確的

    sum(http_requests_total{method=“GET”}) offset 5m // INVALID.

    offset偏移修飾符在范圍向量上和瞬時向量用法一樣的。下面這個返回了相對于當前時間的前一周時,過去5分鐘的度量指標名稱為http_requests_total的速率:

    rate(http_requests_total[5m] offset 1w)

    操作符

    Prometheus支持二元和聚合操作符。詳見表達式語言操作符

    函數

    Prometheus提供了一些函數列表操作時間序列數據。詳見表達式語言函數

    陷阱

    插值和陳舊

    當運行查詢后,獨立于當前時刻被選中的時間序列數據所對應的時間戳,這個時間戳主要用來進行聚合操作,包括sum, avg等,大多數聚合的時間序列數據所對應的時間戳沒有對齊。由于它們的獨立性,我們需要在這些時間戳中選擇一個時間戳,并已這個時間戳為基準,獲取小于且最接近這個時間戳的時間序列數據。

    如果5分鐘內,沒有獲取到任何的時間序列數據,則這個時間戳不會存在。那么在圖表中看到的數據都是在當前時刻5分鐘前的數據。

    注意:差值和陳舊處理可能會發生變化。詳見https://github.com/prometheus/prometheus/issues/398和https://github.com/prometheus/prometheus/issues/581

    避免慢查詢和高負載

    如果一個查詢需要操作非常大的數據量,圖表繪制很可能會超時,或者服務器負載過高。因此,在對未知數據構建查詢時,始終需要在Prometheus表達式瀏覽器的表格視圖中構建查詢,直到結果是看起來合理的(最多為數百個,而不是數千個)。只有當你已經充分過濾或者聚合數據時,才切換到圖表模式。如果表達式的查詢結果仍然需要很長時間才能繪制出來,則需要通過記錄規則重新清洗數據。

    像api_http_requests_total這樣簡單的度量指標名稱選擇器,可以擴展到具有不同標簽的數千個時間序列中,這對于Prometheus的查詢語言是非常重要的。還要記住,聚合操作即使輸出的結果集非常少,但是它會在服務器上產生負載。這類似于關系型數據庫查詢可一個字段的總和,總是非常緩慢。

    操作符

    二元操作符
    Prometheus的查詢語言支持基本的邏輯運算和算術運算。對于兩個瞬時向量, 匹配行為可以被改變。

    算術二元運算符
    在Prometheus系統中支持下面的二元算術操作符:

    • +加法
    • -減法
    • *乘法
    • /除法
    • % 模
    • ^ 冪等

    二元運算操作符支持scalar/scalar(標量/標量)、vector/scalar(向量/標量)、和vector/vector(向量/向量)之間的操作。

    在兩個標量之間進行操作符運算,得到的結果也是標量

    在向量和標量之間,這個操作符會作用于這個向量的每個樣本值上。例如:如果一個時間序列瞬時向量除以2,操作結果也是一個新的瞬時向量,且度量指標名稱不變, 它是原度量指標瞬時向量的每個樣本值除以2.

    在兩個向量之間,一個二元算術操作符作用在左邊瞬時向量的每個樣本值,且該樣本值與操作符右邊能匹配上的樣本值計算,向量匹配。結果寫入到一個沒有度量指標名稱的瞬時向量。

    比較二元操作符
    在Prometheus系統中,比較二元操作符有:

    • == 等于
    • != 不等于
    • > 大于
    • < 小于
    • >= 大于等于
    • <= 小于等于

    比較二元操作符被應用于scalar/scalar(標量/標量)、vector/scalar(向量/標量),和vector/vector(向量/向量)。比較操作符得到的結果是bool布爾類型值,返回1或者0值。

    在兩個標量之間的比較運算,bool結果寫入到另一個結果標量中。

    瞬時向量和標量之間的比較運算,這個操作符會應用到某個當前時刻的每個時間序列數據上,如果一個時間序列數據值與這個標量比較結果是false,則這個時間序列數據被丟棄掉,如果是true, 則這個時間序列數據被保留在結果中。

    在兩個瞬時向量之間的比較運算,左邊度量指標數據中的每個時間序列數據,與右邊度量指標中的每個時間序列數據匹配,沒有匹配上的,或者計算結果為false的,都被丟棄,不在結果中顯示。否則將保留左邊的度量指標和標簽的樣本數據寫入瞬時向量。

    邏輯/集合二元操作符
    邏輯/集合二元操作符只能作用在即時向量, 包括:

    • and 交集
    • or 并集
    • unless 補集
      vector1 and vector2 的邏輯/集合二元操作符,規則:vector1瞬時向量中的每個樣本數據與vector2向量中的所有樣本數據進行標簽匹配,不匹配的,全部丟棄。運算結果是保留左邊的度量指標名稱和值。

    vector1 or vector2的邏輯/集合二元操作符,規則: 保留vector1向量中的每一個元素,對于vector2向量元素,則不匹配vector1向量的任何元素,則追加到結果元素中。

    vector1 unless vector2的邏輯/集合二元操作符,又稱差積。規則:包含在vector1中的元素,但是該元素不在vector2向量所有元素列表中,則寫入到結果集中

    向量匹配

    向量之間的匹配是指右邊向量中的每一個元素,在左邊向量中也存在。這里有兩種基本匹配行為特征:

    一對一,找到這個操作符的兩邊向量元素的相同元素。默認情況下,操作符的格式是vector1 [operate] vector2。如果它們有相同的標簽和值,則表示相匹配。ingoring關鍵字是指,向量匹配時,可以忽略指定標簽。on關鍵字是指,在指定標簽上進行匹配。格式如下所示

    [vector expr] [bin-op] ignoring([label list]) [vector expr]
    [vector expr] [bin-op] on([lable list]) [vector expr]

    例如樣本數據:

    method_code:http_errors:rate5m{method=“get”, code=“500”} 24
    method_code:http_errors:rate5m{method=“get”, code=“404”} 30
    method_code:http_errors:rate5m{method=“put”, code=“501”} 3
    method_code:http_errors:rate5m{method=“post”, code=“404”} 21

    method:http_requests:rate5m{method=“get”} 600
    method:http_requests:rate5m{method=“delete”} 34
    method:http_requests:rate5m{method=“post”} 120

    查詢例子:

    method_code:http_errors:rate5m{code=“500”} / ignoring(code) method:http_requests:rate5m

    兩個向量之間的除法操作運算的向量結果是,每一個向量樣本http請求方法標簽值是500,且在過去5分鐘的運算值。如果沒有忽略code="500"的標簽,這里不能匹配到向量樣本數據。兩個向量的請求方法是put和delete的樣本數據不會出現在結果列表中

    {method=“get”} 0.04 // 24 / 600
    {method=“post”} 0.05 // 6 / 120

    多對一和一對多的匹配,是指向量元素中的一個樣本數據匹配標簽到了多個樣本數據標簽。這里必須直接指定兩個修飾符group_left或者group_right, 左或者右決定了哪邊的向量具有較高的子集

    ignoring() group_left()
    ignoring() group_right()
    on() group_left()
    on() group_right()

    這個group帶標簽的修飾符標簽列表包含了“一對多”中的“一”一側的額外標簽。對于on標簽只能是這些列表中的一個。結果向量中的每一個時間序列數據都是唯一的。

    group修飾符只能被用在比較操作符和算術運算符。

    查詢例子:

    method_code:http_errors:rate5m / ignoring(code) group_left method:http_requests:rate5m

    在這個例子中,左向量的標簽數量多于左邊向量的標簽數量,所以我們使用group_left。右邊向量的時間序列元素匹配左邊的所有相同method標簽:

    {method=“get”, code=“500”} 0.04 // 24 /600
    {method=“get”, code=“404”} 0.05 // 30 /600
    {method=“post”, code=“500”} 0.05 // 6 /600
    {method=“post”, code=“404”} 0.175 // 21 /600

    多對一和一對多匹配應該更多地被謹慎使用。經常使用ignoring(<labels>)輸出想要的結果。

    聚合操作符

    Prometheus支持下面的內置聚合操作符。這些聚合操作符被用于聚合單個即時向量的所有時間序列列表,把聚合的結果值存入到新的向量中。

    • sum (在維度上求和)
    • max (在維度上求最大值)
    • min (在維度上求最小值)
    • avg (在維度上求平均值)
    • stddev (求標準差)
    • stdvar (求方差)
    • count (統計向量元素的個數)
    • count_values (統計相同數據值的元素數量)
    • bottomk (樣本值第k個最小值)
    • topk (樣本值第k個最大值)
    • quantile (統計分位數)

    這些操作符被用于聚合所有標簽維度,或者通過without或者by子句來保留不同的維度。

    ([parameter,] ) [without | by ()] [keep_common]

    parameter只能用于count_values, quantile, topk和bottomk。without移除結果向量中的標簽集合,其他標簽被保留輸出。by關鍵字的作用正好相反,即使它們的標簽值在向量的所有元素之間。keep_common子句允許保留額外的標簽(在元素之間相同,但不在by子句中的標簽)

    count_values對每個唯一的樣本值輸出一個時間序列。每個時間序列都附加一個標簽。這個標簽的名字有聚合參數指定,同時這個標簽值是唯一的樣本值。每一個時間序列值是結果樣本值出現的次數。

    topk和bottomk與其他輸入樣本子集聚合不同,返回的結果中包括原始標簽。by和without僅僅用在輸入向量的桶中

    例如:
    如果度量指標名稱http_requests_total包含由group, application, instance的標簽組成的時間序列數據,我們可以通過以下方式計算去除instance標簽的http請求總數

    sum(http_requests_total) without (instance)

    如果我們對所有應用程序的http請求總數,我們可以簡單地寫下:

    sum(http_requests_total)

    統計每個編譯版本的二進制文件數量,我們可以如下寫:

    count_values(“version”, build_version)

    通過所有實例,獲取http請求第5個最大值,我們可以簡單地寫下:

    topk(5, http_requests_total)

    二元運算符優先級

    在Prometheus系統中,二元運算符優先級從高到低:

    • ^
    • *, /, %
    • +, -
    • ==, !=, <=, <, >=, >
    • and, unless
    • or

    函數

    函數列表

    一些函數有默認的參數,例如:year(v=vector(time()) instant-vector)。v是參數值,instant-vector是參數類型。vector(time())是默認值。
    abs()
    abs(v instant-vector)返回輸入向量的所有樣本的絕對值。

    absent()
    absent(v instant-vector),如果賦值給它的向量具有樣本數據,則返回空向量;如果傳遞的瞬時向量參數沒有樣本數據,則返回不帶度量指標名稱且帶有標簽的樣本值為1的結果

    當監控度量指標時,如果獲取到的樣本數據是空的, 使用absent方法對告警是非常有用的

    absent(nonexistent{job=“myjob”}) # => key: value = {job=“myjob”}: 1

    absent(nonexistent{job=“myjob”, instance=~".*"}) # => {job=“myjob”} 1
    so smart !

    absent(sum(nonexistent{job=“myjob”})) # => key:value {}: 0

    ceil()
    ceil(v instant-vector) 是一個向上舍入為最接近的整數。

    changes()
    changes(v range-vector) 輸入一個范圍向量, 返回這個范圍向量內每個樣本數據值變化的次數。

    clamp_max()
    clamp_max(v instant-vector, max scalar)函數,輸入一個瞬時向量和最大值,樣本數據值若大于max,則改為max,否則不變

    clamp_min()
    clamp_min(v instant-vector)函數,輸入一個瞬時向量和最大值,樣本數據值小于min,則改為min。否則不變

    count_saclar()
    count_scalar(v instant-vector) 函數, 輸入一個瞬時向量,返回key:value=“scalar”: 樣本個數。而count()函數,輸入一個瞬時向量,返回key:value=向量:樣本個數,其中結果中的向量允許通過by條件分組。

    day_of_month()
    day_of_month(v=vector(time()) instant-vector)函數,返回被給定UTC時間所在月的第幾天。返回值范圍:1~31。

    day_of_week()
    day_of_week(v=vector(time()) instant-vector)函數,返回被給定UTC時間所在周的第幾天。返回值范圍:0~6. 0表示星期天。

    days_in_month()
    days_in_month(v=vector(time()) instant-vector)函數,返回當月一共有多少天。返回值范圍:28~31.

    delta()
    delta(v range-vector)函數,計算一個范圍向量v的第一個元素和最后一個元素之間的差值。返回值:key:value=度量指標:差值

    下面這個表達式例子,返回過去兩小時的CPU溫度差:

    delta(cpu_temp_celsius{host=“zeus”}[2h])
    delta函數返回值類型只能是gauges。

    deriv()
    deriv(v range-vector)函數,計算一個范圍向量v中各個時間序列二階導數,使用簡單線性回歸

    deriv二階導數返回值類型只能是gauges。

    drop_common_labels()
    drop_common_labels(instant-vector)函數,輸入一個瞬時向量,返回值是key:value=度量指標:樣本值,其中度量指標是去掉了具有相同標簽。
    例如:http_requests_total{code=“200”, host=“127.0.0.1:9090”, method=“get”} : 4, http_requests_total{code=“200”, host=“127.0.0.1:9090”, method=“post”} : 5, 返回值: http_requests_total{method=“get”} : 4, http_requests_total{code=“200”, method=“post”} : 5

    exp()
    exp(v instant-vector)函數,輸入一個瞬時向量, 返回各個樣本值的e指數值,即為e^N次方。特殊情況如下所示:

    Exp(+inf) = +Inf
    Exp(NaN) = NaN

    floor()
    floor(v instant-vector)函數,與ceil()函數相反。 4.3 為 4 。

    histogram_quantile()
    histogram_quatile(φ float, b instant-vector) 函數計算b向量的φ-直方圖 (0 ≤ φ ≤ 1) 。參考中文文獻[https://www.howtoing.com/how-to-query-prometheus-on-ubuntu-14-04-part-2/]

    holt_winters()
    holt_winters(v range-vector, sf scalar, tf scalar)函數基于范圍向量v,生成事件序列數據平滑值。平滑因子sf越低, 對老數據越重要。趨勢因子tf越高,越多的數據趨勢應該被重視。0< sf, tf <=1。 holt_winters僅用于gauges

    hour()
    hour(v=vector(time()) instant-vector)函數返回被給定UTC時間的當前第幾個小時,時間范圍:0~23。

    idelta()
    idelta(v range-vector)函數,輸入一個范圍向量,返回key: value = 度量指標: 每最后兩個樣本值差值。

    increase()
    increase(v range-vector)函數, 輸入一個范圍向量,返回:key:value = 度量指標:last值-first值,自動調整單調性,如:服務實例重啟,則計數器重置。與delta()不同之處在于delta是求差值,而increase返回最后一個減第一個值,可為正為負。

    下面的表達式例子,返回過去5分鐘,連續兩個時間序列數據樣本值的http請求增加值。

    increase(http_requests_total{job=“api-server”}[5m])

    increase的返回值類型只能是counters,主要作用是增加圖表和數據的可讀性,使用rate記錄規則的使用率,以便持續跟蹤數據樣本值的變化。

    irate
    irate(v range-vector)函數, 輸入:范圍向量,輸出:key: value = 度量指標: (last值-last前一個值)/時間戳差值。它是基于最后兩個數據點,自動調整單調性, 如:服務實例重啟,則計數器重置。

    下面表達式針對范圍向量中的每個時間序列數據,返回兩個最新數據點過去5分鐘的HTTP請求速率。

    irate(http_requests_total{job=“api-server”}[5m])

    irate只能用于繪制快速移動的計數器。因為速率的簡單更改可以重置FOR子句,利用警報和緩慢移動的計數器,完全由罕見的尖峰組成的圖形很難閱讀。

    label_replace()
    對于v中的每個時間序列,label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string) 將正則表達式與標簽值src_label匹配。如果匹配,則返回時間序列,標簽值dst_label被替換的擴展替換。$1替換為第一個匹配子組,$2替換為第二個等。如果正則表達式不匹配,則時間序列不會更改。

    另一種更容易的理解是:label_replace函數,輸入:瞬時向量,輸出:key: value = 度量指標: 值(要替換的內容:首先,針對src_label標簽,對該標簽值進行regex正則表達式匹配。如果不能匹配的度量指標,則不發生任何改變;否則,如果匹配,則把dst_label標簽的標簽紙替換為replacement
    下面這個例子返回一個向量值a帶有foo標簽:
    label_replace(up{job=“api-server”, serice=“a:c”}, “foo”, “$1”, “service”, “(.):.”)

    ln()
    ln(v instance-vector)計算瞬時向量v中所有樣本數據的自然對數。特殊例子:

    ln(+Inf) = +Inf
    ln(0) = -Inf
    ln(x<0) = NaN
    ln(NaN) = NaN

    log2()
    log2(v instant-vector)函數計算瞬時向量v中所有樣本數據的二進制對數。

    log10()
    log10(v instant-vector)函數計算瞬時向量v中所有樣本數據的10進制對數。相當于ln()

    minute()
    minute(v=vector(time()) instant-vector)函數返回給定UTC時間當前小時的第多少分鐘。結果范圍:0~59。

    month()
    month(v=vector(time()) instant-vector)函數返回給定UTC時間當前屬于第幾個月,結果范圍:0~12。

    predict_linear()
    predict_linear(v range-vector, t scalar)預測函數,輸入:范圍向量和從現在起t秒后,輸出:不帶有度量指標,只有標簽列表的結果值。

    例如:predict_linear(http_requests_total{code=“200”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”}[5m], 5)
    結果:
    {code=“200”,handler=“query_range”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 1
    {code=“200”,handler=“prometheus”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 4283.449995397104
    {code=“200”,handler=“static”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 22.99999999999999
    {code=“200”,handler=“query”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 130.90381188596754
    {code=“200”,handler=“graph”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 2
    {code=“200”,handler=“label_values”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 2

    rate()
    rate(v range-vector)函數, 輸入:范圍向量,輸出:key: value = 不帶有度量指標,且只有標簽列表:(last值-first值)/時間差s

    rate(http_requests_total[5m])

    結果:
    {code=“200”,handler=“label_values”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 0
    {code=“200”,handler=“query_range”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 0
    {code=“200”,handler=“prometheus”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 0.2
    {code=“200”,handler=“query”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 0.003389830508474576
    {code=“422”,handler=“query”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 0
    {code=“200”,handler=“static”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 0
    {code=“200”,handler=“graph”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 0
    {code=“400”,handler=“query”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 0

    rate()函數返回值類型只能用counters, 當用圖表顯示增長緩慢的樣本數據時,這個函數是非常合適的。

    注意:當rate函數和聚合方式聯合使用時,一般先使用rate函數,再使用聚合操作, 否則,當服務實例重啟后,rate無法檢測到counter重置。

    resets()
    resets()函數, 輸入:一個范圍向量,輸出:key-value=沒有度量指標,且有標簽列表[在這個范圍向量中每個度量指標被重置的次數]。在兩個連續樣本數據值下降,也可以理解為counter被重置。
    示例:

    resets(http_requests_total[5m])
    結果:
    {code=“200”,handler=“label_values”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 0
    {code=“200”,handler=“query_range”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 0
    {code=“200”,handler=“prometheus”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 0
    {code=“200”,handler=“query”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 0
    {code=“422”,handler=“query”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 0
    {code=“200”,handler=“static”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 0
    {code=“200”,handler=“graph”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 0
    {code=“400”,handler=“query”,instance=“120.77.65.193:9090”,job=“prometheus”,method=“get”} 0

    resets只能和counters一起使用。

    round()
    round(v instant-vector, to_nearest 1= scalar)函數,與ceil和floor函數類似,輸入:瞬時向量,輸出:指定整數級的四舍五入值, 如果不指定,則是1以內的四舍五入。

    scalar()
    scalar(v instant-vector)函數, 輸入:瞬時向量,輸出:key: value = “scalar”, 樣本值[如果度量指標樣本數量大于1或者等于0, 則樣本值為NaN, 否則,樣本值本身]

    sort()
    sort(v instant-vector)函數,輸入:瞬時向量,輸出:key: value = 度量指標:樣本值[升序排列]

    sort_desc()
    sort(v instant-vector函數,輸入:瞬時向量,輸出:key: value = 度量指標:樣本值[降序排列]

    sqrt()
    sqrt(v instant-vector)函數,輸入:瞬時向量,輸出:key: value = 度量指標: 樣本值的平方根

    time()
    time()函數,返回從1970-01-01到現在的秒數,注意:它不是直接返回當前時間,而是時間戳

    vector()
    vector(s scalar)函數,返回:key: value= {}, 傳入參數值

    year()
    year(v=vector(time()) instant-vector), 返回年份。

    _over_time()
    下面的函數列表允許傳入一個范圍向量,返回一個帶有聚合的瞬時向量:

    • avg_over_time(range-vector): 范圍向量內每個度量指標的平均值。
    • min_over_time(range-vector): 范圍向量內每個度量指標的最小值。
    • max_over_time(range-vector): 范圍向量內每個度量指標的最大值。
    • sum_over_time(range-vector): 范圍向量內每個度量指標的求和值。
    • count_over_time(range-vector): 范圍向量內每個度量指標的樣本數據個數。
    • quantile_over_time(scalar, range-vector): 范圍向量內每個度量指標的樣本數據值分位數,φ-quantile (0 ≤ φ ≤ 1)
    • stddev_over_time(range-vector): 范圍向量內每個度量指標的總體標準偏差。
    • stdvar_over_time(range-vector): 范圍向量內每個度量指標的總體標準方差。

    舉例

    查詢例子

    簡單的時間序列選擇

    返回度量指標名稱是http_requests_total的所有時間序列樣本數據:

    http_requests_total

    返回度量指標名稱是http_requests_total, 標簽分別是job=“apiserver, handler=”/api/comments的所有時間序列樣本數據:

    http_requests_total{job=“apiserver”, hanlder="/api/comments"}

    返回度量指標名稱是http_requests_total, 標簽分別是job=“apiserver, handler=”/api/comments,且是5分鐘內的所有時間序列樣本數據:

    http_requests_total{job=“apiserver”, handler="/api/comments"}[5m]

    注意:一個范圍向量表達式結果不能直接在Graph圖表中,但是可以在"console"視圖中展示。

    使用正則表達式,你可以通過特定模式匹配標簽為job的特定任務名,獲取這些任務的時間序列。在下面這個例子中, 所有任務名稱以server結尾。

    http_requests_total{job=~“server$”}

    返回度量指標名稱是http_requests_total, 且http返回碼不以4開頭的所有時間序列數據:

    http_requests_total{status!~"^4…$"}

    使用函數,操作符等

    返回度量指標名稱http_requests_total,且過去5分鐘的所有時間序列數據值速率。

    rate(http_requests_total[5m])

    假設度量名稱是http_requests_total,且過去5分鐘的所有時間序列數據的速率和,速率的維度是job

    sum(rate(http_requests_total)[5m]) by (job)

    如果我們有相同維度標簽,我們可以使用二元操作符計算樣本數據,返回值:key: value=標簽列表:計算樣本值。例如,下面這個表達式返回每一個實例剩余內存,單位是M, 如果不同,則需要使用ignoring(label_lists),如果多對一,則采用group_left, 如果是一對多,則采用group_right。

    (instance_memory_limit_byte - instant_memory_usage_bytes) / 1024 / 1024

    相同表達式,求和可以采用下面表達式:

    sum( instance_memory_limit_bytes - instance_memory_usage_bytes) by (app, proc) / 1024 / 1024

    如果相同集群調度器任務,顯示CPU使用率度量指標的話,如下所示:

    instance_cpu_time_ns{app=“lion”, pro=“web”, rev=“34d0f99”, env=“prod”, job=“cluster-manager”}
    instance_cpu_time_ns{app=“elephant”, proc=“worker”, rev=“34d0f99”, env=“prod”, job=“cluster-manager”}
    instance_cpu_time_ns{app=“turtle”, proc=“api”, rev=“4d3a513”, env=“prod”, job=“cluster-manager”}

    我們可以獲取最高的3個CPU使用率,按照標簽列表app和proc分組

    topk(3, sum(rate(instance_cpu_time_ns[5m])) by(app, proc))

    假設一個服務實例只有一個時間序列數據,那么我們通過下面表達式,可以統計出每個應用的實例數量:

    count(instance_cpu_time_ns) by (app)

    記錄規則

    定義recording rules

    配置規則

    Prometheus支持可以配置,然后定期執行的兩種規則: recording rules(記錄規則)和alerting rules警告規則。為了在Prometheus系統中包括規則,我們需要創建一個包含規則語句的文件,并通過在Prometheus配置的rule_fields字段加載這個記錄規則文件。

    這些規則文件可以通過像Prometheus服務發送SIGNUP信號量,實時重載記錄規則。如果所有的記錄規則有正確的格式和語法,則這些變化能夠生效。

    語法檢查規則
    在沒有啟動Prometheus服務之前,想快速知道一個規則文件是否正確,可以通過安裝和運行Prometheus的promtool命令行工具檢驗:

    go get github.com/prometheus/prometheus/cmd/promtool
    promtool check-rules /path/to/examples.rules

    當記錄規則文件是有效的,則這個檢查會打印出解析到規則的文本表示,并以返回值0退出程序。

    如果有任何語法錯誤的話,則這個命令行會打印出一個錯誤信息到標準輸出,并以返回值1退出程序。無效的輸入參數,則以返回值2退出程序。

    記錄規則

    記錄規則允許你預先計算經常需要的,或者計算復雜度高的表達式,并將結果保存為一組新的時間序列數據。查詢預計算結果通常比需要時進行計算表達式快得多。對于dashboard是非常有用的,因為dashboard需要實時刷新查詢表達式的結果。

    為了增加一個新記錄規則,增加下面的記錄規則到你的規則文件中:

    <new time series name>[{<label overrides>}] = <expression to record>

    例子:
    計算每個job的http請求總數,保存到新的度量指標中>

    job:http_inprogree_requests:sum = sum(http_inprogress_requests) by (job)

    放棄老標簽,寫入新標簽的結果時間序列數據:

    new_time_series{label_to_change=“new_value”, label_to_drop=""} = old_time_series

    記錄規則的執行周期有Prometheus的配置文件中的evaluate_interval指定。規則語句的右側表達式一旦被執行,則新的時間戳key為當前時間,value為右邊表達式的樣本值,新的度量指標名稱和標簽列表為左邊名稱。

    HTTP API訪問

    在Prometheus服務上/api/v1版本api是穩定版。

    格式概述

    這個API返回是JSON格式。每個請求成功的返回值都是以2xx開頭的編碼。

    到達API處理的無效請求,返回一個JSON錯誤對象,并返回下面的錯誤碼:

    • 400 Bad Request。當參數錯誤或者丟失時。
    • 422 Unprocessable Entity。當一個表達式不能被執行時。
    • 503 Service Unavailable。當查詢超時或者中斷時。
      在請求到達API之前,其他非2xx的錯誤碼可能會被返回。

    JSON返回格式如下所示:

    "status": "success" | "error", "data": <data>,// 如果status是"error", 這個數據字段還會包括下面的數據 "errorType": "<string>", "error": "<string>" }

    輸入時間戳可以被RFC3339格式或者Unix時間戳提供。輸出時間戳以Unix時間戳的方式呈現。

    查詢參數名稱可以用[]中括號重復次數。
    <series_selector>占位符提供像http_requests_total或者http_requests_total{method=~"^GET|POST$"}的Prometheus時間序列選擇器,并需要在URL中編碼傳輸。

    占位符涉及到[0-9]-[smhdwy]。例如:5m表示5分鐘的持續時間。

    表達式查詢

    查詢語言表達式可以在瞬時向量或者范圍向量中執行。

    Instant queries(即時查詢)
    瞬時向量的http restful api查詢:

    GET /api/v1/query

    URL查詢參數:

    • query=: Prometheus表達式查詢字符串。
    • time=<rfc3339 | uninx_timestamp>: 執行時間戳,可選項。
    • timeout=: 執行超時時間設置,默認由-query.timeout標志設置

    如果time缺省,則用當前服務器時間表示執行時刻。

    這個查詢結果的data部分有下面格式:

    {"resultType": "matrix" | "vector" | "scalar" | "string","result": <value> }

    是一個查詢結果數據,依賴于這個resultType格式, 不同的結果類型,則會有不同的結果數據格式。見表達式查詢結果格式。

    下面例子執行了在時刻是2015-07-01T20:10:51.781Z的up表達式:

    $ curl 'http://localhost:9090/api/v1/query?query=up&time=2015-07-01T20:10:51.781Z' {"status": "success","data":{"resultType": "vector","result" : [{"metric" : {"__name__" : "up","job" : "prometheus","instance" : "localhost:9090"},"value": [ 1435781451.781, "1" ]},{"metric" : {"__name__" : "up","job" : "node","instance" : "localhost:9100"},"value" : [ 1435781451.781, "0" ]}]} }

    范圍查詢
    下面評估了一個范圍時間的查詢表達式:

    GET /api/v1/query_range

    URL查詢參數

    • query=: Prometheus表達式查詢字符串。
    • start=<rfc3339 | unix_timestamp>: 開始時間戳。
    • end=<rfc3339 | unix_timestamp>: 結束時間戳。
    • step=: 查詢時間步長,范圍時間內每step秒執行一次。

    下面查詢結果格式的data部分:

    {"resultType": "matrix","result": <value> }

    對于占位符的格式,詳見范圍向量結果格式。

    下面例子執行了在時刻是2015-07-01T20:10:51.781Z的up表達式:

    $ curl 'http://localhost:9090/api/v1/query?query=up&time=2015-07-01T20:10:51.781Z' {"status": "success","data":{"resultType": "vector","result" : [{"metric" : {"__name__" : "up","job" : "prometheus","instance" : "localhost:9090"},"value": [ 1435781451.781, "1" ]},{"metric" : {"__name__" : "up","job" : "node","instance" : "localhost:9100"},"value" : [ 1435781451.781, "0" ]}]} }

    范圍查詢

    下面評估了一個范圍時間的查詢表達式:

    GET /api/v1/query_range

    URL查詢參數

    • query=: Prometheus表達式查詢字符串。
    • start=<rfc3339 | unix_timestamp>: 開始時間戳。
    • end=<rfc3339 | unix_timestamp>: 結束時間戳。
    • step=: 查詢時間步長,范圍時間內每step秒執行一次。

    下面查詢結果格式的data部分:

    {"resultType": "matrix","result": <value> }

    對于占位符的格式,詳見范圍向量結果格式。

    下面例子評估的查詢條件up,且30s范圍的查詢,步長是15s。

    $ curl 'http://localhost:9090/api/v1/query_range?query=up&start=2015-07-01T20:10:30.781Z&end=2015-07-01T20:11:00.781Z&step=15s' {"status" : "success","data" : {"resultType" : "matrix","result" : [{"metric" : {"__name__" : "up","job" : "prometheus","instance" : "localhost:9090"},"values" : [[ 1435781430.781, "1" ],[ 1435781445.781, "1" ],[ 1435781460.781, "1" ]]},{"metric" : {"__name__" : "up","job" : "node","instance" : "localhost:9091"},"values" : [[ 1435781430.781, "0" ],[ 1435781445.781, "0" ],[ 1435781460.781, "1" ]]}]} }

    查詢元數據

    通過標簽匹配器找到度量指標列表
    下面例子返回了度量指標列表 且不返回時間序列數據值。

    GET /api/v1/series

    URL查詢參數:

    • match[]=<series_selector>: 選擇器是series_selector。這個參數個數必須大于等于1.
    • start=<rfc3339 | unix_timestamp>: 開始時間戳。
    • end=<rfc3339 | unix_timestamp>: 結束時間戳。

    返回結果的data部分,是由key-value鍵值對的對象列表組成的。

    下面這個例子返回時間序列數據, 選擇器是up或者process_start_time_seconds{job=“prometheus”}

    $ curl -g 'http://localhost:9090/api/v1/series?match[]=up&match[]=process_start_time_seconds{job="prometheus"}' {"status" : "success","data" : [{"__name__" : "up","job" : "prometheus","instance" : "localhost:9090"},{"__name__" : "up","job" : "node","instance" : "localhost:9091"},{"__name__" : "process_start_time_seconds","job" : "prometheus","instance" : "localhost:9090"}] }

    查詢標簽值

    下面這個例子,返回了帶有指定標簽的標簽值列表

    GET /api/v1/label/<label_name>/values

    這個返回JSON結果的data部分是帶有label_name=job的值列表:

    $ curl http://localhost:9090/api/v1/label/job/values {"status" : "success","data" : ["node","prometheus"] }

    刪除時間序列

    下面的例子,是從Prometheus服務中刪除匹配的度量指標和標簽列表:

    DELETE /api/v1/series

    URL查詢參數

    match[]=<series_selector>: 刪除符合series_selector匹配器的時間序列數據。參數個數必須大于等于1.
    返回JSON數據中的data部分有以下的格式

    {
    “numDeleted”:
    }

    下面的例子刪除符合度量指標名稱是up或者時間序列為process_start_time_seconds{job=“prometheus”}:

    $ curl -XDELETE -g 'http://localhost:9090/api/v1/series?match[]=up&match[]=process_start_time_seconds{job="prometheus"}' {"status" : "success","data" : {"numDeleted" : 3} }

    表達式查詢結果格式

    表達式查詢結果格式
    表達式查詢結果,在data部分的result部分中,返回下面的數據。<sample_value>占位符有數值樣本值。JSON不支持特殊浮點值,例如:NaN, Inf和-Inf。因此樣本值返回結果是字符串,不是原生的數值。

    范圍向量

    范圍向量返回的result類型是一個matrix矩陣。下面返回的結果是result部分的數據格式:

    [{"metric": { "<label_name>": "<label_value>", ... },"values": [ [ <unix_time>, "<sample_value>" ], ... ]},... ]
    瞬時向量

    瞬時向量的result類型是vector。下面是result部分的數據格式

    [{"metric": { "<label_name>": "<label_value>", ... },"value": [ <unix_time>, "<sample_value>" ]},... ]
    Scalars標量

    標量查詢返回result類型是scalar。下面是result部分的數據格式:

    [ <unix_time>, “<scalar_value>” ]

    字符串

    字符串的result類型是string。下面是result部分的數據格式:

    [ <unix_time>, “<string_value>” ]


    啟動

    這是個類似"hello,world"的試驗,教大家怎樣快速安裝、配置和簡單地搭建一個DEMO。你會下載和本地化運行Prometheus服務,并寫一個配置文件,監控Prometheus服務本身和一個簡單的應用,然后配合使用query、rules和圖表展示采樣點數據

    下載和運行Prometheus

    最新下載頁, 然后提取和運行它,so easy:

    tar zxvf prometheus-*.tar.gz cd prometheus-*

    在開始啟動Prometheus之前,我們要配置它

    配置Prometheus監控自身

    Prometheus從目標機上通過http方式拉取采樣點數據, 它也可以拉取自身服務數據并監控自身的健康狀況

    當然Prometheus服務拉取自身服務采樣數據,并沒有多大的用處,但是它是一個好的DEMO。保存下面的Prometheus配置,并命名為:prometheus.yml:

    global:scrape_interval: 15s # 默認情況下,每15s拉取一次目標采樣點數據。# 我們可以附加一些指定標簽到采樣點度量標簽列表中, 用于和第三方系統進行通信, 包括:federation, remote storage, Alertmanagerexternal_labels:monitor: 'codelab-monitor'# 下面就是拉取自身服務采樣點數據配置 scrape_configs:# job名稱會增加到拉取到的所有采樣點上,同時還有一個instance目標服務的host:port標簽也會增加到采樣點上- job_name: 'prometheus'# 覆蓋global的采樣點,拉取時間間隔5sscrape_interval: 5sstatic_configs:- targets: ['localhost:9090']

    對于一個完整的配置選項,請見配置文檔

    啟動Prometheus

    指定啟動Prometheus的配置文件,然后運行

    ./prometheus --config.file=prometheus.yml

    這樣Prometheus服務應該起來了。你可以在瀏覽器上輸入:http://localhost:9090, 就可以看到Prometheus的監控界面

    你也可以通過輸入http://localhost:9090/metrics,直接拉取到所有最新的采樣點數據集

    使用expression browser(暫翻譯:瀏覽器上輸入表達式)
    為了使用Prometheus內置瀏覽器表達式,導航到http://localhost:9090/graph,并選擇帶有"Graph"的"Console".

    在拉取到的度量采樣點數據中, 有一個metric叫prometheus_target_interval_length_seconds, 兩次拉取實際的時間間隔,在表達式的console中輸入:

    prometheus_target_interval_length_seconds

    這個應該會返回很多不同的倒排時間序列數據,這些度量名稱都是prometheus_target_interval_length_seconds, 但是帶有不同的標簽列表值,這些標簽列表值指定了不同的延遲百分比和目標組間隔

    如果我們僅僅對99%的延遲感興趣,則我們可以使用下面的查詢去清洗信息:

    prometheus_target_interval_length_seconds{quantile=“0.99”}

    為了統計返回時間序列數據個數,你可以寫:

    count(prometheus_target_interval_length_seconds)

    有關更多的表達式語言,請見表達式語言文檔

    使用graph interface

    見圖表表達式,導航到http://localhost:9090/graph, 然后使用"Graph" tab

    例如,進入下面表達式,繪圖最近1分鐘產生chunks的速率:

    rate(prometheus_tsdb_head_chunks_created_total[1m])

    啟動其他一些采樣目標
    Go客戶端包括了一個例子,三個服務只見的RPC調用延遲

    首先你必須有Go的開發環境,然后才能跑下面的DEMO, 下載Prometheus的Go客戶端,運行三個服務:

    git clone https://github.com/prometheus/client_golang.git
    cd client_golang/examples/random
    go get -d
    go build
    ## 啟動三個服務
    ./random -listen-address=:8080
    ./random -listen-address=:8081
    ./random -listen-address=:8082

    現在你在瀏覽器輸入:http://localhost:8080/metrics, http://localhost:8081/metrics, http://localhost:8082/metrics, 能看到所有采集到的采樣點數據

    配置Prometheus去監控這三個目標服務

    現在我們將會配置Prometheus,拉取三個目標服務的采樣點。我們把這三個目標服務組成一個job, 叫example-radom. 然而,想象成,前兩個服務是生產環境服務,后者是測試環境服務。我們可以通過group標簽分組,在這個例子中,我們通過group="production"標簽和group="test"來區分生產和測試

    scrape_configs:- job_name: 'example-random'scrape_interval: 5sstatic_configs:- targets: ['localhost:8080', 'localhost:8081']labels:group: 'production'- targets: ['localhost:8082']labels:group: 'test'

    進入瀏覽器,輸入rpc_duration_seconds, 驗證Prometheus所拉取到的采樣點中每個點都有group標簽,且這個標簽只有兩個值production, test

    聚集到的采樣點數據配置規則

    上面的例子沒有什么問題, 但是當采樣點海量時,計算成了瓶頸。查詢、聚合成千上萬的采樣點變得越來越慢。為了提高性能,Prometheus允許你通過配置文件設置規則,對表達式預先記錄為全新的持續時間序列。讓我們繼續看RPCs的延遲速率(rpc_durations_seconds_count), 如果存在很多實例,我們只需要對特定的job和service進行時間窗口為5分鐘的速率計算,我們可以寫成這樣:

    avg(rate(rpc_durations_seconds_count[5m])) by (job, service)

    為了記錄這個計算結果,我們命名一個新的度量:job_service:rpc_durations_seconds_count:avg_rate5m, 創建一個記錄規則文件,并保存為prometheus.rules.yml:

    groups: - name: examplerules:- record: job_service:rpc_durations_seconds_count:avg_rate5mexpr: avg(rate(rpc_durations_seconds_count[5m])) by (job, service)

    然后再在Prometheus配置文件中,添加rule_files語句到global配置區域, 最后配置文件應該看起來是這樣的:

    global:scrape_interval: 15s # By default, scrape targets every 15 seconds.evaluation_interval: 15s # Evaluate rules every 15 seconds.# Attach these extra labels to all timeseries collected by this Prometheus instance.external_labels:monitor: 'codelab-monitor'rule_files:- 'prometheus.rules.yml'scrape_configs:- job_name: 'prometheus'# Override the global default and scrape targets from this job every 5 seconds.scrape_interval: 5sstatic_configs:- targets: ['localhost:9090']- job_name: 'example-random'# Override the global default and scrape targets from this job every 5 seconds.scrape_interval: 5sstatic_configs:- targets: ['localhost:8080', 'localhost:8081']labels:group: 'production'- targets: ['localhost:8082']labels:group: 'test'

    然后重啟Prometheus服務,并指定最新的配置文件,查詢并驗證job_service:rpc_durations_seconds_count:avg_rate5m度量指標

    可視化

    Grafana

    Grafana支持Prometheus可視化

    Grafana支持Prometheus查詢。從Grafana 2.5.0 (2015-10-28)開始Prometheus可以作為它的數據源。

    下面的例子:Prometheus查詢在Grafana Dashboard界面的圖表展示

    Grafana安裝
    如果要Grafana的完整安裝教程,詳見Grafana官方文檔
    在Linux安裝Grafana,如下所示:

    # Download and unpack Grafana from binary tar (adjust version as appropriate). curl -L -O https://grafanarel.s3.amazonaws.com/builds/grafana-2.5.0.linux-x64.tar.gz tar zxf grafana-2.5.0.linux-x64.tar.gz# Start Grafana. cd grafana-2.5.0/ ./bin/grafana-server web

    使用方法

    默認情況下,Grafana服務端口http://localhost:3000。默認登錄用戶名和密碼“admin/admin”。

    創建一個Prometheus數據源
    為了創建一個Prometheus數據源Data source:

    點擊Grafana的logo,打開工具欄。
    在工具欄中,點擊"Data Source"菜單。
    點擊"Add New"。
    數據源Type選擇“Prometheus”。
    設置Prometheus服務訪問地址(例如:http://localhost:9090)。
    調整其他想要的設置(例如:關閉代理訪問)。
    點擊“Add”按鈕,保存這個新數據源。
    下面顯示了一個Prometheus數據源配置例子:

    創建一個Prometheus Graph圖表
    下面是添加一個新的Grafana的標準方法:

    點擊圖表Graph的title,它在圖表上方中間。然后點擊“Edit”。
    在“Metrics”tab下面,選擇你的Prometheus數據源(下面右邊)。
    在“Query”字段中輸入你想查詢的Prometheus表達式,同時使用“Metrics”字段通過自動補全查找度量指標。
    為了格式化時間序列的圖例名稱,使用“Legend format”圖例格式輸入。例如,為了僅僅顯示這個標簽為method和status的查詢結果,你可以使用圖例格式{{method{} - {{status}}。
    調節其他的Graph設置,知道你有一個工作圖表。
    下面顯示了一個Prometheus圖表配置:

    從Grafana.net導入預構建的dashboard

    Grafana.net維護一個共享儀板表,它們能夠被下載,并在Grafana服務中使用。使用Grafana.net的“Filter”選項去瀏覽來自Prometheus數據源的dashboards

    你當前必須手動編輯下載下來的JSON文件和更改datasource: 選擇Prometheus服務作為Grafana的數據源,使用“Dashboard”->“Home”->"Import"選項去導入編輯好的dashboard文件到你的Grafana中。

    控制模板

    控制模板允許使用Go語言模板創建任意的console。這些由Prometheus服務提供

    Getting started

    Prometheus提供了一系列的控制模板來幫助您。這些可以在Prometheus服務上的console/index.html.example中找到,如果Prometheus服務正在刪除帶有標簽job="node"的Node Exporter, 則會顯示NodeExporter控制臺

    這個例子控制臺包括5部分:

    • 在頂部的導航欄
    • 左邊的一個菜單
    • 底部的時間控制
    • 在中心的主內容,通常是圖表
    • 右邊的表格

    這個導航欄是鏈接到其他系統,例如Prometheus其他方面的文檔,以及其他任何使你明白的。該菜單用于在同一個Prometheus服務中導航,它可以快速在另一個tar中打開一個控制臺。這些都是在console_libraries/menu.lib中配置。

    時間控制臺允許持久性和圖表范圍的改變。控制臺URLs能夠被分享,并且在其他的控制臺中顯示相同的圖表。

    主要內容通常是圖表。這里有一個可配置的JavaScript圖表庫,它可以處理來自Prometheus服務的請求,并通過Rickshaw來渲染

    最后,在右邊的表格可以用筆圖表更緊湊的形式顯示統計信息。

    例子控制臺

    這是一個最基本的控制臺。它顯示任務的數量,其中CPU平均使用率、以及右側表中的平均內存使用率。主要內容具有每秒查詢數據。

    {{template "head" .}}{{template "prom_right_table_head"}} <tr><th>MyJob</th><th>{{ template "prom_query_drilldown" (args "sum(up{job='myjob'})") }}/ {{ template "prom_query_drilldown" (args "count(up{job='myjob'})") }}</th> </tr> <tr><td>CPU</td><td>{{ template "prom_query_drilldown" (args"avg by(job)(rate(process_cpu_seconds_total{job='myjob'}[5m]))""s/s" "humanizeNoSmallPrefix") }}</td> </tr> <tr><td>Memory</td><td>{{ template "prom_query_drilldown" (args"avg by(job)(process_resident_memory_bytes{job='myjob'})""B" "humanize1024") }}</td> </tr> {{template "prom_right_table_tail"}}{{template "prom_content_head" .}} <h1>MyJob</h1><h3>Queries</h3> <div id="queryGraph"></div> <script> new PromConsole.Graph({node: document.querySelector("#queryGraph"),expr: "sum(rate(http_query_count{job='myjob'}[5m]))",name: "Queries",yAxisFormatter: PromConsole.NumberFormatter.humanizeNoSmallPrefix,yHoverFormatter: PromConsole.NumberFormatter.humanizeNoSmallPrefix,yUnits: "/s",yTitle: "Queries" }) </script>{{template "prom_content_tail" .}}{{template "tail"}}

    模板部分不翻譯了,建議用Grafana

    工具

    客戶端

    客戶端庫

    在你能夠監控你的服務器之前,你需要通過Prometheus客戶端庫把監控的代碼放在被監控的服務代碼中。下面實現了Prometheus的度量指標類型metric types。

    選擇你需要的客戶端語言,在你的服務實例上通過HTTP端口提供內部度量指標

    • Go
    • Java or Scala
    • Python
    • Ruby
      當Prometheus獲取實例的HTTP端點時,客戶庫發送所有跟蹤的度量指標數據到服務器上。

    如果沒有可用的客戶端語言版本,或者你想要避免依賴,你也可以實現一個支持的導入格式到度量指標數據中。

    在實現一個新的Prometheus客戶端庫時,請遵循客戶端指南。注意,這個文檔在仍然在更新中。同時也請關注開發郵件列表。我們非常樂意地給出合適的意見或者建議。

    總結

    以上是生活随笔為你收集整理的开源监控Prometheus介绍,安装,配置,使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    波多野结衣动态图 | 亚洲黄色在线播放 | 操操碰| 日韩精品在线一区 | 五月婷av | 在线观看成人网 | 一本一本久久a久久精品综合 | 色爽网站 | 成人免费xxx在线观看 | 亚洲欧美婷婷六月色综合 | 超碰免费成人 | 久久亚洲精品电影 | 国语麻豆 | 色国产精品一区在线观看 | 麻豆91在线播放 | 久久亚洲精品国产亚洲老地址 | 亚洲 在线 | 午夜视频在线观看一区 | 美女视频黄免费的久久 | 亚洲国产影院 | 在线观看免费福利 | 99精品视频免费在线观看 | 日日夜夜天天操 | 成人免费在线观看电影 | 97香蕉久久超级碰碰高清版 | 五月婷婷一级片 | 成人黄色大片网站 | 国产日韩中文字幕 | 人人爱爱 | 日韩成人免费观看 | 九色91在线视频 | 在线观看国产一区二区 | 成人污视频在线观看 | 99久久精品国产一区二区成人 | 欧美巨大荫蒂茸毛毛人妖 | 亚洲日本一区二区在线 | 国产专区在线视频 | 激情网五月天 | 99在线热播| 色九九视频 | 成年人免费av | 国产成人三级在线播放 | 91av在线视频播放 | 国产精品一区二区62 | 国产亚洲小视频 | 免费人做人爱www的视 | 99精品久久久久久久久久综合 | 日韩一区二区免费播放 | av超碰免费在线 | 狠狠久久综合 | 亚洲成人黄色 | 欧美在线观看视频 | 亚洲激情影院 | 欧美一级片免费在线观看 | 国产日韩精品一区二区三区 | 黄污在线观看 | 日韩专区在线 | 国产视频日本 | 欧美一级免费黄色片 | 蜜臀av性久久久久av蜜臀三区 | 免费在线观看黄色网 | 最新久久免费视频 | 深夜免费小视频 | 亚洲国产日韩一区 | 92中文资源在线 | 国产一区免费在线观看 | 91亚洲激情 | 91精品国产91久久久久 | 国产一二三区av | 日韩欧美国产免费播放 | 欧美日韩不卡在线观看 | 天天干天天干天天 | 日本中文字幕在线视频 | 免费高清影视 | a级国产乱理论片在线观看 特级毛片在线观看 | 免费情趣视频 | 中文在线免费看视频 | 一区二区精品国产 | 久久精品一二三区白丝高潮 | 久久草草影视免费网 | 中文字幕日韩精品有码视频 | 在线免费av播放 | 黄色毛片大全 | 国产91精品一区二区麻豆亚洲 | 免费亚洲精品视频 | 四虎海外影库www4hu | 久久久久久久99精品免费观看 | 国产成人一区二区啪在线观看 | 黄色成人av在线 | 国产高清永久免费 | 中文字幕 在线看 | 欧美日韩破处 | 久久综合久久久 | 国产精品久久久久久久久搜平片 | 97超碰在线久草超碰在线观看 | 亚洲综合黄色 | 亚洲激情在线 | www.久草.com | 欧美性生活一级片 | 日韩美女免费线视频 | 亚洲精品456在线播放乱码 | 久久精品久久99精品久久 | 久久99精品热在线观看 | 最新中文字幕视频 | 色综合久久精品 | 日韩欧美精品一区二区三区经典 | 激情五月***国产精品 | 国产精品尤物 | 国产99黄| 色综合天天色综合 | 玖玖玖国产精品 | 欧美色黄| 久久精品成人热国产成 | 人人干在线观看 | 日韩视频在线不卡 | 久久免费一级片 | 日韩免费一区二区三区 | 中文字幕精品三级久久久 | 黄色影院在线免费观看 | 九色精品在线 | 日韩在线视频在线观看 | 免费在线观看成人av | 91九色最新地址 | 91视频成人免费 | 精品国产123 | 玖玖视频网 | 成人av在线一区二区 | 欧美精品久久久久久久久久久 | a级国产乱理伦片在线观看 亚洲3级 | 在线看毛片网站 | 日本久热| 天天摸天天操天天舔 | 在线 视频 一区二区 | 四虎在线免费 | 在线免费观看国产 | 国产成人福利在线观看 | 久久精品婷婷 | 高清不卡一区二区在线 | 国偷自产中文字幕亚洲手机在线 | 国产黄色av | 免费观看福利视频 | 亚洲国产成人精品电影在线观看 | 99自拍视频在线观看 | 一区二区三区在线观看 | 亚洲精品视频大全 | 亚洲精品乱码久久久久久久久久 | 天天操天天干天天操天天干 | 99精品欧美一区二区蜜桃免费 | 麻豆国产露脸在线观看 | 国产免费不卡 | 精品国产亚洲在线 | 国产精品国产亚洲精品看不卡 | 国产视频在线观看一区二区 | 亚洲黄色在线观看 | 亚洲精品国产免费 | 欧美精品久久久久久久久老牛影院 | 亚洲天堂香蕉 | 99精品久久久久久久久久综合 | 欧美精品中文 | 免费在线观看中文字幕 | 国产精品永久久久久久久久久 | 日日夜夜狠狠操 | 国产资源在线观看 | 国内精品久久久久久久97牛牛 | 国产精品国产亚洲精品看不卡 | 在线观看中文av | 午夜一级免费电影 | 亚洲自拍自偷 | 国产成人精品一区二区 | 久久99精品久久久久久久久久久久 | 九色porny真实丨国产18 | av成人在线观看 | 精品国产成人av | 最新av中文字幕 | 91成人精品| 国产精品一区二区三区久久 | 国产精品久久久久永久免费 | 九九久久电影 | 免费视频91蜜桃 | 国产一级片一区二区三区 | 国产一级不卡毛片 | 国产精品久久久久久久久蜜臀 | 欧美成年网站 | 四虎影视av | 99一级片| 日韩免费视频在线观看 | 久久成人视屏 | 国产精品对白一区二区三区 | av片在线看 | 亚洲精品午夜国产va久久成人 | 三级视频国产 | 中文字幕在线有码 | 欧美激情精品久久久久久免费印度 | 操少妇视频 | 天天色天天上天天操 | 国产精品 中文在线 | 六月天综合网 | 国产区精品区 | 麻豆传媒视频观看 | wwwav视频 | 性色av免费在线观看 | 午夜国产福利在线观看 | 国产视频 亚洲视频 | 成人在线视频网 | 婷婷亚洲五月色综合 | 四季av综合网站 | 欧美日韩视频免费 | 免费av成人在线 | 日日夜夜精品视频 | 蜜臀久久99精品久久久无需会员 | 午夜视频在线观看一区二区 | 日韩a在线播放 | 国产伦精品一区二区三区… | 成人国产精品久久久春色 | 精品国产欧美一区二区三区不卡 | 久久久三级视频 | 亚洲免费在线观看视频 | 日本中文字幕观看 | 午夜私人影院 | 五月天六月婷 | 日韩精品一卡 | 视频国产在线 | 亚洲黄色一级电影 | 国产精品久久电影网 | 黄色毛片在线看 | 丰满少妇久久久 | 四虎国产免费 | 波多野结衣电影一区二区 | 欧美视频99 | 欧美综合在线视频 | 日韩精品久久久久久久电影99爱 | 蜜桃视频在线视频 | 欧美日韩国产一区二区三区在线观看 | 人人澡超碰碰 | 黄色小说视频在线 | 日韩精品高清视频 | 国产精品一区电影 | 国产一区视频在线 | 中文字幕国语官网在线视频 | 日本最大色倩网站www | 亚洲欧洲精品一区 | 五月天婷婷狠狠 | a电影免费看 | 国产精品免费不卡 | 日本久热| 国产在线观看免费 | 亚洲在线色| 97精品超碰一区二区三区 | 97在线观看视频免费 | 日韩精品91偷拍在线观看 | 欧美日韩精品在线观看视频 | 四虎影视国产精品免费久久 | 丁香婷婷社区 | 人人爽人人干 | 国产第一页在线播放 | 国产v欧美 | 黄色的网站免费看 | 最近日韩免费视频 | 久久这里只有精品9 | 欧美成人亚洲 | 一区二区三区在线电影 | 欧美无极色| 久久久一本精品99久久精品66 | 亚洲一级片在线观看 | 99精品国产99久久久久久97 | 国产精品久久伊人 | 婷婷中文在线 | 97网站 | 婷婷视频在线播放 | 久久久久久久久久久福利 | 中文字幕永久免费 | 精品视频99 | 玖玖色在线观看 | 久久深夜福利免费观看 | 久草电影在线观看 | 亚洲精品国产精品国自产 | 亚洲精品视频在线观看视频 | 91久久爱热色涩涩 | 欧美日韩在线观看一区二区三区 | 伊人婷婷网 | 999久久国产精品免费观看网站 | 色免费在线 | 国产精品久久影院 | 久久影视精品 | 久久观看最新视频 | 亚洲91av| 欧美精品久久99 | 手机看片 | 91香蕉视频| 日日夜夜噜噜噜 | 成人欧美一区二区三区黑人麻豆 | 国产精品久久久99 | 激情五月看片 | 国产五月天婷婷 | 91黄色免费网站 | 五月婷婷丁香 | 黄色小视频在线观看免费 | 97成人精品 | 欧美日韩精品影院 | 激情婷婷av | 国产色网站 | 日韩午夜精品福利 | 久久黄色美女 | 国产丝袜高跟 | 欧美性爽爽 | 久久国语露脸国产精品电影 | 国产精品爽爽久久久久久蜜臀 | 狠狠五月天 | 美女视频一区 | 日韩在线视频不卡 | 欧美日韩亚洲精品在线 | 丁香影院在线 | 午夜精品久久久久99热app | 色搞搞 | 日韩欧美高清 | 欧美一区二区三区不卡 | 成人电影毛片 | 婷婷激情五月 | 国产精品久久视频 | 国产91在线观 | 久久成人一区 | 五月婷香蕉久色在线看 | 色婷婷久久久综合中文字幕 | 日日婷婷夜日日天干 | www免费视频com━ | 国产激情小视频在线观看 | 欧美激情视频在线免费观看 | 色天天| 99r在线 | 精品国产一区二区三区久久久 | 国产一级性生活视频 | 久草在线国产 | 久久精品视频免费观看 | 黄色精品在线看 | 99资源网| 九九视频免费在线观看 | 日韩精品你懂的 | 国产精品久久久久久久免费大片 | 日本在线观看中文字幕 | 在线看片成人 | 亚洲h在线播放在线观看h | 丁香5月婷婷久久 | 91亚洲国产成人 | 日韩精品无码一区二区三区 | 色婷婷久久一区二区 | 欧美精品在线视频 | 视频在线观看入口黄最新永久免费国产 | 国产中文a | 国产又粗又猛又黄 | 精品亚洲成人 | 久久蜜臀一区二区三区av | 久久色在线观看 | 99精品一区 | 伊人五月天婷婷 | 成人禁用看黄a在线 | 午夜精品一区二区三区在线 | 国产69精品久久99不卡的观看体验 | 在线免费性生活片 | 日韩高清久久 | 国产精品丝袜久久久久久久不卡 | 日韩精品中文字幕在线播放 | 婷婷www| 亚洲激情综合网 | 久久久综合香蕉尹人综合网 | 国产精品免费一区二区三区 | www.久久色.com| 色com网| 久久成人精品电影 | 草久在线 | 成人国产精品av | 成人免费观看电影 | 一级一片免费观看 | 91视频国产免费 | 黄色软件在线看 | 亚洲精品成人网 | 久久久久草 | 少妇精品久久久一区二区免费 | 亚洲国产一区av | 在线观看一级视频 | 激情xxxx| 超碰大片 | 99国产视频在线 | 久久9999久久免费精品国产 | 99精品视频在线观看 | 超碰国产在线播放 | 九九免费在线观看视频 | 日韩在线免费不卡 | 久久只精品99品免费久23小说 | 中文字幕专区高清在线观看 | av久久在线 | 日韩aⅴ视频 | 欧美久久久久久久久中文字幕 | 国产精品1区 | 黄色1级毛片 | 久久久精品国产免费观看同学 | 亚洲精品国产精品久久99热 | 天天插天天干 | 久草在线高清 | 欧美日韩中文字幕视频 | 91在线亚洲 | 亚洲国产成人在线播放 | 欧美色图88 | 超碰av在线免费观看 | 69国产成人综合久久精品欧美 | 亚洲国产精品成人va在线观看 | 狠狠躁18三区二区一区ai明星 | 国产精品免费麻豆入口 | 日日夜夜人人天天 | 色噜噜在线观看视频 | 91一区二区三区在线观看 | 91tv国产成人福利 | 国产在线观 | 久久色中文字幕 | 久久综合九色综合久99 | 在线观看91网站 | 五月婷婷激情综合 | 欧美在线视频精品 | 日韩a在线看 | 免费高清在线观看成人 | 亚洲午夜精品在线观看 | 色综合久久综合 | 在线国产小视频 | 视频二区在线 | 国产精品一区二区果冻传媒 | 色播五月激情综合网 | 首页中文字幕 | 在线国产一区二区 | 极品久久久久 | 久久天堂网站 | 六月婷婷久香在线视频 | 嫩草av在线 | 97视频人人澡人人爽 | 最近中文字幕国语免费高清6 | 久久久精品国产免费观看同学 | 国产福利一区二区在线 | 国产精品99页| 成人黄色国产 | 天天色视频 | 国产91亚洲 | 91精品导航 | 精品视频久久久 | 日韩在线观看一区二区 | 日本精品一区二区三区在线观看 | 在线观看黄网 | 久久激情婷婷 | 在线观看精品一区 | 欧美 另类 交 | 免费看的av片 | 国产精品国产精品 | 天天艹日日干 | 91视频免费网址 | 欧美激情视频一区二区三区免费 | 在线观看av中文字幕 | 亚洲色图色 | 在线视频手机国产 | 久久午夜影院 | 91精品综合在线观看 | 韩国av免费在线 | 91豆花在线观看 | 欧美日韩一区二区三区在线免费观看 | 日本精品一区二区三区在线观看 | 欧美极品xxx | 中文字幕91 | 日韩激情视频 | 91av原创| 夜夜爽天天爽 | 97免费中文视频在线观看 | 国内精品久久久久久久影视麻豆 | 狠狠干五月天 | 99热最新地址 | 友田真希x88av | 日韩中文字幕第一页 | 99操视频 | 中文av在线免费观看 | 亚州成人av在线 | 国产成人精品午夜在线播放 | 91高清在线看 | 97视频在线免费 | 久久久国产精品人人片99精片欧美一 | 青青五月天| 婷婷婷国产在线视频 | 玖玖在线观看视频 | 欧美综合色在线图区 | 大胆欧美gogo免费视频一二区 | 91精品啪在线观看国产线免费 | 99在线免费观看视频 | 中文字幕av在线播放 | 亚洲欧美999| 国产18精品乱码免费看 | 中文字幕在线第一页 | 激情导航 | 九九免费在线视频 | 精品99在线观看 | 九九视频免费在线观看 | 亚洲精品国产精品久久99热 | 成人免费视频网 | 婷婷性综合 | 天天躁日日躁狠狠躁av中文 | 国产精品久久久久久久久久久久 | 激情综合色综合久久综合 | 天天操天天干天天干 | 一区在线播放 | 少妇视频在线播放 | 久久精品国产一区二区三 | 81精品国产乱码久久久久久 | 九九在线国产视频 | 国产黄影院色大全免费 | 日韩精品影视 | 五月天网页 | 日韩免费一二三区 | 人人爽人人搞 | 狠狠色狠狠色合久久伊人 | 国产99视频在线观看 | 在线观看黄网站 | 欧美一级日韩免费不卡 | 久久久国产在线视频 | 久久er99热精品一区二区 | 日韩午夜精品 | 久久久久久久久久久综合 | 福利视频午夜 | 国产精品av电影 | 国产精品av在线免费观看 | 最新不卡av | 青春草免费在线视频 | 在线黄色免费av | 一区在线观看 | 国内精品视频在线 | 午夜999 | 成人午夜网址 | 国产中文字幕在线播放 | 伊人开心激情 | 日韩二区三区在线 | 免费看黄在线网站 | 天天躁日日躁狠狠 | 九九爱免费视频在线观看 | 最近中文字幕视频网 | 国产精品网址在线观看 | 97成人在线观看 | 国产99精品| 91大神免费在线观看 | 国产黄色在线网站 | 9797在线看片亚洲精品 | 99久久99视频只有精品 | 亚洲资源在线 | 亚洲五月激情 | 国产精品久久久久久影院 | 在线影视 一区 二区 三区 | 91视频传媒| 99精品视频99 | 九九免费在线观看视频 | 91.麻豆视频 | 国产一区视频免费在线观看 | 毛片区| 日韩免费电影在线观看 | 亚洲成a人片综合在线 | 国产在线中文字幕 | 国产玖玖在线 | 免费中文字幕视频 | 狠狠色丁香久久婷婷综合_中 | 日韩在线视频在线观看 | 91污在线| 午夜.dj高清免费观看视频 | 午夜精品99久久免费 | 天天操天天操天天操天天操 | 国产 日韩 欧美 中文 在线播放 | 国产成人一区二区三区电影 | 日韩黄色大片在线观看 | 国产玖玖视频 | 精品国产欧美一区二区 | 日本中文字幕网站 | 天天干天天做 | 色婷婷啪啪免费在线电影观看 | 亚洲欧洲精品一区二区精品久久久 | 肉色欧美久久久久久久免费看 | 国产精品久久久久久久久久久久午夜片 | 狠狠色丁香婷综合久久 | 人人添人人 | 96亚洲精品久久 | 国产91区| 激情伊人五月天 | 一区二区三区免费 | 蜜臀久久99静品久久久久久 | 国产黄色免费看 | 国产精品99久久久久久有的能看 | 精品二区视频 | 久久国产精品一区二区三区四区 | 国产中文视频 | 欧美日韩在线观看一区二区 | 91久色蝌蚪| 免费在线观看av网站 | 在线免费中文字幕 | 久久婷五月 | se婷婷 | av在线专区| 91亚洲精品国偷拍自产在线观看 | 午夜精品一二三区 | 国产福利小视频在线 | 精品国产视频在线观看 | 久久人人爽av | 色婷婷激情五月 | 天堂av免费 | 久操视频在线观看 | 999国内精品永久免费视频 | 91亚洲精品乱码久久久久久蜜桃 | 福利网在线 | 日本久久综合网 | 久久综合九色综合97_ 久久久 | 欧美日本啪啪无遮挡网站 | 亚洲欧美日韩国产一区二区三区 | 在线观看国产一区二区 | 能在线看的av | 天天色宗合| 国产露脸91国语对白 | 六月久久婷婷 | 国产色婷婷精品综合在线手机播放 | 99久久999久久久精玫瑰 | 日韩精品免费一区二区在线观看 | 国产在线播放不卡 | 韩国av一区二区 | 久久免费视频在线 | 国产免费视频一区二区裸体 | av在线免费在线观看 | 久久xxxx| 婷婷成人综合 | 9幺看片 | 日本久久综合视频 | 日日夜日日干 | 久久在线免费观看视频 | 视频一区二区精品 | 一区二区亚洲精品 | 国产又粗又长的视频 | 91自拍视频在线观看 | 色天天综合网 | 五月婷婷中文网 | 亚洲最新av| 91在线免费视频 | 91九色蝌蚪视频网站 | 九九亚洲精品 | 免费av免费观看 | 偷拍精品一区二区三区 | 欧美日韩在线网站 | 色婷婷狠狠操 | 色吊丝在线永久观看最新版本 | 久久久蜜桃一区二区 | 色五丁香 | 黄色成人毛片 | 久久精品三级 | 国产视频一区在线播放 | 国产又粗又猛又爽又黄的视频先 | 亚洲精品456在线播放第一页 | 亚洲男男gⅴgay双龙 | 婷婷视频在线 | 亚洲va欧洲va国产va不卡 | 国产精品区一区 | 中文字幕久久久精品 | 精品99999| 911在线 | 日韩欧美视频在线播放 | 国产五码一区 | 国产一级不卡视频 | 欧美成年黄网站色视频 | 国产91精品高清一区二区三区 | 国产精品私人影院 | 亚洲高清视频在线 | 日韩精品一区二区三区在线播放 | 久草久草在线观看 | www免费看 | 欧美性受极品xxxx喷水 | 在线国产能看的 | 综合久久久久久久久 | 国产又粗又硬又爽视频 | 日韩欧美精品免费 | 国产精品久久久久aaaa九色 | 韩日三级在线 | 欧美日韩不卡一区二区 | 国产麻豆精品传媒av国产下载 | 人人精品久久 | 99精品视频精品精品视频 | 国产成人久久av977小说 | 国产精品一区二区久久久久 | av免费观看网址 | 国产成人精品久 | 99精品黄色 | 亚洲一级黄色大片 | 日本久久综合视频 | 国产精品6999成人免费视频 | 午夜免费久久看 | 99视频这里只有 | 欧美成a人片在线观看久 | 69国产盗摄一区二区三区五区 | 激情偷乱人伦小说视频在线观看 | 亚洲激情在线观看 | 中文字幕乱偷在线 | 96久久久 | 激情av综合 | 97超碰.com| 西西4444www大胆无视频 | 亚洲黄色免费电影 | 国产成人精品免高潮在线观看 | a特级毛片| 欧美伦理一区 | 日韩av在线一区二区 | 日韩中文字幕在线观看 | 色综合久久久久久中文网 | 亚洲成人黄色 | 亚洲va欧美va人人爽 | 激情伊人 | 国产中文字幕网 | 日韩女同一区二区三区在线观看 | 国产成人黄色在线 | 国产精品电影一区 | 日韩av一卡二卡三卡 | 成人黄色电影免费观看 | 日韩欧美在线观看一区二区 | 日韩av在线免费看 | 亚洲免费在线看 | 色婷久久 | 国产精品久久久久久久久久妇女 | 久久经典视频 | 精品亚洲va在线va天堂资源站 | 欧美一区成人 | 特级a毛片 | 国产精品99久久久久久大便 | 国产无遮挡又黄又爽在线观看 | 激情av在线播放 | 99中文字幕视频 | 激情婷婷av | 久操97| 亚洲一区二区三区四区精品 | 91视频88av | 特级黄色片免费看 | 九九热免费视频在线观看 | 成人黄色在线看 | 四虎在线免费观看 | 三级视频日韩 | 狠狠成人 | av网站在线观看播放 | 国产成人99av超碰超爽 | 欧美在线久久 | av丁香| 婷婷丁香在线视频 | 一区在线观看视频 | 激情综合六月 | 在线观看一区二区精品 | 欧美精品一区二区蜜臀亚洲 | a色视频| 欧美日韩成人 | 久久精品99国产精品日本 | 国产一级在线免费观看 | 亚洲精品免费在线观看视频 | 久久九九精品 | 亚洲最大免费成人网 | 欧美日韩视频 | 久久久亚洲国产精品麻豆综合天堂 | 国产高清视频免费最新在线 | 天天操天天弄 | 亚洲欧美成人 | 精品毛片久久久久久 | 免费在线播放av电影 | 美女视频永久黄网站免费观看国产 | 草久久av | 亚洲丝袜一区 | 一本到视频在线观看 | 亚洲人视频在线 | 色插综合| 免费a网站 | 成人在线免费小视频 | 黄免费在线观看 | 美女久久一区 | 亚洲天堂在线观看完整版 | 日韩精品一区二区三区三炮视频 | 91成品视频 | 日韩欧美国产成人 | 国产精品久久久久久久婷婷 | 国产精品va在线 | 高清不卡毛片 | 韩国在线一区二区 | 色综合天天在线 | 久久精品一 | 天天色视频 | 日韩aa视频 | 国产精品粉嫩 | 中文字幕色婷婷在线视频 | 国产午夜小视频 | 成人久久久久久久久久 | 在线国产激情视频 | av高清一区二区三区 | 视频国产一区二区三区 | 欧美日韩不卡在线观看 | 久久免费av电影 | 久久久久在线观看 | 免费a级大片 | 成人午夜网址 | 99热手机在线观看 | 丁香六月婷 | 欧美日韩在线电影 | 少妇bbb好爽| 亚洲国内精品在线 | 日韩精品你懂的 | 去看片 | 手机成人在线电影 | 中中文字幕av在线 | 最新99热| 在线免费看片 | 伊人狠狠色丁香婷婷综合 | 很黄很污的视频网站 | 国产日韩欧美在线观看视频 | av在线直接看 | 99福利片 | 92中文资源在线 | 色小说av | 亚洲成人网在线 | 国产xxxx做受性欧美88 | 久久久久精 | 天堂av在线7 | 91精品天码美女少妇 | 天天拍天天操 | 久久天天躁狠狠躁夜夜不卡公司 | 成人久久久久久久久久 | 射射射av| 欧美日韩一区二区三区免费视频 | 国产精品第一页在线 | 性色视频在线 | 久久精品波多野结衣 | 亚洲精品视频二区 | 国产精品成人av电影 | 色94色欧美| 国产精品 中文字幕 亚洲 欧美 | 亚州精品成人 | 久热免费 | 日韩欧美在线一区二区 | 亚洲中字幕| 九九亚洲精品 | 欧美国产高清 | 九九热精品在线 | 亚洲国产精品久久久久久 | 欧美国产精品一区二区 | 黄色大片日本免费大片 | 亚洲精品小视频 | 欧美日韩二三区 | 97av在线视频 | 国产资源免费在线观看 | 亚洲一级电影在线观看 | 蜜桃视频日韩 | 久久观看最新视频 | 天天艹天天操 | 右手影院亚洲欧美 | 不卡精品| 在线综合色 | 日韩一级电影在线 | 69成人在线| 免费日p视频 | 草免费视频 | 黄色免费观看 | 中文字幕一区二区三区精华液 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 五月婷婷激情五月 | 国产精品入口麻豆 | 国产精品一区二区久久 | 国产精品黄网站在线观看 | 91九色网站 | 国产v在线 | 免费看黄在线看 | www色综合 | 久久综合精品国产一区二区三区 | 免费在线观看av片 | 黄色在线看网站 | 99久久精品国产毛片 | 特黄特黄的视频 | 亚洲性少妇性猛交wwww乱大交 | 亚洲人成人99网站 | 国产成人精品在线观看 | 国产区高清在线 | 日韩在线观看你懂的 | 中文字幕日本电影 | 欧美激情视频免费看 | 91免费在线视频 | 国产成人亚洲在线观看 | 亚洲国产影院av久久久久 | 91色影院 | 久久久久久激情 | 中文字幕在线播放日韩 | 手机成人在线电影 | 欧美一级在线看 | 网址你懂的在线观看 | 久久99视频免费 | 亚洲欧洲精品一区 | 国产中文字幕精品 | 国产成人亚洲精品自产在线 | 91视频91自拍 | 精品亚洲二区 | 91在线免费观看网站 | 激情小说久久 | 女人18毛片90分钟 | 日韩久久久久久久久久 | 国产麻豆精品免费视频 | www.福利| 国产精品成人国产乱 | 亚洲精品在线看 | 亚洲激情六月 | 国产一区久久久 | 中文字幕精品一区二区精品 | www.久久免费视频 | 亚洲精品在线一区二区三区 | av中文字幕在线电影 | 国产在线久久久 | 色婷婷亚洲婷婷 | 最新国产在线观看 | 一区二区三区日韩精品 | 久久99国产一区二区三区 | 久草在线免费看视频 | 天天色天天射天天干 | 日日草夜夜操 | 中文字幕一区二区三区精华液 | 成人在线一区二区 | 奇米影视四色8888 | 日本在线观看中文字幕无线观看 | 六月丁香综合网 | 久久免费视频在线观看 | 久草免费在线观看视频 | 国产又粗又猛又黄又爽视频 | 911精品美国片911久久久 | 91黄色视屏 | 综合久久婷婷 | 91成人在线观看高潮 | 丁香色天天 | 久久视屏网 | 国产一区二区三区 在线 | 成人黄在线 | 国产精品免费久久久久久久久久中文 | 美女精品国产 | 日女人电影 | 免费h精品视频在线播放 | 免费三级影片 | 成人h动漫在线看 | 91看片一区二区三区 | 国产综合在线观看视频 | 久久久www成人免费精品 | 日韩精品免费在线观看视频 | 日韩区在线观看 | 国产精品一区一区三区 | 中文字幕一区二区在线播放 | www.夜夜 | 日韩理论在线视频 | 亚洲成a人片在线观看网站口工 | 综合网五月天 | 一区二精品 | 天天鲁一鲁摸一摸爽一爽 | 特黄一级毛片 | 午夜精品久久久 | 午夜精品久久久久久久99无限制 | 亚洲日韩中文字幕在线播放 | 色wwww| av成人资源 | 992tv在线观看| 超碰在线人人 | 欧美成人999| 成人在线播放视频 | 免费国产亚洲视频 | 日韩av影视| 最新中文字幕 | 国产亚洲午夜高清国产拍精品 | 亚洲高清色综合 | 久久夜色精品国产欧美乱 | 天天se天天cao天天干 | 麻豆视频免费播放 | 四虎影视久久久 | 国产伦理一区二区三区 | 日韩精品一区二区三区外面 | 国产精品自产拍在线观看网站 | 黄网站免费久久 | 欧美最新另类人妖 | 欧美少妇18p | 久久区二区 | 天堂网在线视频 | 国产成人福利在线观看 | 园产精品久久久久久久7电影 | av看片网址 | 91成人免费观看视频 | 91最新在线视频 | 99久久精品国产毛片 | 久久国产精品久久国产精品 | 国产成人久久av977小说 | 狠狠色狠狠色综合日日92 | 91人人人 | 国产黄色特级片 | 成人免费看黄 | 18国产精品福利片久久婷 | 97在线免费观看视频 | 国内精品视频免费 | 91看成人 | 久草视频免费观 | 99这里只有久久精品视频 | 亚洲激色| 日韩网站中文字幕 | 日日碰狠狠躁久久躁综合网 | www.国产视频 | 日韩黄色免费电影 |