国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

高可用 Prometheus 的常見問題

共 12858字,需瀏覽 26分鐘

 ·

2020-10-25 04:39

點擊上方藍色“程序猿DD”,選擇“設為星標”

回復“資源”獲取獨家整理的學習資料!

監(jiān)控系統(tǒng)的歷史悠久,是一個很成熟的方向,而 Prometheus 作為新生代的開源監(jiān)控系統(tǒng),慢慢成為了云原生體系的事實標準,也證明了其設計很受歡迎。本文主要分享在 prometheus 實踐中遇到的一些問題和思考

幾點原則

  • 監(jiān)控是基礎設施,目的是為了解決問題,不要只朝著大而全去做,尤其是不必要的指標采集,浪費人力和存儲資源(To B 商業(yè)產(chǎn)品例外)
  • 需要處理的告警才發(fā)出來,發(fā)出來的告警必須得到處理
  • 簡單的架構就是最好的架構,業(yè)務系統(tǒng)都掛了,監(jiān)控也不能掛,Google SRE 里面也說避免使用 magic 系統(tǒng),例如機器學習報警閾值、自動修復之類。這一點見仁見智吧,感覺很多公司都在搞智能 AI 運維

prometheus 的局限

  • prometheus 是基于 metric 的監(jiān)控,不適用于日志(logs)、事件(event)、調(diào)用鏈(tracing)
  • prometheus 默認是 pull 模型,合理規(guī)劃你的網(wǎng)絡,盡量不用 pushgateway 轉(zhuǎn)發(fā)
  • 對于集群化、水平擴展,官方和社區(qū)都沒有銀彈,合理選擇 federate、cortex、thanos
  • 監(jiān)控系統(tǒng)一般 可用性>一致性,這個后面說 thanos 的時候會提到

合理選擇黃金指標

我們應該關注哪些指標?Google 在“SRE Handbook”中提出了“四個黃金信號”:延遲、流量、錯誤數(shù)、飽和度。實際操作中可以使用 USE 或 RED 方法作為指導,USE 用于資源,RED 用于服務

  • USE 方法:Utilization、Saturation、Errors
  • RED 方法:Rate、Errors、Duration

對 USE 和 RED 的闡述可以參考容器監(jiān)控實踐—K8S 常用指標分析[1]這篇文章

采集組件 all in one

prometheus 體系中 exporter 都是獨立的,每個組件各司其職,如機器資源用 node-exporter,gpu 有 NVIDIA exporter 等等,但是 exporter 越多,運維壓力越大,尤其是對 agent 做資源控制、版本升級。我們嘗試對一些 exporter 進行組合,方案有二:

  1. 通過主進程拉起 n 個 exporter 進程,仍然可以跟著社區(qū)版本更新
  2. 用 telegraf 來支持各種類型的 input,n 合 1

另外,node-exporter 不支持進程監(jiān)控,可以加一個 process-exporter,也可以用上邊提到的 telegraf。

k8s 1.16 中 cadvisor 的指標兼容問題

在 k8s 1.16 版本,cadvisor 的指標去掉了 pod_name 和 container_name 的 label,替換為了 pod 和 container。如果你之前用這兩個 label 做查詢或者 grafana 繪圖,得更改下 sql 了。因為我們一直支持多個 k8s 版本,就通過 relabel 配置繼續(xù)保留了原來的**_name

metric_relabel_configs:
-?source_labels:?[container]
??regex:?(.+)
??target_label:?container_name
??replacement:?$1
??action:?replace
-?source_labels:?[pod]
??regex:?(.+)
??target_label:?pod_name
??replacement:?$1
??action:?replace

注意要用 metric_relabel_configs,不是 relabel_configs,采集后做的 replace。

prometheus 集群內(nèi)與集群外部署

prometheus 如果部署在 k8s 集群內(nèi)采集是很方便的,用官方給的 yaml 就可以,但我們因為權限和網(wǎng)絡需要部署在集群外,二進制運行,專門劃了幾臺高配服務器運行監(jiān)控組件。

以 pod 方式運行在集群內(nèi)是不需要證書的(in-cluster 模式),但集群外需要聲明 token 之類的證書,并替換address。例如:

kubernetes_sd_configs:
-?api_server:?https://xx:6443
??role:?node
??bearer_token_file:?token/xx.token
??tls_config:
????insecure_skip_verify:?true
relabel_configs:
-?separator:?;
??regex:?__meta_kubernetes_node_label_(.+)
??replacement:?$1
??action:?labelmap
-?separator:?;
??regex:?(.*)
??target_label:?__address__
??replacement:?xx:6443
??action:?replace
-?source_labels:?[__meta_kubernetes_node_name]
??separator:?;
??regex:?(.+)
??target_label:?__metrics_path__
??replacement:?/api/v1/nodes/${1}/proxy/metrics/cadvisor
??action:?replace

上面是通過默認配置中通過 apiserver proxy 到 let,如果網(wǎng)絡能通,其實也可以直接把 kubelet 的 10255 作為 target,規(guī)模大的時候還減輕了 apiserver 的壓力,不過這種方式就要寫服務發(fā)現(xiàn)來更新 node 列表了。

gpu 指標的獲取

nvidia-smi 可以查看機器上的 gpu 資源,而 cadvisor 其實暴露了 metric 來表示 容器使用 gpu 情況,

container_accelerator_duty_cycle
container_accelerator_memory_total_bytes
container_accelerator_memory_used_bytes

如果要更詳細的 gpu 數(shù)據(jù),可以安裝dcgm exporter[2],不過 k8s 1.13 才能支持

更改 prometheus 的顯示時區(qū)

prometheus 為避免時區(qū)混亂,在所有組件中專門使用 Unix time 和 UTC 進行顯示。不支持在配置文件中設置時區(qū),也不能讀取本機/etc/timezone 時區(qū)。

其實這個限制是不影響使用的:

  • 如果做可視化,grafana 是可以做時區(qū)轉(zhuǎn)換的
  • 如果是調(diào)接口,拿到了數(shù)據(jù)中的時間戳,你想怎么處理都可以
  • 如果因為 prometheus 自帶的 ui 不是本地時間,看著不舒服,?2.16 版本[3]的新版 webui 已經(jīng)引入了 local timezone 的選項。區(qū)別見下圖
  • 如果你仍然想改 prometheus 代碼來適應自己的時區(qū),可以參考這篇文章[4]

關于 timezone 的討論,可以看這個issue[5]

如何采集 lb 后面的 rs 的 metric

假如你有一個負載均衡 lb,但網(wǎng)絡上 prometheus 只能訪問到 lb 本身,訪問不到后面的 rs,應該如何采集 rs 暴露的 metric?

  • rs 的服務加 sidecar proxy,或者本機增加 proxy 組件,保證 prometheus 能訪問到
  • lb 增加/ backend1 和/ backend2 請求轉(zhuǎn)發(fā)到兩個單獨的后端,再由 prometheus 訪問 lb 采集

版本

prometheus 當前最新版本為 2.16,prometheus 還在不斷迭代,因此盡量用最新版,1.x 版本就不用考慮了。

2.16 版本上有一套實驗 UI,可以查看 TSDB 的狀態(tài),包括 top 10 的 label、metric

prometheus 大內(nèi)存問題

隨著規(guī)模變大,prometheus 需要的 cpu 和內(nèi)存都會升高,內(nèi)存一般先達到瓶頸,這個時候要么加內(nèi)存,要么集群分片減少單機指標。這里我們先討論單機版 prometheus 的內(nèi)存問題

