精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

為 Go 應用添加 Prometheus 監控指標

運維 系統運維
我們首先從一個最簡單的 Go 應用程序開始,在端口 8080 的 /metrics 端點上暴露客戶端庫的默認注冊表,暫時還沒有跟蹤任何其他自定義的監控指標。

[[428815]]

前面我們了解了如何儀表化應用,接下來我們將學習使用 Prometheus 的 Go 客戶端庫來為一個 Go 應用程序添加和暴露監控指標。

創建應用

我們首先從一個最簡單的 Go 應用程序開始,在端口 8080 的 /metrics 端點上暴露客戶端庫的默認注冊表,暫時還沒有跟蹤任何其他自定義的監控指標。

先創建一個名為 instrument-demo 的目錄,在該目錄下面初始化項目:

  1. ☸ ➜ mkdir instrument-demo && cd instrument-demo 
  2. ☸ ➜ go mod init github.com/cnych/instrument-demo 

上面的命令會在 instrument-demo 目錄下面生成一個 go.mod 文件,在同目錄下面新建一個 main.go 的入口文件,內容如下所示:

  1. package main 
  2.  
  3. import ( 
  4.  "net/http" 
  5.  
  6.  "github.com/prometheus/client_golang/prometheus/promhttp" 
  7.  
  8. func main() { 
  9.     // Serve the default Prometheus metrics registry over HTTP on /metrics. 
  10.  http.Handle("/metrics", promhttp.Handler()) 
  11.  http.ListenAndServe(":8080", nil) 

然后執行下面的命令下載 Prometheus 客戶端庫依賴:

  1. ☸ ➜ export GOPROXY="https://goproxy.cn" 
  2. ☸ ➜ go mod tidy 
  3. go: finding module for package github.com/prometheus/client_golang/prometheus/promhttp 
  4. go: found github.com/prometheus/client_golang/prometheus/promhttp in github.com/prometheus/client_golang v1.11.0 
  5. go: downloading google.golang.org/protobuf v1.26.0-rc.1 

然后直接執行 go run 命令啟動服務:

  1. ☸ ➜ go run main.go 

然后我們可以在瀏覽器中訪問 http://localhost:8080/metrics 來獲得默認的監控指標數據:

  1. # HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. 
  2. # TYPE go_gc_duration_seconds summary 
  3. go_gc_duration_seconds{quantile="0"} 0 
  4. go_gc_duration_seconds{quantile="0.25"} 0 
  5. go_gc_duration_seconds{quantile="0.5"} 0 
  6. go_gc_duration_seconds{quantile="0.75"} 0 
  7. go_gc_duration_seconds{quantile="1"} 0 
  8. go_gc_duration_seconds_sum 0 
  9. go_gc_duration_seconds_count 0 
  10. # HELP go_goroutines Number of goroutines that currently exist. 
  11. # TYPE go_goroutines gauge 
  12. go_goroutines 6 
  13. ...... 
  14. # HELP go_threads Number of OS threads created. 
  15. # TYPE go_threads gauge 
  16. go_threads 8 
  17. # HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served. 
  18. # TYPE promhttp_metric_handler_requests_in_flight gauge 
  19. promhttp_metric_handler_requests_in_flight 1 
  20. # HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code. 
  21. # TYPE promhttp_metric_handler_requests_total counter 
  22. promhttp_metric_handler_requests_total{code="200"} 1 
  23. promhttp_metric_handler_requests_total{code="500"} 0 
  24. promhttp_metric_handler_requests_total{code="503"} 0 

我們并沒有在代碼中添加什么業務邏輯,但是可以看到依然有一些指標數據輸出,這是因為 Go 客戶端庫默認在我們暴露的全局默認指標注冊表中注冊了一些關于 promhttp 處理器和運行時間相關的默認指標,根據不同指標名稱的前綴可以看出:

  • go_*:以 go_ 為前綴的指標是關于 Go 運行時相關的指標,比如垃圾回收時間、goroutine 數量等,這些都是 Go 客戶端庫特有的,其他語言的客戶端庫可能會暴露各自語言的其他運行時指標。
  • promhttp_*:來自 promhttp 工具包的相關指標,用于跟蹤對指標請求的處理。

這些默認的指標是非常有用,但是更多的時候我們需要自己控制,來暴露一些自定義指標。這就需要我們去實現自定義的指標了。

添加自定義指標

接下來我們來自定義一個的 gauge 指標來暴露當前的溫度。創建一個新的文件 custom-metric/main.go,內容如下所示:

  1. package main 
  2.  
  3. import ( 
  4.  "net/http" 
  5.  
  6.  "github.com/prometheus/client_golang/prometheus" 
  7.  "github.com/prometheus/client_golang/prometheus/promhttp" 
  8.  
  9. func main() { 
  10.     // 創建一個沒有任何 label 標簽的 gauge 指標 
  11.  temp := prometheus.NewGauge(prometheus.GaugeOpts{ 
  12.   Name"home_temperature_celsius"
  13.   Help: "The current temperature in degrees Celsius."
  14.  }) 
  15.  
  16.  // 在默認的注冊表中注冊該指標 
  17.  prometheus.MustRegister(temp
  18.  
  19.  // 設置 gauge 的值為 39 
  20.  temp.Set(39) 
  21.  
  22.  // 暴露指標 
  23.  http.Handle("/metrics", promhttp.Handler()) 
  24.  http.ListenAndServe(":8080", nil) 

上面文件中和最初的文件就有一些變化了:

  • 我們使用 prometheus.NewGauge() 函數創建了一個自定義的 gauge 指標對象,指標名稱為 home_temperature_celsius,并添加了一個注釋信息。
  • 然后使用 prometheus.MustRegister() 函數在默認的注冊表中注冊了這個 gauge 指標對象。
  • 通過調用 Set() 方法將 gauge 指標的值設置為 39。
  • 然后像之前一樣通過 HTTP 暴露默認的注冊表。

需要注意的是除了 prometheus.MustRegister() 函數之外還有一個 prometheus.Register() 函數,一般在 golang 中我們會將 Mustxxx 開頭的函數定義為必須滿足條件的函數,如果不滿足會返回一個 panic 而不是一個 error 操作,所以如果這里不能正常注冊的話會拋出一個 panic。

現在我們來運行這個程序:

  1. ☸ ➜ go run ./custom-metric 

啟動后重新訪問指標接口 http://localhost:8080/metrics,仔細對比我們會發現多了一個名為 home_temperature_celsius 的指標:

  1. ... 
  2. # HELP home_temperature_celsius The current temperature in degrees Celsius. 
  3. # TYPE home_temperature_celsius gauge 
  4. home_temperature_celsius 42 
  5. ... 

這樣我們就實現了添加一個自定義的指標的操作,整體比較簡單,當然在實際的項目中需要結合業務來確定添加哪些自定義指標。

自定義注冊表

前面我們是使用 prometheus.MustRegister() 函數來將指標注冊到全局默認注冊中,此外我們還可以使用 prometheus.NewRegistry() 函數來創建和使用自己的非全局的注冊表。

既然有全局的默認注冊表,為什么我們還需要自定義注冊表呢?這主要是因為:

  • 全局變量通常不利于維護和測試,創建一個非全局的注冊表,并明確地將其傳遞給程序中需要注冊指標的地方,這也一種更加推薦的做法。
  • 全局默認注冊表包括一組默認的指標,我們有時候可能希望除了自定義的指標之外,不希望暴露其他的指標。

下面的示例程序演示了如何創建、使用和暴露一個非全局注冊表對象,創建一個文件 custom-registry/main.go,內容如下所示:

  1. package main 
  2.  
  3. import ( 
  4.  "net/http" 
  5.  
  6.  "github.com/prometheus/client_golang/prometheus" 
  7.  "github.com/prometheus/client_golang/prometheus/promhttp" 
  8.  
  9. func main() { 
  10.  // 創建一個自定義的注冊表 
  11.  registry := prometheus.NewRegistry() 
  12.  // 可選: 添加 process 和 Go 運行時指標到我們自定義的注冊表中 
  13.  registry.MustRegister(prometheus.NewProcessCollector(prometheus.ProcessCollectorOpts{})) 
  14.  registry.MustRegister(prometheus.NewGoCollector()) 
  15.  
  16.  // 創建一個簡單呃 gauge 指標。 
  17.  temp := prometheus.NewGauge(prometheus.GaugeOpts{ 
  18.   Name"home_temperature_celsius"
  19.   Help: "The current temperature in degrees Celsius."
  20.  }) 
  21.  
  22.  // 使用我們自定義的注冊表注冊 gauge 
  23.  registry.MustRegister(temp
  24.  
  25.  // 設置 gague 的值為 39 
  26.  temp.Set(39) 
  27.  
  28.  // 暴露自定義指標 
  29.  http.Handle("/metrics", promhttp.HandlerFor(registry, promhttp.HandlerOpts{Registry: registry})) 
  30.  http.ListenAndServe(":8080", nil) 

上面我們沒有使用全局默認的注冊表了,而是創建的一個自定義的注冊表:

  • 首先使用 prometheus.NewRegistry() 函數創建我們自己的注冊表對象。
  • 然后使用自定義注冊表對象上面的 MustRegister() 哈是來注冊 guage 指標,而不是調用 prometheus.MustRegister() 函數(這會使用全局默認的注冊表)。
  • 如果我們希望在自定義注冊表中也有進程和 Go 運行時相關的指標,我們可以通過實例化 Collector 收集器來添加他們。
  • 最后在暴露指標的時候必須通過調用 promhttp.HandleFor() 函數來創建一個專門針對我們自定義注冊表的 HTTP 處理器,為了同時暴露前面示例中的 promhttp_* 相關的指標,我們還需要在 promhttp.HandlerOpts 配置對象的 Registry 字段中傳遞我們的注冊表對象。

同樣我們重新運行上面的自定義注冊表程序:

  1. ☸ ➜ go run ./custom-metric 

啟動后再次訪問指標接口 http://localhost:8080/metrics,可以發現和上面示例中的指標數據是相同的。

指標定制

Gauges

前面的示例我們已經了解了如何添加 gauge 類型的指標,創建了一個沒有任何標簽的指標,直接使用 prometheus.NewGauge() 函數即可實例化一個 gauge 類型的指標對象,通過 prometheus.GaugeOpts 對象可以指定指標的名稱和注釋信息:

  1. queueLength := prometheus.NewGauge(prometheus.GaugeOpts{ 
  2.  Name"queue_length"
  3.  Help: "The number of items in the queue."
  4. }) 

我們知道 gauge 類型的指標值是可以上升或下降的,所以我們可以為 gauge 指標設置一個指定的值,所以 gauge 指標對象暴露了 Set()、Inc()、Dec()、Add() 和 Sub() 這些函數來更改指標值:

  1. // 使用 Set() 設置指定的值 
  2. queueLength.Set(0) 
  3.  
  4. // 增加或減少 
  5. queueLength.Inc()   // +1:Increment the gauge by 1. 
  6. queueLength.Dec()   // -1:Decrement the gauge by 1. 
  7. queueLength.Add(23) // Increment by 23. 
  8. queueLength.Sub(42) // Decrement by 42. 

另外 gauge 儀表盤經常被用來暴露 Unix 的時間戳樣本值,所以也有一個方便的方法來將 gauge 設置為當前的時間戳:

  1. demoTimestamp.SetToCurrentTime() 

最終 gauge 指標會被渲染成如下所示的數據:

  1. # HELP queue_length The number of items in the queue. 
  2. # TYPE queue_length gauge 
  3. queue_length 42 

Counters

要創建一個 counter 類型的指標和 gauge 比較類似,只是用 prometheus.NewCounter() 函數來初始化指標對象:

  1. totalRequests := prometheus.NewCounter(prometheus.CounterOpts{ 
  2.  Name"http_requests_total"
  3.  Help: "The total number of handled HTTP requests."
  4. }) 

我們知道 counter 指標只能隨著時間的推移而不斷增加,所以我們不能為其設置一個指定的值或者減少指標值,所以該對象下面只有 Inc() 和 Add() 兩個函數:

  1. totalRequests.Inc()   // +1:Increment the counter by 1. 
  2. totalRequests.Add(23) // +n:Increment the counter by 23. 

當服務進程重新啟動的時候,counter 指標值會被重置為 0,不過不用擔心數據錯亂,我們一般會使用的 rate() 函數會自動處理。

最終 counter 指標會被渲染成如下所示的數據:

  1. # HELP http_requests_total The total number of handled HTTP requests. 
  2. # TYPE http_requests_total counter 
  3. http_requests_total 7734 

Histograms

創建直方圖指標比 counter 和 gauge 都要復雜,因為需要配置把觀測值歸入的 bucket 的數量,以及每個 bucket 的上邊界。Prometheus 中的直方圖是累積的,所以每一個后續的 bucket 都包含前一個 bucket 的觀察計數,所有 bucket 的下限都從 0 開始的,所以我們不需要明確配置每個 bucket 的下限,只需要配置上限即可。

同樣要創建直方圖指標對象,我們使用 prometheus.NewHistogram() 函數來進行初始化:

  1. requestDurations := prometheus.NewHistogram(prometheus.HistogramOpts{ 
  2.   Name:    "http_request_duration_seconds"
  3.   Help:    "A histogram of the HTTP request durations in seconds."
  4.   // Bucket 配置:第一個 bucket 包括所有在 0.05s 內完成的請求,最后一個包括所有在10s內完成的請求。 
  5.   Buckets: []float64{0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10}, 
  6. }) 

這里和前面不一樣的地方在于除了指定指標名稱和幫助信息之外,還需要配置 Buckets。如果我們手動去枚舉所有的 bucket 可能很繁瑣,所以 Go 客戶端庫為為我們提供了一些輔助函數可以幫助我們生成線性或者指數增長的 bucket,比如 prometheus.LinearBuckets() 和 prometheus.ExponentialBuckets() 函數。

直方圖會自動對數值的分布進行分類和計數,所以它只有一個 Observe() 方法,每當你在代碼中處理要跟蹤的數據時,就會調用這個方法。例如,如果你剛剛處理了一個 HTTP 請求,花了 0.42 秒,則可以使用下面的代碼來跟蹤。

  1. requestDurations.Observe(0.42) 

由于跟蹤持續時間是直方圖的一個常見用例,Go 客戶端庫就提供了輔助函數,用于對代碼的某些部分進行計時,然后自動觀察所產生的持續時間,將其轉化為直方圖,如下代碼所示:

  1. // 啟動一個計時器 
  2. timer := prometheus.NewTimer(requestDurations) 
  3.  
  4. // [...在應用中處理請求...] 
  5.  
  6. // 停止計時器并觀察其持續時間,將其放進 requestDurations 的直方圖指標中去 
  7. timer.ObserveDuration() 

直方圖指標最終會生成如下所示的數據:

  1. # HELP http_request_duration_seconds A histogram of the HTTP request durations in seconds. 
  2. # TYPE http_request_duration_seconds histogram 
  3. http_request_duration_seconds_bucket{le="0.05"} 4599 
  4. http_request_duration_seconds_bucket{le="0.1"} 24128 
  5. http_request_duration_seconds_bucket{le="0.25"} 45311 
  6. http_request_duration_seconds_bucket{le="0.5"} 59983 
  7. http_request_duration_seconds_bucket{le="1"} 60345 
  8. http_request_duration_seconds_bucket{le="2.5"} 114003 
  9. http_request_duration_seconds_bucket{le="5"} 201325 
  10. http_request_duration_seconds_bucket{le="+Inf"} 227420 
  11. http_request_duration_seconds_sum 88364.234 
  12. http_request_duration_seconds_count 227420 

每個配置的存儲桶最終作為一個帶有 _bucket 后綴的計數器時間序列,使用 le(小于或等于) 標簽指示該存儲桶的上限,具有上限的隱式存儲桶 +Inf 也暴露于比最大配置的存儲桶邊界花費更長的時間的請求,還包括使用后綴 _sum 累積總和和計數 _count 的指標,這些時間序列中的每一個在概念上都是一個 counter 計數器(只能上升的單個值),只是它們是作為直方圖的一部分創建的。

Summaries

創建和使用摘要與直方圖非常類似,只是我們需要指定要跟蹤的 quantiles 分位數值,而不需要處理 bucket 桶,比如我們想要跟蹤 HTTP 請求延遲的第 50、90 和 99 個百分位數,那么我們可以創建這樣的一個摘要對象:

  1. requestDurations := prometheus.NewSummary(prometheus.SummaryOpts{ 
  2.     Name:       "http_request_duration_seconds"
  3.     Help:       "A summary of the HTTP request durations in seconds."
  4.     Objectives: map[float64]float64{ 
  5.       0.5: 0.05,   // 第50個百分位數,最大絕對誤差為0.05。 
  6.       0.9: 0.01,   // 第90個百分位數,最大絕對誤差為0.01。 
  7.       0.99: 0.001, // 第90個百分位數,最大絕對誤差為0.001。 
  8.     }, 
  9.   }, 

這里和前面不一樣的地方在于使用 prometheus.NewSummary() 函數初始化摘要指標對象的時候,需要通過 prometheus.SummaryOpts{} 對象的 Objectives 屬性指定想要跟蹤的分位數值。

同樣摘要指標對象創建后,跟蹤持續時間的方式和直方圖是完全一樣的,使用一個 Observe() 函數即可:

  1. requestDurations.Observe(0.42) 

雖然直方圖桶可以跨維度匯總(如端點、HTTP 方法等),但這對于匯總 quantiles 分位數值來說在統計學上是無效的。例如,你不能對兩個單獨的服務實例的第 90 百分位延遲進行平均,并期望得到一個有效的整體第 90 百分位延遲。如果需要按維度進行匯總,那么我們需要使用直方圖而不是摘要指標。

摘要指標最終生成的指標數據與直方圖非常類似,不同之處在于使用 quantile 標簽來表示分位數序列,并且這些序列沒有擴展指標名稱的后綴:

  1. # HELP http_request_duration_seconds A summary of the HTTP request durations in seconds. 
  2. # TYPE http_request_duration_seconds summary 
  3. http_request_duration_seconds{quantile="0.5"} 0.052 
  4. http_request_duration_seconds{quantile="0.90"} 0.564 
  5. http_request_duration_seconds{quantile="0.99"} 2.372 
  6. http_request_duration_seconds_sum 88364.234 
  7. http_request_duration_seconds_count 227420 

標簽

到目前為止,我們還沒有為指標對象添加任何的標簽,要創建具有標簽維度的指標,我們可以調用類似于 NewXXXVec() 的構造函數來初始化指標對象:

  • NewGauge() 變成 NewGaugeVec()
  • NewCounter() 變成 NewCounterVec()
  • NewSummary() 變成 NewSummaryVec()
  • NewHistogram() 變成 NewHistogramVec()

這些函數允許我們指定一個額外的字符串切片參數,提供標簽名稱的列表,通過它來拆分指標。

例如,為了按照房子以及測量溫度的房間來劃分我們早期的溫度表指標,可以這樣創建指標。

  1. temp := prometheus.NewGaugeVec( 
  2.   prometheus.GaugeOpts{ 
  3.     Name"home_temperature_celsius"
  4.     Help: "The current temperature in degrees Celsius."
  5.   }, 
  6.   // 兩個標簽名稱,通過它們來分割指標。 
  7.   []string{"house""room"}, 

然后要訪問一個特有標簽的子指標,需要在設置其值之前,用 house 和 room 標簽的各自數值,對產生的 gauge 向量調用 WithLabelValues() 方法來處理下:

  1. // 為 home=ydzs 和 room=living-room 設置指標值 
  2. temp.WithLabelValues("ydzs""living-room").Set(27) 

如果你喜歡在選擇的子指標中明確提供標簽名稱,可以使用效率稍低的 With() 方法來代替:

  1. temp.With(prometheus.Labels{"house""ydzs""room""living-room"}).Set(66) 

不過需要注意如果向這兩個方法傳遞不正確的標簽數量或不正確的標簽名稱,這兩個方法都會觸發 panic。

下面是我們按照 house 和 room 標簽維度區分指標的完整示例,創建一個名為 label-metric/main.go 的新文件,內容如下所示:

  1. package main 
  2.  
  3. import ( 
  4.  "net/http" 
  5.  
  6.  "github.com/prometheus/client_golang/prometheus" 
  7.  "github.com/prometheus/client_golang/prometheus/promhttp" 
  8.  
  9. func main() { 
  10.     // 創建帶 house 和 room 標簽的 gauge 指標對象 
  11.  temp := prometheus.NewGaugeVec( 
  12.   prometheus.GaugeOpts{ 
  13.    Name"home_temperature_celsius"
  14.    Help: "The current temperature in degrees Celsius."
  15.   }, 
  16.   // 指定標簽名稱 
  17.   []string{"house""room"}, 
  18.  ) 
  19.  
  20.  // 注冊到全局默認注冊表中 
  21.  prometheus.MustRegister(temp
  22.  
  23.  // 針對不同標簽值設置不同的指標值 
  24.  temp.WithLabelValues("cnych""living-room").Set(27) 
  25.  temp.WithLabelValues("cnych""bedroom").Set(25.3) 
  26.  temp.WithLabelValues("ydzs""living-room").Set(24.5) 
  27.  temp.WithLabelValues("ydzs""bedroom").Set(27.7) 
  28.  
  29.  // 暴露自定義的指標 
  30.  http.Handle("/metrics", promhttp.Handler()) 
  31.  http.ListenAndServe(":8080", nil) 

上面代碼非常清晰了,運行下面的程序:

  1. ☸ ➜ go run ./label-metric 

啟動完成后重新訪問指標端點 http://localhost:8080/metrics,可以找到 home_temperature_celsius 指標不同標簽維度下面的指標值:

  1. ... 
  2. # HELP home_temperature_celsius The current temperature in degrees Celsius. 
  3. # TYPE home_temperature_celsius gauge 
  4. home_temperature_celsius{house="cnych",room="bedroom"} 25.3 
  5. home_temperature_celsius{house="cnych",room="living-room"} 27 
  6. home_temperature_celsius{house="ydzs",room="bedroom"} 27.7 
  7. home_temperature_celsius{house="ydzs",room="living-room"} 24.5 
  8. ... 

注意:當使用帶有標簽維度的指標時,任何標簽組合的時間序列只有在該標簽組合被訪問過至少一次后才會出現在 /metrics 輸出中,這對我們在 PromQL 查詢的時候會產生一些問題,因為它希望某些時間序列一直存在,我們可以在程序第一次啟動時,將所有重要的標簽組合預先初始化為默認值。

同樣的方式在其他幾個指標類型中使用標簽的方法與上面的方式一致。

 

責任編輯:姜華 來源: k8s技術圈
相關推薦

2023-11-06 01:39:02

Go語言開發

2022-07-08 08:00:31

Prometheus監控

2022-05-12 08:01:26

vmagentprometheus

2021-10-08 06:22:00

Prometheus 儀表化應用運維

2021-03-26 20:37:14

Prometheus監控指標

2023-02-23 08:00:27

PostgreSQPrometheus指標

2024-06-14 08:19:45

2023-09-06 08:46:47

2023-12-27 18:05:13

2024-08-28 08:09:13

contextmetrics類型

2023-12-29 08:01:52

自定義指標模板

2012-07-30 09:41:04

Android搜索功能

2024-01-03 10:00:11

Prometheus指標Go

2011-03-29 10:56:19

Cacti監控

2022-05-18 08:32:05

服務監控Prometheus開源

2020-12-30 08:09:46

運維Prometheus 監控

2023-01-09 11:23:03

系統

2025-07-14 05:00:00

監控系統工具

2022-05-19 08:21:02

vmalert監控

2022-07-11 09:36:38

SpringJava開發
點贊
收藏

51CTO技術棧公眾號

国产一级特黄毛片| 美女黄色片视频| 少妇荡乳情欲办公室456视频| 中国女人久久久| 亚洲欧美在线看| 波多野结衣国产精品| 欧美1—12sexvideos| 26uuu久久综合| 国产在线高清精品| 日韩视频免费观看高清| 欧美日韩亚洲在线观看| 日韩欧美中文字幕制服| 激情网站五月天| 成人ww免费完整版在线观看| 91在线免费播放| 成人精品aaaa网站| 久久精品无码av| 欧美日本亚洲韩国国产| 亚洲欧洲国产精品| 日本黄色www| 另类中文字幕国产精品| 亚洲一级电影视频| 在线免费一区| 毛片在线免费| av欧美精品.com| 3d蒂法精品啪啪一区二区免费| 国产免费av一区| 国模一区二区三区| 色av中文字幕一区| 亚洲一区二区三区蜜桃| 91嫩草精品| 69久久夜色精品国产69蝌蚪网| 天天摸天天碰天天添| 日韩123区| 亚洲色图第一区| 日韩精品无码一区二区三区| 三级视频在线看| 国产福利不卡视频| 国产在线精品播放| 久久久久久亚洲av无码专区| av成人国产| 欧美激情2020午夜免费观看| 无码黑人精品一区二区| 三区四区不卡| 国产一区二区三区视频| 免费在线观看你懂的| jizz国产精品| 精品国产乱码久久久久久闺蜜| 91热视频在线观看| 小说区图片区亚洲| 欧美日韩一区国产| 在线观看亚洲色图| 123成人网| 欧美午夜片在线观看| 亚洲图片一区二区| 激情小说网站亚洲综合网| 亚洲欧美高清视频| 懂色av一区二区夜夜嗨| 99久久精品免费看国产一区二区三区 | 精品无码m3u8在线观看| jizz欧美| 在线视频综合导航| 国产xxxxx视频| 日韩制服一区| 在线精品视频一区二区| 熟女少妇精品一区二区| 国产综合色区在线观看| 日本精品视频一区二区| 日韩免费高清在线| 亚洲成人不卡| 欧美中文字幕一区二区三区亚洲 | 无码少妇一区二区| 精品国产乱码久久久久久果冻传媒 | 亚洲色图一区二区| 日韩精品久久一区二区| 成人女同在线观看| 欧美性猛交xxxx黑人猛交| 欧美最顶级的aⅴ艳星| 久久国产午夜精品理论片最新版本| av免费看在线| 亚洲国产乱码最新视频 | 三级欧美韩日大片在线看| 国产国语刺激对白av不卡| 亚洲资源在线播放| 国产福利一区二区三区在线视频| 国产一级二级三级精品| 免费黄色片在线观看| 国产精品美女久久久久高潮| 99热一区二区三区| 成人三级高清视频在线看| 一本久久精品一区二区| 国产探花在线看| 99a精品视频在线观看| 亚洲精品视频免费| 日韩三级久久久| 精品动漫3d一区二区三区免费版| 欧美一区二区色| 一级全黄少妇性色生活片| 国产成人免费视频网站| 久久久久久久有限公司| 日本视频在线免费观看| 亚洲va国产天堂va久久en| 妓院一钑片免看黄大片| 中文在线综合| 在线观看欧美日韩| 国产在线欧美在线| 蜜桃精品视频在线| 国内外成人免费视频| 午夜伦全在线观看| 精品久久久久久亚洲国产300| 奇米影视四色在线| 精品伊人久久久| 精品国产一区久久久| 国产毛片aaa| 国内精品伊人久久久久av一坑| 久久99精品久久久久久三级 | 欧美高清在线精品一区| 日本wwwcom| 欧美亚洲二区| 亚洲欧美三级伦理| 久久人人爽人人爽人人| 精品一区二区在线视频| 欧美精彩一区二区三区| 岛国毛片av在线| 这里只有精品视频在线观看| 波多野结衣av在线观看| 亚洲私拍自拍| 亚洲va欧美va国产综合久久| lutube成人福利在线观看| 亚洲成a人v欧美综合天堂下载| 亚洲自拍第三页| 日本久久综合| 国产成人一区二| 性插视频在线观看| 亚洲成人精品影院| 不许穿内裤随时挨c调教h苏绵| 欧美jizz| 国产精品夜间视频香蕉| 国产精品99999| 色综合欧美在线| 亚洲色图14p| 亚洲承认在线| 国产一级特黄a大片99| 丰满诱人av在线播放| 日韩欧美亚洲国产精品字幕久久久| 你懂得视频在线观看| 视频在线观看国产精品| 久久久com| 性感女国产在线| 精品中文字幕久久久久久| 99热国产在线观看| 91香蕉视频黄| 国产淫片免费看| 免费看av成人| 国产成人鲁鲁免费视频a| 免费黄色片在线观看| 色欧美片视频在线观看在线视频| 免费毛片视频网站| 日韩成人精品视频| 亚洲v国产v| 亚洲一区有码| 欧美美女15p| 亚洲成人av综合| 亚洲成人av一区二区| 国产精品久久久久久亚洲av| 亚洲影院一区| 日韩影视精品| 国产精品久久久久久久久久辛辛 | 久久久久久国产精品视频| 国产成人免费视频网站| 久久在线中文字幕| 欧美大奶一区二区| 国产97在线播放| 欧美a在线看| 亚洲白拍色综合图区| 日本中文字幕在线| 国产精品久久久久影院亚瑟| 韩国三级与黑人| 国产欧美三级| 亚洲国产精品www| 无码国模国产在线观看| 国产91精品久久久久| 成人精品一区二区三区校园激情| 在线不卡a资源高清| 久久久久久久蜜桃| 久久久久国产精品厨房| 日韩理论片久久| 91精品国产综合久久久久久| 成人性生交xxxxx网站| 888av在线| 日韩免费视频一区| www.伊人久久| 一区二区中文字幕在线| 日韩少妇一区二区| 久久国产视频网| 欧美亚洲色图视频| 国产一区2区| 99一区二区三区| 欧美日韩精品免费观看视完整| 俺去亚洲欧洲欧美日韩| 国产综合视频在线| 欧美色精品天天在线观看视频| 久久久久久久久97| 国产免费观看久久| 国产日韩视频一区| 美日韩一区二区三区| 久久久久免费看黄a片app| 成人在线国产| 国严精品久久久久久亚洲影视| 在线一区视频观看| 久久久亚洲成人| 久久五月精品| 亚洲天堂男人天堂| 精品www久久久久奶水| 亚洲日本va中文字幕| 日韩暖暖在线视频| heyzo中文字幕在线| 久久精品国产久精国产思思| 日韩欧美亚洲系列| 欧美成人女星排行榜| 亚洲综合免费视频| 色婷婷综合久久久| 精品无码人妻一区二区三区品 | 亚洲国产网站| 日本精品免费视频| 色综合久久网| 日韩免费毛片| 国产精品调教| 91最新在线免费观看| jizz亚洲女人高潮大叫| 日本久久久久久久久久久| 69av成人| 久久人人爽人人| 中文字幕在线观看网站| 久久精品国产一区二区三区| 91伦理视频在线观看| 亚洲视频欧美视频| 婷婷婷国产在线视频| 亚洲福利视频网| 黄色美女一级片| 精品久久久久久久久久久久久久久 | 国产高清自拍一区| 日本在线一区二区三区| 亚洲一区二区三区乱码aⅴ| 四虎国产精品成人免费影视| 国产色婷婷国产综合在线理论片a| 成人精品三级| 国产美女直播视频一区| 777午夜精品电影免费看| 国产va免费精品高清在线观看| 高清不卡亚洲| 日韩av成人在线| 午夜无码国产理论在线| 国产精品成熟老女人| 少妇精品视频一区二区免费看| 国产va免费精品高清在线观看| 欧美日韩国产网站| 国产在线一区二区三区| 国产精品视频一区二区三区| 亚洲一区二区三区久久| 97人人澡人人爽91综合色| 高清视频在线观看一区| 美女视频免费精品| 美乳视频一区二区| 欧美先锋资源| 在线观看成人av电影| 一个色综合网| 日本a视频在线观看| 性欧美xxxx大乳国产app| 国产精品拍拍拍| 国产一区二区不卡在线| 国产精品偷伦视频免费观看了| 成人动漫一区二区| 久久久亚洲av波多野结衣| 欧美激情资源网| 中文字幕另类日韩欧美亚洲嫩草| 亚洲一区视频在线观看视频| 欧美三级韩国三级日本三斤在线观看 | 黄色精品一二区| 97超碰人人看| 91免费视频网| 女教师淫辱の教室蜜臀av软件| 一区二区三区四区不卡视频| 色播视频在线播放| 欧美性猛交xxxx黑人交| 国产成人三级在线播放| 精品国产乱码久久久久久免费| 91传媒视频在线观看| 欧美大陆国产| 999精品视频一区二区三区| 日韩超碰人人爽人人做人人添| 日韩国产一区久久| 欧美暴力喷水在线| 免费在线观看的av网站| 久久草av在线| 国产精品嫩草av| 国产精品第五页| 天天操天天干视频| 在线成人av网站| 日本福利片在线| 欧美日韩成人黄色| 成人开心激情| 国产在线资源一区| 久久久久久久久丰满| 欧美 国产 综合| 国内久久精品视频| 一区二区精品免费| 亚洲国产欧美在线| 亚洲无码精品国产| 精品爽片免费看久久| 亚洲丝袜精品| 国产精品美乳在线观看| 美女福利一区| www.男人天堂网| 老司机精品视频导航| 李宗瑞91在线正在播放| 亚洲在线视频一区| 97久久人国产精品婷婷| 日韩成人xxxx| 牛牛电影国产一区二区| 成人免费视频网址| 精品一区不卡| 免费av网址在线| 99re热这里只有精品视频| 一区视频免费观看| 欧美人妇做爰xxxⅹ性高电影 | 一区二区在线视频播放| 国产va在线视频| 懂色一区二区三区av片 | 精品无码一区二区三区爱欲| 精品一二三四区| 伊人久久久久久久久久久久久久| 欧美亚洲动漫精品| 久蕉依人在线视频| 欧美尤物巨大精品爽| 国偷自产av一区二区三区| 国内精品国产三级国产99| 久草精品在线观看| 手机看片国产日韩| 在线观看日韩一区| 国内av一区二区三区| 欧美综合国产精品久久丁香| 亚洲精品进入| 日本久久久精品视频| 99精品久久99久久久久| 久草手机在线观看| 日韩黄在线观看| 日本乱码一区二区三区不卡| 精品欧美一区二区三区久久久 | 98精品国产高清在线xxxx天堂| 97久久超碰| 国产午夜福利在线播放| 99久久国产免费看| 国产无套丰满白嫩对白| 亚洲欧美国产精品久久久久久久| 欧美xx视频| 亚洲第一在线综合在线| 毛片av一区二区| 夫妻性生活毛片| 欧美mv日韩mv国产| 女人高潮被爽到呻吟在线观看 | 麻豆av免费看| 亚洲成年人影院| 日本一区高清| 国产精品高潮粉嫩av| 99九九热只有国产精品| 中文字幕55页| 性做久久久久久久免费看| 久久久久久青草| 91精品久久久久久久久久| 午夜精品久久久久99热蜜桃导演 | 久久九九影视网| 中文字幕乱码在线观看| 久久伊人精品一区二区三区| youjizzjizz亚洲| 成年网站在线免费观看| 国产精品人人做人人爽人人添 | 亚洲欧美国产va在线影院| ww久久综合久中文字幕| 先锋影音男人资源| 成人免费视频免费观看| 狠狠狠狠狠狠狠| 久久久精品网站| 先锋影音国产精品| 色噜噜狠狠一区二区| 亚洲午夜国产一区99re久久| 黄色视屏网站在线免费观看| 91欧美日韩一区| 国产欧美亚洲一区| 亚洲色图27p| 日韩精品在线免费播放| av国产精品| 漂亮人妻被中出中文字幕| 国产精品国产馆在线真实露脸| 殴美一级特黄aaaaaa| 国产免费成人av| 国产视频久久| 欧美日韩人妻精品一区二区三区| 亚洲欧美在线播放| 日韩精品一区二区三区中文字幕 |