原因:

  • prometheus 的內(nèi)存消耗主要是因為每隔 2 小時做一個 block 數(shù)據(jù)落盤,落盤之前所有數(shù)據(jù)都在內(nèi)存里面,因此和采集量有關。
  • 加載歷史數(shù)據(jù)時,是從磁盤到內(nèi)存的,查詢范圍越大,內(nèi)存越大。這里面有一定的優(yōu)化空間
  • 一些不合理的查詢條件也會加大內(nèi)存,如 group、大范圍 rate

我的指標需要多少內(nèi)存:

  • 作者給了一個計算器,設置指標量、采集間隔之類的,計算 prometheus 需要的理論內(nèi)存值:https://www.robustperception.io/how-much-ram-does-prometheus-2-x-need-for-cardinality-and-ingestion

以我們的一個 promserver 為例,本地只保留 2 小時數(shù)據(jù),95 萬 series,大概占用的內(nèi)存如下:

有什么優(yōu)化方案:

  • sample 數(shù)量超過了 200 萬,就不要單實例了,做下分片,然后通過 victoriametrics,thanos,trickster 等方案合并數(shù)據(jù)
  • 評估哪些 metric 和 label 占用較多,去掉沒用的指標。2.14 以上可以看?tsdb 狀態(tài)[6]
  • 查詢時盡量避免大范圍查詢,注意時間范圍和 step 的比例,慎用 group
  • 如果需要關聯(lián)查詢,先想想能不能通過 relabel 的方式給原始數(shù)據(jù)多加個 label,一條 sql 能查出來的何必用 join,時序數(shù)據(jù)庫不是關系數(shù)據(jù)庫。

prometheus 內(nèi)存占用分析:

  • 通過 pprof 分析:https://www.robustperception.io/optimising-prometheus-2-6-0-memory-usage-with-pprof
  • 1.x 版本的內(nèi)存:https://www.robustperception.io/how-much-ram-does-my-prometheus-need-for-ingestion

相關 issue:

  • https://groups.google.com/forum/#!searchin/prometheus-users/memory%7Csort:date/prometheus-users/q4oiVGU6Bxo/uifpXVw3CwAJ
  • https://github.com/prometheus/prometheus/issues/5723
  • https://github.com/prometheus/prometheus/issues/1881

prometheus 容量規(guī)劃

容量規(guī)劃除了上邊說的內(nèi)存,還有磁盤存儲規(guī)劃,這和你的 prometheus 的架構方案有關

  • 如果是單機 prometheus,計算本地磁盤使用量
  • 如果是 remote-write,和已有的 tsdb 共用即可。
  • 如果是 thanos 方案,本地磁盤可以忽略(2h),計算對象存儲的大小就行。

Prometheus 每 2 小時將已緩沖在內(nèi)存中的數(shù)據(jù)壓縮到磁盤上的塊中。包括 chunks, indexes, tombstones 和 metadata,這些占用了一部分存儲空間。一般情況下,Prometheus 中存儲的每一個樣本大概占用 1-2 字節(jié)大?。?.7byte)??梢酝ㄟ^ promql 來查看每個樣本平均占用多少空間:

rate(prometheus_tsdb_compaction_chunk_size_bytes_sum[1h])
/
?rate(prometheus_tsdb_compaction_chunk_samples_sum[1h])

{instance="0.0.0.0:8890",?job="prometheus"}??1.252747585939941

如果大致估算本地磁盤大小,可以通過以下公式:

磁盤大小?=?保留時間?*?每秒獲取樣本數(shù)?*?樣本大小

保留時間(retention_time_seconds)和樣本大小(bytes_per_sample)不變的情況下,如果想減少本地磁盤的容量需求,只能通過減少每秒獲取樣本數(shù)(ingested_samples_per_second)的方式。

查看當前每秒獲取的樣本數(shù):

rate(prometheus_tsdb_head_samples_appended_total[1h])

有兩種手段,一是減少時間序列的數(shù)量,二是增加采集樣本的時間間隔??紤]到 Prometheus 會對時間序列進行壓縮,因此減少時間序列的數(shù)量效果更明顯.

舉例說明:

  • 采集頻率 30s,機器數(shù)量 1000,metric 種類 6000,1000600026024 約 200 億,30G 左右磁盤
  • 只采集需要的指標,如 match[], 或者統(tǒng)計下最常使用的指標,性能最差的指標

以上磁盤容量并沒有把 WAL 文件算進去,WAL 文件(raw data)Prometheus 官方文檔中說明至少會保存 3 個 write-ahead log files,每一個最大為 128M(實際運行發(fā)現(xiàn)數(shù)量會更多)

因為我們使用了 thanos 的方案,所以本地磁盤只保留 2h 熱數(shù)據(jù)。WAL 每 2 小時生成一份 block 文件,block 文件每 2 小時上傳對象存儲,本地磁盤基本沒有壓力。

關于 prometheus 存儲機制,可以看這篇[7]

對 apiserver 的 性能影響

如果你的 prometheus 使用了 kubernetes_sd_config 做服務發(fā)現(xiàn),請求一般會經(jīng)過集群的 apiserver,隨著規(guī)模的變大,需要評估下對 apiserver 性能的影響,尤其是 proxy 失敗的時候,會導致 cpu 升高。當然了,如果單 k8s 集群規(guī)模太大,一般都是拆分集群,不過隨時監(jiān)測下 apiserver 的進程變化還是有必要的。

在監(jiān)控 cadvisor、docker、kube-proxy 的 metric 時,我們一開始選擇從 apiserver proxy 到節(jié)點的對應端口,統(tǒng)一設置比較方便,但后來還是改為了直接拉取節(jié)點,apiserver 僅做服務發(fā)現(xiàn)。

rate 的計算邏輯

prometheus 中的 counter 類型主要是為了 rate 而存在的,即計算速率,單純的 counter 計數(shù)意義不大,因為 counter 一旦重置,總計數(shù)就沒有意義了。

rate 會自動處理 counter 重置的問題,counter 一般都是一直變大的,例如一個 exporter 啟動,然后崩潰了。本來以每秒大約 10 的速率遞增,但僅運行了半個小時,則速率(x_total [1h])將返回大約每秒 5 的結果。另外,counter 的任何減少也會被視為 counter 重置。例如,如果時間序列的值為[5,10,4,6],則將其視為[5,10,14,16]。

rate 值很少是精確的。由于針對不同目標的抓取發(fā)生在不同的時間,因此隨著時間的流逝會發(fā)生抖動,query_range 計算時很少會與抓取時間完美匹配,并且抓取有可能失敗。面對這樣的挑戰(zhàn),rate 的設計必須是健壯的。

rate 并非想要捕獲每個增量,因為有時候增量會丟失,例如實例在抓取間隔中掛掉。如果 counter 的變化速度很慢,例如每小時僅增加幾次,則可能會導致【假象】。比如出現(xiàn)一個 counter 時間序列,值為 100,rate 就不知道這些增量是現(xiàn)在的值,還是目標已經(jīng)運行了好幾年并且才剛剛開始返回。

建議將 rate 計算的范圍向量的時間至少設為抓取間隔的四倍。這將確保即使抓取速度緩慢,且發(fā)生了一次抓取故障,您也始終可以使用兩個樣本。此類問題在實踐中經(jīng)常出現(xiàn),因此保持這種彈性非常重要。例如,對于 1 分鐘的抓取間隔,您可以使用 4 分鐘的 rate 計算,但是通常將其四舍五入為 5 分鐘。

如果 rate 的時間區(qū)間內(nèi)有數(shù)據(jù)缺失,他會基于趨勢進行推測,比如:

詳細的內(nèi)容可以看下這個視頻[8]

反直覺的 p95 統(tǒng)計

histogram_quantile 是 Prometheus 常用的一個函數(shù),比如經(jīng)常把某個服務的 P95 響應時間來衡量服務質(zhì)量。不過它到底是什么意思很難解釋得清,特別是面向非技術的同學,會遇到很多“靈魂拷問”。

我們常說 P95(p99,p90 都可以) 響應延遲是 100ms,實際上是指對于收集到的所有響應延遲,有 5% 的請求大于 100ms,95% 的請求小于 100ms。Prometheus 里面的 histogram_quantile 函數(shù)接收的是 0-1 之間的小數(shù),將這個小數(shù)乘以 100 就能很容易得到對應的百分位數(shù),比如 0.95 就對應著 P95,而且還可以高于百分位數(shù)的精度,比如 0.9999。

當你用 histogram_quantile 畫出響應時間的趨勢圖時,可能會被問:為什么 p95 大于或小于我的平均值?

正如中位數(shù)可能比平均數(shù)大也可能比平均數(shù)小,P99 比平均值小也是完全有可能的。通常情況下 P99 幾乎總是比平均值要大的,但是如果數(shù)據(jù)分布比較極端,最大的 1% 可能大得離譜從而拉高了平均值。一種可能的例子:

1,?1,?...?1,?901?//?共?100?條數(shù)據(jù),平均值=10,P99=1

服務 X 由順序的 A,B 兩個步驟完成,其中 X 的 P99 耗時 100ms,A 過程 P99 耗時 50ms,那么推測 B 過程的 P99 耗時情況是?

直覺上來看,因為有 X=A+B,所以答案可能是 50ms,或者至少應該要小于 50ms。實際上 B 是可以大于 50ms 的,只要 A 和 B 最大的 1% 不恰好遇到,B 完全可以有很大的 P99:

A?=?1,?1,?...?1,??1,??1,??50,??50?//?共?100?條數(shù)據(jù),P99=50
B?=?1,?1,?...?1,??1,??1,??99,??99?//?共?100?條數(shù)據(jù),P99=99
X?=?2,?2,?...?1,?51,?51,?100,?100?//?共?100?條數(shù)據(jù),P99=100

如果讓 A 過程最大的 1%?接近 100ms,我們也能構造出 P99 很小的 B:
A?=?50,?50,?...?50,??50,??99?//?共?100?條數(shù)據(jù),P99=50
B?=??1,??1,?...??1,???1,??50?//?共?100?條數(shù)據(jù),P99=1
X?=?51,?51,?...?51,?100,?100?//?共?100?條數(shù)據(jù),P99=100

所以我們從題目唯一能確定的只有 B 的 P99 應該不能超過 100ms,A 的 P99 耗時 50ms 這個條件其實沒啥用。

類似的疑問很多,因此對于 histogram_quantile 函數(shù),可能會產(chǎn)生反直覺的一些結果,最好的處理辦法是不斷試驗調(diào)整你的 bucket 的值,保證更多的請求時間落在更細致的區(qū)間內(nèi),這樣的請求時間才有統(tǒng)計意義。

慢查詢問題

  • promql 的基礎知識看這篇文章[9]

prometheus 提供了自定義的 promql 作為查詢語句,在 graph 上調(diào)試的時候,會告訴你這條 sql 的返回時間,如果太慢你就要注意了,可能是你的用法出現(xiàn)了問題。

評估 prometheus 的整體響應時間,可以用這個默認指標:

prometheus_engine_query_duration_seconds{}

一般情況下響應過慢都是 promql 使用不當導致,或者指標規(guī)劃有問題,如:

  • 大量使用 join 來組合指標或者增加 label,如將 kube-state-metric 中的一些 meta label 和 node-exporter 中的節(jié)點屬性 label 加入到 cadvisor 容器 數(shù)據(jù)里,像統(tǒng)計 pod 內(nèi)存使用率并按照所屬節(jié)點的機器類型分類,或按照所屬 rs 歸類。
  • 范圍查詢時,大的時間范圍,step 值卻很小,導致查詢到的數(shù)量量過大。
  • rate 會自動處理 counter 重置的問題,最好由 promql 完成,不要自己拿出來全部元數(shù)據(jù)在程序中自己做 rate 計算。
  • 在使用 rate 時,range duration 要大于等于step[10],否則會丟失部分數(shù)據(jù)[11]
  • prometheus 是有基本預測功能的,如derivpredict_linear(更準確)可以根據(jù)已有數(shù)據(jù)預測未來趨勢
  • 如果比較復雜且耗時的 sql,可以使用 record rule 減少指標數(shù)量,并使查詢效率更高,但不要什么指標都加 record,一半以上的 metric 其實不太會查詢到。同時 label 中的值不要加到 record rule 的 name 中。

高基數(shù)問題 Cardinality

高基數(shù)是數(shù)據(jù)庫避不開的一個話題,對于 mysql 這種 db 來講,基數(shù)是指特定列或字段中包含的唯一值的數(shù)量?;鶖?shù)越低,列中重復的元素越多。對于時序數(shù)據(jù)庫而言,就是 tags、label 這種標簽值的數(shù)量多少。

比如 prometheus 中如果有一個指標?http_request_count{method="get",path="/abc",originIP="1.1.1.1"}表示訪問量,method 表示請求方法,originIP 是客戶端 IP,method 的枚舉值是有限的,但 originIP 卻是無限的,加上其他 label 的排列組合就無窮大了,也沒有任何關聯(lián)特征,因此這種高基數(shù)不適合作為 metric 的 label,真要的提取 originIP,應該用日志的方式,而不是 metric 監(jiān)控

時序數(shù)據(jù)庫會為這些 label 建立索引,以提高查詢性能,以便您可以快速找到與所有指定標簽匹配的值。如果值的數(shù)量過多,索引是沒有意義的,尤其是做 p95 等計算的時候,要掃描大量 series 數(shù)據(jù)

官方文檔中對于 label 的建議

CAUTION:?Remember?that?every?unique?combination?of?key-value?label?pairs?represents?a?new?time?series,?which?can?dramatically?increase?the?amount?of?data?stored.?Do?not?use?labels?to?store?dimensions?with?high?cardinality?(many?different?label?values),?such?as?user?IDs,?email?addresses,?or?other?unbounded?sets?of?values.

如何查看當前的 label 分布情況呢,可以使用 prometheus 提供的 tsdb 工具??梢允褂妹钚胁榭?,也可以在 2.16 版本以上的 prometheus graph 查看

[work@xxx?bin]$?./tsdb?analyze?../data/prometheus/
Block?ID:?01E41588AJNGM31SPGHYA3XSXG
Duration:?2h0m0s
Series:?955372
Label?names:?301
Postings?(unique?label?pairs):?30757
Postings?entries?(total?label?pairs):?10842822
....

top10 高基數(shù)的 metric

Highest?cardinality?metric?names:
87176?apiserver_request_latencies_bucket
59968?apiserver_response_sizes_bucket
39862?apiserver_request_duration_seconds_bucket
37555?container_tasks_state
....

高基數(shù)的 label

Highest?cardinality?labels:
4271?resource_version
3670?id
3414?name
1857?container_id
1824?__name__
1297?uid
1276?pod
...

找到最大的 metric 或 job

top10 的 metric 數(shù)量:按 metric 名字分

topk(10,?count?by?(__name__)({__name__=~".+"}))

apiserver_request_latencies_bucket{}??62544
apiserver_response_sizes_bucket{}???44600

top10 的 metric 數(shù)量:按 job 名字分

topk(10,?count?by?(__name__,?job)({__name__=~".+"}))

{job="master-scrape"}?525667
{job="xxx-kubernetes-cadvisor"}??50817
{job="yyy-kubernetes-cadvisor"}???44261

k8s 組件性能指標

除了基礎的 cadvisor 資源監(jiān)控,還應該對核心組件的 metric 進行采集,包括:

  • 10250:kubelet 監(jiān)聽端口,包括/stats/summary、metrics、metrics/cadvisor。10250 為認證端口,非認證端口用 10255
  • 10251:kube-scheduler 的 metric 端口,本地 127 訪問不需要認證,如調(diào)度延遲,
  • 10252:kube-controller 的 metric 端口,本地 127 訪問不需要認證
  • 6443: apiserver,需要證書認證,直接 curl 命令為curl --cacert /etc/kubernetes/pki/ca.pem --cert /etc/kubernetes/pki/admin.pem --key /etc/kubernetes/pki/admin-key.pem https://ip:6443/metrics -k
  • 2379: etcd 的 metric 端口,直接 curl 命令為:curl --cacert /etc/etcd/ssl/ca.pem --cert /etc/etcd/ssl/etcd.pem --key /etc/etcd/ssl/etcd-key.pem https://localhost:2379/metrics -k

docker 指標暴露:

如果要開放 docker 進程指標,需要開啟實驗特性,文件/etc/docker/daemon.json

{
??"metrics-addr"?:?"127.0.0.1:9323",
??"experimental"?:?true
}

kube-proxy 指標:

端口為 10249,默認 127 開放,可以修改為 hostname 開放,--metrics-bind-address=機器 ip

示例圖:

prometheus 重啟慢

prometheus 重啟的時候需要把 wal 中的內(nèi)容 load 到內(nèi)存里,保留時間越久、wal 文件越大,重啟的實際越長,這個是 prometheus 的機制,沒得辦法,因此能 reload 的,就不要重啟,重啟一定會導致短時間的不可用,而這個時候 prometheus 高可用就很重要了。

但 prometheus 也曾經(jīng)對啟動時間做過優(yōu)化,在 2.6 版本中對于 WAL 的 load 速度就做過速度的優(yōu)化,希望重啟的時間不超過?1 分鐘[12]

你的應用應該暴露多少指標

當你開發(fā)自己的服務的時候,你可能會把一些數(shù)據(jù)暴露 metric 出去,比如特定請求數(shù)、goroutine 數(shù)等,指標數(shù)量多少合適呢?

雖然指標數(shù)量和你的應用規(guī)模相關,但也有一些建議(Brian Brazil)[13],

比如簡單的服務如緩存等,類似 pushgateway,大約 120 個指標,prometheus 本身暴露了 700 左右的指標,如果你的應用很大,也盡量不要超過 10000 個指標,需要合理控制你的 label。

relabel_configs 與 metric_relabel_configs

relabel_config 發(fā)生在采集之前,metric_relabel_configs 發(fā)生在采集之后,合理搭配可以滿足場景的配置

metric_relabel_configs:
??-?separator:?;
????regex:?instance
????replacement:?$1
????action:?labeldrop
-?source_labels:?[__meta_kubernetes_namespace,?__meta_kubernetes_endpoints_name,
??????__meta_kubernetes_service_annotation_prometheus_io_port]
????separator:?;
????regex:?(.+);(.+);(.*)
????target_label:?__metrics_path__
????replacement:?/api/v1/namespaces/${1}/services/${2}:${3}/proxy/metrics
????action:?replace

Prometheus 的預測能力

場景 1:你的磁盤剩余空間一直在減少,并且降低的速度比較均勻,你希望知道大概多久之后達到閾值,并希望在某一個時刻報警出來。

場景 2:你的 pod 內(nèi)存使用率一直升高,你希望知道大概多久之后會到達 limit 值,并在一定時刻報警出來,在被殺掉之前上去排查。

prometheus 的 deriv 和 predict_linear 方法可以滿足這類需求, promtheus 提供了基礎的預測能力,基于當前的變化速度,推測一段時間后的值。

以 mem_free 為例,最近一小時的 free 值一直在下降。

mem_free僅為舉例,實際內(nèi)存可用以mem_available為準

deriv 函數(shù)可以顯示指標在一段時間的變化速度

predict_linear 方法是預測基于這種速度,最后可以達到的值

predict_linear(mem_free{instanceIP="100.75.155.55"}[1h],?2*3600)/1024/1024

你可以基于設置合理的報警規(guī)則,如小于 10 時報警

rule:?predict_linear(mem_free{instanceIP="100.75.155.55"}[1h],?2*3600)/1024/1024?<10

predict_linear 與 deriv 的關系,含義上約等于,predict_linear 稍微準確一些。

??deriv(mem_free{instanceIP="100.75.155.55"}[1h])?*?2?*?3600
+
??mem_free{instanceIP="100.75.155.55"}[1h]

如果你要基于 metric 做模型預測,可以參考下forecast-prometheus[14]

錯誤的高可用設計

有些人提出過這種類型的方案,想提高其擴展性和可用性。

應用程序?qū)?metric 推到到消息隊列如 kafaka,然后經(jīng)過 exposer 消費中轉(zhuǎn),再被 prometheus 拉取。產(chǎn)生這種方案的原因一般是有歷史包袱、復用現(xiàn)有組件、想通過 mq 來提高擴展性。

這種方案有幾個問題:

  1. 增加了 queue 組件,多了一層依賴,如果 app 與 queue 之間連接失敗,難道要在 app 本地緩存監(jiān)控數(shù)據(jù)?
  2. 抓取時間可能會不同步,延遲的數(shù)據(jù)將會被標記為陳舊數(shù)據(jù),當然你可以通過添加時間戳來標識,但就失去了對陳舊數(shù)據(jù)的處理邏輯[15]
  3. 擴展性問題:prometheus 適合大量小目標,而不是一個大目標,如果你把所有數(shù)據(jù)都放在了 exposer 中,那么 prometheus 的單個 job 拉取就會成為 cpu 瓶頸。這個和 pushgateway 有些類似,沒有特別必要的場景,都不是官方建議的方式。
  4. 缺少了服務發(fā)現(xiàn)和拉取控制,prom 只知道一個 exposer,不知道具體是哪些 target,不知道他們的 up 時間,無法使用 scrape_*等指標做查詢,也無法用scrape_limit[16]做限制。

如果你的架構和 prometheus 的設計理念相悖,可能要重新設計一下方案了,否則擴展性和可靠性反而會降低。

高可用方案

prometheus 高可用有幾種方案:

  1. 基本 HA:即兩套 prometheus 采集完全一樣的數(shù)據(jù),外邊掛負載均衡
  2. HA + 遠程存儲:除了基礎的多副本 prometheus,還通過 Remote write 寫入到遠程存儲,解決存儲持久化問題
  3. 聯(lián)邦集群:即 federation,按照功能進行分區(qū),不同的 shard 采集不同的數(shù)據(jù),由 Global 節(jié)點來統(tǒng)一存放,解決監(jiān)控數(shù)據(jù)規(guī)模的問題。
  4. 使用 thanos 或者 victoriametrics,來解決全局查詢、多副本數(shù)據(jù) join 問題。

就算使用官方建議的多副本 + 聯(lián)邦,仍然會遇到一些問題:

官方建議數(shù)據(jù)做Shard,然后通過federation來實現(xiàn)高可用,
但是邊緣節(jié)點和Global節(jié)點依然是單點,需要自行決定是否每一層都要使用雙節(jié)點重復采集進行?;睢?br>也就是仍然會有單機瓶頸。

另外部分敏感報警盡量不要通過global節(jié)點觸發(fā),畢竟從Shard節(jié)點到Global節(jié)點傳輸鏈路的穩(wěn)定性會影響數(shù)據(jù)到達的效率,進而導致報警實效降低。

例如服務updown狀態(tài),API請求異常這類報警我們都放在shard節(jié)點進行報警。

本質(zhì)原因是,prometheus 的本地存儲沒有數(shù)據(jù)同步能力,要在保證可用性的前提下,再保持數(shù)據(jù)一致性是比較困難的,基礎的 HA proxy 滿足不了要求,比如:

  • 集群的后端有 A 和 B 兩個實例,A 和 B 之間沒有數(shù)據(jù)同步。A 宕機一段時間,丟失了一部分數(shù)據(jù),如果負載均衡正常輪詢,請求打到 A 上時,數(shù)據(jù)就會異常。
  • 如果 A 和 B 的啟動時間不同,時鐘不同,那么采集同樣的數(shù)據(jù)時間戳也不同,就不是多副本同樣數(shù)據(jù)的概念了
  • 就算用了遠程存儲,A 和 B 不能推送到同一個 tsdb,如果每人推送自己的 tsdb,數(shù)據(jù)查詢走哪邊就是問題了。

因此解決方案是在存儲、查詢兩個角度上保證數(shù)據(jù)的一致:

  • 存儲角度:如果使用 remote write 遠程存儲, A 和 B 后面可以都加一個 adapter,adapter 做選主邏輯,只有一份數(shù)據(jù)能推送到 tsdb,這樣可以保證一個異常,另一個也能推送成功,數(shù)據(jù)不丟,同時遠程存儲只有一份,是共享數(shù)據(jù)。方案可以參考這篇文章[17]
  • 查詢角度:上邊的方案實現(xiàn)很復雜且有一定風險,因此現(xiàn)在的大多數(shù)方案在查詢層面做文章,比如 thanos 或者 victoriametrics,仍然是兩份數(shù)據(jù),但是查詢時做數(shù)據(jù)去重和 join。只是 thanos 是通過 sidecar 把數(shù)據(jù)放在對象存儲,victoriametrics 是把數(shù)據(jù) remote write 到自己的 server 實例,但查詢層 thanos-query 和 victor 的 promxy 的邏輯基本一致。

我們采用了 thanos 來支持多地域監(jiān)控數(shù)據(jù),具體方案可以看這篇文章[18]

關于日志

k8s 中的日志一般指是容器標準輸出 + 容器內(nèi)日志,方案基本是采用 fluentd/fluent-bit/filebeat 等采集推送到 es,但還有一種是日志轉(zhuǎn) metric,如解析特定字符串出現(xiàn)次數(shù),nginx 日志得到 qps 指標 等,這里可以采用 grok 或者 mtail,以 exporter 的形式提供 metric 給 prometheus

參考資料

[1]

容器監(jiān)控實踐—K8S 常用指標分析:?http://www.xuyasong.com/?p=1717

[2]

dcgm exporter:?https://github.com/NVIDIA/gpu-monitoring-tools/tree/master/exporters/prometheus-dcgm

[3]

2.16 版本:?https://github.com/prometheus/prometheus/commit/d996ba20ec9c7f1808823a047ed9d5ce96be3d8f

[4]

這篇文章:?https://zhangguanzhang.github.io/2019/09/05/prometheus-change-timezone/

[5]

issue:?https://github.com/prometheus/prometheus/issues/500

[6]

tsdb 狀態(tài):?https://www.google.com/url?q=https%3A%2F%2Fprometheus.io%2Fdocs%2Fprometheus%2Flatest%2Fquerying%2Fapi%2F%23tsdb-stats&sa=D&sntz=1&usg=AFQjCNFE5AzQxyhzt8SqQLHPUySZl3lNNw

[7]

這篇:?http://www.xuyasong.com/?p=1601

[8]

視頻:?https://www.youtube.com/watch?reload=9&v=67Ulrq6DxwA

[9]

文章:?http://www.xuyasong.com/?p=1578

[10]

step:?https://www.robustperception.io/step-and-query_range

[11]

部分數(shù)據(jù):?https://chanjarster.github.io/post/p8s-step-param/

[12]

1 分鐘:?https://www.robustperception.io/optimising-startup-time-of-prometheus-2-6-0-with-pprof

[13]

建議(Brian Brazil):?https://www.robustperception.io/how-many-metrics-should-an-application-return

[14]

forecast-prometheus:?https://github.com/nfrumkin/forecast-prometheus

[15]

處理邏輯:?https://www.robustperception.io/staleness-and-promql

[16]

scrape_limit:?https://www.robustperception.io/using-sample_limit-to-avoid-overload

[17]

這篇文章:?https://blog.timescale.com/blog/prometheus-ha-postgresql-8de68d19b6f5

[18]

這篇文章:?http://www.xuyasong.com/?p=1925


原文鏈接:https://yasongxu.gitbook.io/container-monitor/yi-.-kai-yuan-fang-an/di-2-zhang-prometheus/prometheus-use


往期推薦

音效摸魚還不夠爽?試試IDE里打幾盤魂斗羅?

3折購書優(yōu)惠碼限時搶,第二波書單來了!

面試:知道 CopyOnWriteArrayList 嗎?

居然還有人在用 System.out.println打日志的嗎?

不錯的秒殺系統(tǒng)架構分析與實戰(zhàn)!

一個讓你敲代碼的同時,找回童年樂趣的 IntelliJ 插件


掃一掃,關注我

一起學習,一起進步

每周贈書,福利不斷


深度內(nèi)容

推薦加入


最近熱門內(nèi)容回顧? ?#技術人系列

瀏覽 67
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 老熟女一区二区三区| 亚洲欧洲久久| 欧美成人免费观看| 少妇推油呻吟白浆啪啪成人片| 国产h视频| 精品无码视频| 国产高清黑人| а中文在线天堂精品| 91亚洲精品乱码久久久久久蜜桃| 高潮视频在线观看| 亚洲一区二区三区免费视频| 天天爽天天摸| 激情开心五月天| 玖玖在线| 欧美操大逼| 午夜福利视频网站| www.国产视频| 2025四虎在线视频观看| 北条麻妃中文字幕旡码| 成人免费毛片蓝莓| 色欲综合网| 免费日韩| 欧美a在线| 亚洲最新AV在线| 亚洲群交视频| 台湾成人综合网| 国产操逼网| 亚洲综合片| 亚洲无码不卡视频| 日本免费黄色视频| 黄色视频网站在线播放| 丁香五月大香蕉| 安徽妇搡BBBB搡BBBB小说| 在线三级av| 国产办公室丝袜人妖| 欧美三级片视频| 国产欧美在线观看不卡| 内射老太太| 婷婷成人电影| AV女优天堂| 久久6精品| 国产精品内射婷婷一级二| 999热这里只有精品| av网站在线免费观看| 91九色口爆吞精| 久久久久久亚洲AV黄床| 九九碰九九爱97超碰| 精品无码一区二区三| igao在线观看| 奇米狠狠操| 日本少妇午夜福利| 黄色视频日本免费| 天天干天天撸| 成人性爱视频免费在线观看| 国产成人a亚洲精品无码| 狠狠爱一区| 天天操天天日天天操| 亚洲性爱av| 91福利院| 超小超嫩国产合集六部| 欧美日韩在线观看视频| 日本一级黄| 第一福利视频| 影音先锋AV天堂| 97视频在线观看免费| 99热热热| 黄色大片免费在线观看| 国产AV18岁| 亚洲无码图| 日韩精品三区| 国产精品宾馆在线| 老熟女痒到不行-ThePorn| 91人妻人人人| 大香蕉网伊人| 日韩中文字幕一区二区| 丰满人妻一区二区三区蜜桃视频| 最新毛片网站〖网:.〗| 人妻少妇一区| 五月丁香亚洲综合| 中文字幕亚洲一区| 青草在线视频| 人人草在线视频| 亚洲日韩色色| 黄片大全免费看| 日韩一区欧美| 黄片网站在线看| 亚洲精品乱码久久久久久蜜桃欧美 | 91男女| 人妻japanesewoman| 天天躁夜夜躁狠狠躁AV| 男女嫩草视频| 成人无码电影在线观看| 日韩黄色电影在线免费观看 | 蜜臀久久99久久久久久宅男| 欧美三级片网址| 香蕉视频日韩| 久久v| 国产无码操逼| 亚洲A片免费看| 久久cao| 五月天婷婷网址| 天天日夜夜| 欧美性爱怡红院| 免费国产h| 中文字幕免费看| AV高清无码在线观看| 最新一区二区三区| AV黄色在线| 国产精品久久久久久久免牛肉蒲 | 亚洲综合色网| A片免费观看视频| 学生妹作爱片| 操人妻| 91蜜桃传媒在线观看| 亚洲综合激情五月久久| 精品蜜桃秘一区二区三区在线播放| 一道本不卡视频| 中文字幕2018第一页| 午夜福利AV电影| 高清av无码| 在线观看亚洲中文字幕| 国产黄色视频在线| 开心色情| 色婷婷Av一区| 中文字幕在线观看日韩| 国产白丝精品91爽爽久久| 91就要爱爱视频| 日本熟妇高潮BBwBBwBBw| 国产精品视频你懂的| 美女被操91| 全国男人的天堂网站| www深夜成人a√在线| 欧美日韩在线视频观看| 91视频高清无码| 亚洲日韩欧美性爱| 亚洲无码网址| 熟女人妻在线观看| 无码欧美精品一区二区| 一区二区三区成人| AV无码在线播放| 久久视频这里有精品| 精品黄片| 黄片在线免费观看视频| 久久不射网站| AV在线播放中文字幕| 苍井空无码| 大香蕉中文网| 91精品青青草| 毛片天堂| 在线播放亚洲| 日韩性爱片| 久久精品水多多www| 成人视频无码| 成人婷婷五月天| 欧美在线成人网| 老熟女91| 手机av网站| 综合成人在线| 色噜噜狠狠色综无码久久合欧美| 亚洲无码在线视频播放| 97国产精品手机| 操逼网站视频| 91人妻最真实刺激绿帽| 婷婷成人在线| 欧美激情伊人久久五月天| 亚洲欧洲AV| 大香蕉综合在线观看| 一级大毛片| 婷婷无码视频| 性淫影院| 欧美操美女| 操逼综合网| 国产专区在线| 青久久久| 国产精品一区二区AV日韩在线 | 不卡视频一区| 亚洲AV片一区二区三区| 高清无码视频网站| 337p西西人体大胆瓣开下部| 国产日韩中文字幕| 国际精品久久久| 日韩成人中文字幕| 欧美性受XXXX黑人XYX性爽冫| 羞羞av| 成人网一区二区| 免费无码视频在线观看| 五月天成人网址| 蜜臀AV一区二区| 成人网一区二区| 亚洲资源站| 五月天久久婷婷| 九九九九九九精品| 8x8拨牐拨牐拨牐永久免费| 伊人激情| 水果派解说在线观看| 欧美一级黄色大片| 香蕉综合在线| 色就是亚洲| 朝鲜性感AV在线| 欧美日韩国产一区二区三区| 久久久综合| 免费观看在线无码视频| 欧美999| 国产成人无码区免费AV片在线 | 99久久综合九九| 四虎精品| 亚洲一页| 无套内射学生妹去看片| 免费高清无码| 北条麻妃无码视频在线| 在线观看免费完整版中文字幕视频 | 日本久久成人| 女公务员人妻呻吟求饶| 中文人妻| 性爱乱伦视频| 久久国产性爱| 亚洲欧美日韩色图| 蜜桃系列一区二区精品| 久久国产香蕉| 国产AV无码一区| 色妞视频精品一区| 亚洲日韩AV在线| 先锋影音AV资源网| 亚洲一级AV| 日韩中文字幕在线免费观看| 中文在线A∨在线| 精品国产免费无码久久噜噜噜AV| 国产成人女人在线观看| 免费黄色在线观看| 天天拍夜夜操| 日韩无码A片| 日韩高清无码人妻| AV资源网站| 亚洲高清视频免费| 国产精品久久久久久久久借妻| 日韩精品成人在线视频| 久久v| 欧美黄片在线免费观看| 中文字幕熟女人妻| av资源免费| 国产做受91一片二片老头| 亚洲男人的天堂av| 国产无码AV| 先锋成人电影| 亚洲av高清| 天天操天天操天天操天天| 午色婷婷国产无码| 黄片免费视频| AA片在线观看视频在线播放| 国产黄片在线免费观看| 男女啪啪免费网站| 91香蕉国产在线观看软件| 欧美成人性爱图片| 日本做爱视频| 狠狠地日| 午夜福利100理论片| 欧洲性爱视频在线观看| 久久另类TS人妖一区二区免费| 亚洲色香蕉| 在线不卡无码| 国产精品对白| 国产在线视频第一页| 夜夜骑免费视频| 91最新国产| 日韩一级爱爱| 鸡巴在线观看| 人妻av一区二区三区| gogogo高清在线观看免费直播中国 | 婷婷五月国产| 俺来也av| 一二区免费视频| 一本色综合亚洲精品| 在线观看中文字幕AV| www.日批| 人人爱人人爽| 亚洲成人观看| 欧美成人三级| 国内成人精品| 91亚洲电影| 亚洲成人三区| 婷婷综合网| 亚洲无码天堂| 久久婷婷五月天| 漂亮人妻吃鸡啪啪哥哥真的好| 猫咪视频大全视频| 特黄特黄免费看| 欧美特级AAA| 黄色爱爱| 国产成人三级在线播放| 天天草天天爽| 天天操夜夜干| 日韩欧美在中文| 六月婷婷中文字幕| 日韩黄色视频网站| 国产乱伦自拍| 青青草99| 水蜜桃视频网站| 午夜熟睡乱子伦视频| 五月婷婷网站| 影音先锋国产| 无码视频一区| 激情乱伦视频| 亚洲第一区欧美日韩| 国产AV久| 日本一级婬片A片免费播放一| www.午夜福利| 可以免费看av的网站| 日韩乱伦中文字幕| 国产靠逼视频| 99在线观看免费视频| 九九热精品视频| 青青草东路热vv| 蜜芽av在线观看| 久久99精品久久久久| 国产一区二区波多野结衣| 欧美日韩色情| 久久久久久久久久久成人| A视频在线观看| 亚洲操逼图| www日本高清| 久久久久99精品成人片直播| 久久精品国产亚洲AV成人婷婷| 日韩av免费看| 日本无码一区二区三区| 大屌色片| 三级99| 国产精品美女久久久久AV爽| 国产精品乱子伦视频一区二区| 久久伊人影院| 成人夜间视频| 免费色色网站| 亚洲A片V一区二区三区| 韩日一区| 狠狠干高清成人二区三区| 91成人在线影院| 国产麻豆精品成人免费视频| 五月天婷婷av| 青青草无码成人AV片| 久久视频网站| 嫩草91| 婷婷五月情| 狠狠撸视频| 国产一级操逼| 丁香久久婷婷| 欧美a区| jizz在线免费观看| 天天插在线视频| 欧美视频久久| 精品亚洲无码视频| 欧美69视频| 婷婷丁香人妻天天爽| 影音先锋成人在线视频| 授乳奶水x88MAV| 无码国产精品一区二区免费96 | 亚洲视频国产| 黄色大片AV| 少妇搡BBBB搡BBB搡18禁| av777777| 夜夜骑夜夜操| 天天干天天日蜜臀色欲av| 亚洲无| 日韩成人在线观看视频| 无码高清在线观看| 免费看黄色A片| 欧美成人免费A级在线观看| 国产一区二区在线视频| 人人操人人摸人人射| 亚洲人成电影网| 久久人人爱| 精品人妻少妇| 亚洲AV资源在线| 12一15女人A片毛| 91蝌蚪丨人妻丨丝袜| 三级黄色小视频| 亚洲三级片无码| 91看片| 中文在线最新版天堂8| 中文字幕内射| 中文国产| 香蕉成人网站在线观看| 懂色av懂色av粉嫩av无码| 亚洲色情视频| 99色热视频| 国产精品无码天天爽视频| 黄色大片AV在线| 天天综合天天| 五月婷婷亚洲| 波多野结衣高清av久久直播免 | 蜜芽AV在线| 东京热在线观看| 天天爱av| 99色| 午夜福利AV电影| 欧美日韩视频在线播放| 一级黄色大毛片| 特一级黄色视频| 黄片视频免费在线观看| 人人摸人人操人人看| 色色婷婷五月| 久操视频在线| 五月天婷婷成人| 日韩av免费| 亚洲日韩在线看| 残忍另类BBWBBWBBW| 黄色片视频日本| 99精品热视频| 大奶一区二区| www.豆花视频成人版| 日韩综合在线| 成人一区视频| 日本操B| 丁香五月婷婷基地| 69视频网站| 人妻HDHDHD96XXXX| 搡BBBB搡BBB搡我瞎了| 看免费操逼视频| 尤物网在线| 中文字幕成人在线播放| 在线免费观看黄色小视频| 国产精品一级无码免费播放| 大肉大捧一出免费观看| 伊人性视频| 爱爱成人视频| 亚洲色婷婷久久精品AV蜜桃| 夜夜撸网站| 操b在线免费观看| 三级在线观看视频| 人人人妻人人人操| 亚洲天堂AV网| 德国肥妇熟妇BBwBBw| 欧美日韩亚洲天堂| 天天摸天天操| 7777精品伊人久久7777| 成人在线不卡| 国产视频一区二区在线| 色天使AV| 男女网站在线观看| 日本综合视频| а√在线中文网新版地址在线| 波多野结衣视频一区| 肏逼黄色一级| 久久亚洲免费视频| 97精品人妻麻豆一区二区| 91久久香蕉囯产熟女线看蜜桃| 亚洲日韩一区二区三区四区| 人人操人人干人人爽| 五月丁香婷婷成人| 色婷婷中文字幕| 国精品无码人妻一区二区三区| 99r| 中文无码一区二区三区四区| 一级爱爱| 天天干,夜夜爽| 波多野结衣无码在线| www.日逼| 日本免费高清视频在线观看一区 | 日日夜夜拍| 国产精品色呦呦| 激情小说激情视频| 99热99re6国产线播放| 亚洲sese| 成年人视频免费| 亚洲午夜福利视频| 伊人久久视频| 中国少妇xxx| 午夜成人小电影| 久久综合无码内射国产| 欧美,日韩,日| 婷婷五月天小说| 午夜亚洲AⅤ无码高潮片苍井空| 天堂a√中文8| 国产—a毛—a毛A免费看图| 福利视频免费观看| 欧美肏屄视频| 日韩中文字幕在线观看视频| 91高潮久久久久久久| 亚洲日色| 91蝌蚪视频在线观看| 成年片免费观看网站免费观看,亚洲+欧... | 大地99中文在线观看| 无码一区二区三区免费看| av无码aV天天aV天天爽| 国产成人精品久久久| 久久伊人在| 久热99| AV网站免费看| 日本黄色A片免费看| 黑人又粗又大XXXXOO| 三级高清无码| 日韩A片在线| 日韩天堂在线播放| 中文字幕在线无码| 特级A级毛片| 91高潮久久久久久久| 亚洲精品一区二区三区无码电影 | 人妻公日日澡久久久| 成人欧美大片黄18| 中文字幕乱码中文乱码91| 69AV视频网站| 狼友视频在线| 日韩欧美国产精品| 日韩永久免费| 欧洲成人无码| 蜜桃视频一区二区三区四区av| 臭小子晚上让你爽个够视频| 97精品人妻一区二区三区香蕉| 操一操干一干| 大香蕉网址| 久久久久免费| 韩国三级HD久久精品| 亚洲素人无码| 淫秽视频免费看| 在线观看者亚洲| 国产丝袜无码| 乱伦乱码| 久久视频网站| 国内操B电影| 一级A片亲子乱| 婷婷色AV| 亚州在线中文字幕经典a| 北岛玲丝袜办公室高跟| 国产A级黄色片| 999精品视频| 亚洲91精品| 在线播放一区| 欧美操b视频| 精品日韩中文字幕| 亚洲国产成人无码| 大香蕉国产| 中文字幕亞洲高清手機版第617| 大黄网站在线观看| www免费视频在线观看播放| 99re88| 毛片网站大全| 爆乳一区二区三区AV| 久久久网站| 伊人精品视频| 亚洲无码在线免费视频| 99久久99久久精品免费看小说。| 91精品婷婷国产综合| AV婷婷在线| 夜夜狠狠躁日日| 亚洲天堂视频在线| 丰满人妻精品一区二区在线 | 无码做爰欢H肉动漫网站在线看| 一级毛AA片| 婷婷五月天色| 一区二区三区视频在线观看| 亚洲AV男人天堂| 超碰一级片| 能看的AV网站| 久久艹网| 日本一本在线| 翔田千里中文字幕无码| 黄色小说在线看| 噜噜噜噜射| 日韩A片免费| 97国产精品| 免费国产视频| 亚洲综合色婷婷| 性爱国产| 97视频在线免费观看| 日韩在线中文字幕视频| 国产香蕉视频在线观看| 超碰伊人大香蕉| 狠狠干狠狠艹| jizz免费在线观看| 国产精品同| 青青操日日干| 亚洲小骚逼| 午夜精品一区二区三区在线成人 | 在线观看日韩视频| 97综合视频| 97人妻精品一区二区三区免| 亚洲人人18XXX—20HD| 波多野结衣AV网站| AV国产在线观看| 午夜无码久久| 亚洲人一级电影| 日本在线不卡一区| 91一区二区在线观看| 成人视频高清无码| 日日碰狠狠躁久久躁婷婷| 国产一级A片免费看| 性欧美丰满熟妇XXXX性久久久| 国产无码内射视频| 视频國产在线| 乱伦小说五月天| 少妇一级婬片内射视频| 亚洲高清无码视频大全| 中文字幕无码A片| 九九五月天| 激情爱爱网| 麻豆成人网| 婷婷综合素质二区| 中文无码日本一级A片人| 一区二区三区电影| 十八禁在线播放| 亚洲AV无码成人精品涩涩麻豆| 极品人妻疯狂3p超刺激| 中文字幕无码Av在线看| 日韩欧美精品在线观看| 五月天黄色小说| 一级女婬片A片AAAA片| 国产AV一级片| 免费福利在线观看| 黄色片A| 麻豆回家视频区一区二| 大香蕉久久久| 欧美城综合在线观看网| 亚洲精品成人片在线观看精品字幕| 婷婷激情中文字幕| 成人毛片一区二区三区| 亚洲成人影音先锋| 综合合一品道| 在线免费观看网站| 日韩视频――中文字幕| 欧美性BBB槡BBB槡BBB| 欧美丰满美乳XXⅩ高潮www| 狠狠色丁香| 午夜无码熟妇丰满人妻| 日韩激情在线| 国产成人久久| 91鸡巴| 欧美三级免费| 玖玖爱综合| 成人无码国产| 亚州高清无码视频| 日韩肏逼| 成人三级在线| 淫一区二区| 成人一区二区电影| 九色PORNY国产成人| 欧美一级特黄AAAAAA片| 黄色小视频在线免费观看| 少妇大战黑人46厘米| 国产乱码在线| 三级黄,色| 91骚| 欧洲成人免费视频| 无码人妻视频| 中国A级片| 成人黃色A片免费看| 日韩爆乳一区二区三区| 人妻丰满熟妇av无码区| 欧美一级性爱| 夜夜嗨av无码一区二区三区| 北条麻妃成人视频| 日韩大鸡巴| 做爱无码| 成年人在线视频| 一级a一级a爰片免费免免在线| 蜜臀AV午夜精品| 亚洲欧美日韩一区| 国产精品毛片久久久久久久| www,操逼| h网站在线看| 日本三区| 国产久久久久| 日韩七区| 可以免费看的黄色视频| 91亚洲精品乱码久久久久久蜜桃| 一本一道久久a久久精品蜜桃| 又粗又硬又爽18级A片| 午夜福利澳| 亚洲精品国产av| 影音先锋资源| 伊人大香蕉婷婷| 青青草91视频| 中文字幕91| 国产无码久久久| 亚洲综合中文字幕在线| 人妻日韩| 国产精品麻豆视频| 99做爱| 97人人爽| 亚洲高清无码免费在线观看| 超碰操一操| 哪里可以看毛片| 亚洲成人精品| 亚洲天堂中文| 亚洲无码成人视频| 亚洲婷婷三级成人网| 18禁网站免费观看| 日逼电影网| 黄色视频在线免费观看高清视频| 18禁网站免费观看| 久久午夜影院| 一级大毛片| 一个人看的视频www| 亚洲欧美另类在线| 一级a片在线| 亚洲天堂精品在线| xxx综合网| 天天干精品| 精品一区二区久久久久久久网站 | 日韩在线观看网站| 国产做爰XXXⅩ久久久骚妇| 天堂毛片| 亚洲无码一卡| 国产精品成人免费久久黄AV片| 久久一级片| 一本一道波多野结衣潮喷视频| 欧美一级黄色A片| 日韩在线视频网| 爆乳一区二区三区| 亚洲高清无码免费| 九七AV| 影音先锋日韩资源| 在线免费AV片| 国产福利免费| 亚洲一区欧美二区gay| 一区二区三区精品无码| 国产高清免费视频| 色片免费| 东北女人操逼| 手机无码在线播放| 狼人狠狠干| 国产九九精品| 久久色资源| 健身房被教练3p喷水了| 午夜麻豆| 日韩在线| 尿在小sao货里面好不好| 日韩人妻精品中文字幕| 在线免费中文字幕| 九九九精彩视频| 无码AV电影在线观看| 91人妻人人爽人人爽| 国产女人水真多18毛片18精品 | 51嘿嘿嘿国产精品伦理| 热久久中文字幕| 欧美成人五月天| 国产日韩在线观看视频| 精品人妻中文字幕视频| 日韩av中文字幕在线| 色婷操逼| 欧美日韩一二| 国产美女网站| 岛国AV在线播放| 中文字幕在线观看一区二区三区| 久青草资源福利视频| 日韩欧美日本| 日韩在线一级| 欧美九九九九| 7777影视电视剧在线观看官网| 99精品一区二区三区| 爱搞搞视频| 嘿咻嘿咻动态图| 国产精品欧美7777777| 好吊妞在线观看| 天天干天天爽| 久久久精品欧美| 黄频美女日本免费| 人人看人人搂人人摸| 激情av天堂| 91人妻人人| 日韩中文无码一级A片| 日韩小视频在线观看| 狠狠肏视频| 激情乱伦五月天| 91妻人人澡人人爽人人精品 | 成人性在线| 亚洲成人福利| 在线免费观看黄色网址| 3D动漫啪啪精品一区二| 激情无码精品| 国产系列每日更新| 无码国产一区二区三区四区五区| 8090操逼网| 高清无码在线观看免费| 91一起草高清资源| 上海熟搡BBB搡BBBB| 亚洲欧美日韩高清| 久久六月天| 激情图区| 日韩一区二| 天天射综合| 影音先锋成人片| 青青操色| 免费在线观看黄色视频网站| 国产肏屄| 91精品老司机| www.国产在线| 色噜噜人妻av中文字幕| 丰满人妻一区二区免费看| 国产成人无码在线| 人妻HDHDHD96XXXX| 国产一级黄片| 一本色道久久综合狠狠躁的推荐 | 久久99久久99精品免视看婷婷| 操B图| 一区二区三区欧美| 日韩人妻中文| 亚洲午夜久久| 欧美九九| 精品国产一区二区三区久久久蜜月 | 凹凸熟女凹凸BBWBBW| 俺去也在线播放| 91中文字幕| 五月丁香成人| 99免费小视频| 色婷婷视频一区二区| 好吊看视频| 高潮免费视频| 蜜桃在线一区| 一区二区三区免费观看| 无码免费视频观看| 免费高清无码| 亚洲人妻免费视频| 操逼动漫| 日韩熟女视频| 国产视频a| 人人操人人操人人操人人操人人操 | 欧美综合第一页| 日韩第22页| 久久精彩偷拍视频| 久久精品视频免费观看| 亚洲激情内射| 91久久人澡人妻人人澡人人爽 | 国产精品色视频| 欧美日韩久久久| 3DAV一区二区三区动漫| 日韩激情无码| 欧美日韩中文字幕| 成人午夜在线观看| 亚洲免费av在线| 人妻无码视频| 日韩欧美在线免费观看| 免费人成网站| 日本A片在线免费观看| 色就是亚洲| 亚洲AV无码一区二区三竹菊| 国产成人精品AA毛片| av在线免费观看网站| 极品少妇av| 高清无码一区二区在线| 肏少妇女情人大骚逼直播一区二区| 午夜福利亚洲| 久草视频网| 免费无码蜜臀在线观看| 天堂中文在线a| 青吴乐大香蕉| 肏屄视频在线观看| 中韩无码| 日韩成人在线观看视频| 人人妻人人要| 亚洲第一成人久久网站| www.黄色在线| 亚洲日韩乱码在线| 香蕉成人A片视频| 蜜桃av色偷偷av老熟女| 婷婷五月丁香色| 国产足交视频| 国产乱子伦一区二区三| 午夜免费AV| 久久久精品电影91| 成人无码区免费A片久久鸭| 华女与黑人91A∨| 91露脸熟女四川熟女在线观看 | 狠狠干大香蕉| 91精品丝袜久久久久久久久粉嫩| 日本成人A片| 日韩亚洲精品中文字幕| 青青成人视频| 国产一级A片免费看| 亚洲精品成人av| 九九九精品| 亚洲无码免费看| 18禁一区二区三区| 嫩小槡BBBB槡BBBB槡漫画| 拍真实国产伦偷精品| 俺来也俺去也www色官网| 四虎日韩| 四川少BBB搡BBB爽爽爽| 精品人妻一区二区三区蜜桃| 2024av在线| 国产一级电影网站| 日本成人中文字幕在线观看 | 人人妻人人爽人人澡人人精品 | 亚洲福利片| h片在线观看免费| 在线免费观看黄色片| 熟妇人妻丰满久久久久久久无码 | 天天做天天爱天天爽| a视频免费观看| 人妻体内射精一区二区三区| 又黄又爽无遮挡| 欧美成人福利| 人妻黄色视频| 豆花在线视频| 久久亚洲综合| 骚妇大战黑人15P| 亚洲精品中文字幕在线观看| 在线观看的av网站| 日韩在线视频一区二区三区| 神马午夜福利影院| 五月天久久| 性爱AV在线| 美日韩一区二区三区|