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

Prometheus時(shí)序數(shù)據(jù)庫(kù)-數(shù)據(jù)的查詢

運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維
Promql是非常強(qiáng)大的,可以滿足我們的各種需求。其運(yùn)行原理自然也激起了筆者的好奇心,本篇文章雖然只分析了一條簡(jiǎn)單的Promql,但萬(wàn)變不離其宗,任何Promql都是類似的運(yùn)行邏輯。希望本文對(duì)讀者能有所幫助。

[[387578]]

前言

在之前的博客里,筆者詳細(xì)闡述了Prometheus數(shù)據(jù)的插入過(guò)程。但我們最常見(jiàn)的打交道的是數(shù)據(jù)的查詢。Prometheus提供了強(qiáng)大的Promql來(lái)滿足我們千變?nèi)f化的查詢需求。在這篇文章里面,筆者就以一個(gè)簡(jiǎn)單的Promql為例,講述下Prometheus查詢的過(guò)程。

Promql

一個(gè)Promql表達(dá)式可以計(jì)算為下面四種類型:

  1. 瞬時(shí)向量(Instant Vector) - 一組同樣時(shí)間戳的時(shí)間序列(取自不同的時(shí)間序列,例如不同機(jī)器同一時(shí)間的CPU idle) 
  2. 區(qū)間向量(Range vector) - 一組在一段時(shí)間范圍內(nèi)的時(shí)間序列 
  3. 標(biāo)量(Scalar) - 一個(gè)浮點(diǎn)型的數(shù)據(jù)值 
  4. 字符串(String) - 一個(gè)簡(jiǎn)單的字符串 

我們還可以在Promql中使用svm/avg等集合表達(dá)式,不過(guò)只能用在瞬時(shí)向量(Instant Vector)上面。為了闡述Prometheus的聚合計(jì)算以及篇幅原因,筆者在本篇文章只詳細(xì)分析瞬時(shí)向量(Instant Vector)的執(zhí)行過(guò)程。

瞬時(shí)向量(Instant Vector)

前面說(shuō)到,瞬時(shí)向量是一組擁有同樣時(shí)間戳的時(shí)間序列。但是實(shí)際過(guò)程中,我們對(duì)不同Endpoint采樣的時(shí)間是不可能精確一致的。所以,Prometheus采取了距離指定時(shí)間戳之前最近的數(shù)據(jù)(Sample)。如下圖所示:

 

當(dāng)然,如果是距離當(dāng)前時(shí)間戳1個(gè)小時(shí)的數(shù)據(jù)直觀看來(lái)肯定不能納入到我們的返回結(jié)果里面。

所以Prometheus通過(guò)一個(gè)指定的時(shí)間窗口來(lái)過(guò)濾數(shù)據(jù)(通過(guò)啟動(dòng)參數(shù)—query.lookback-delta指定,默認(rèn)5min)。

對(duì)一條簡(jiǎn)單的Promql進(jìn)行分析

好了,解釋完Instant Vector概念之后,我們可以著手進(jìn)行分析了。直接上一條帶有聚合函數(shù)的Promql吧。

  1. SUM BY (group) (http_requests{job="api-server",group="production"}) 

首先,對(duì)于這種有語(yǔ)法結(jié)構(gòu)的語(yǔ)句肯定是將其Parse一把,構(gòu)造成AST樹(shù)了。調(diào)用

  1. promql.ParseExpr 

由于Promql較為簡(jiǎn)單,所以Prometheus直接采用了LL語(yǔ)法分析。在這里直接給出上述Promql的AST樹(shù)結(jié)構(gòu)。

 

Prometheus對(duì)于語(yǔ)法樹(shù)的遍歷過(guò)程都是通過(guò)vistor模式,具體到代碼為:

  1. ast.go vistor設(shè)計(jì)模式 
  2. func Walk(v Visitor, node Node, path []Node) error { 
  3.     var err error 
  4.     if v, err = v.Visit(node, path); v == nil || err != nil { 
  5.         return err 
  6.     } 
  7.     path = append(path, node) 
  8.  
  9.     for _, e := range Children(node) { 
  10.         if err := Walk(v, e, path); err != nil { 
  11.             return err 
  12.         } 
  13.     } 
  14.  
  15.     _, err = v.Visit(nil, nil) 
  16.     return err 
  17. func (f inspector) Visit(node Node, path []Node) (Visitor, error) { 
  18.     if err := f(node, path); err != nil { 
  19.         return nil, err 
  20.     } 
  21.  
  22.     return f, nil 

通過(guò)golang里非常方便的函數(shù)式功能,直接傳遞求值函數(shù)inspector進(jìn)行不同情況下的求值。

  1. type inspector func(Node, []Node) error 

求值過(guò)程

具體的求值過(guò)程核心函數(shù)為:

  1. func (ng *Engine) execEvalStmt(ctx context.Context, query *query, s *EvalStmt) (Value, storage.Warnings, error) { 
  2.     ...... 
  3.     querier, warnings, err := ng.populateSeries(ctxPrepare, query.queryable, s)     // 這邊拿到對(duì)應(yīng)序列的數(shù)據(jù) 
  4.     ...... 
  5.     val, err := evaluator.Eval(s.Expr) // here 聚合計(jì)算 
  6.     ...... 
  7.  

populateSeries

首先通過(guò)populateSeries的計(jì)算出VectorSelector Node所對(duì)應(yīng)的series(時(shí)間序列)。這里直接給出求值函數(shù)

  1. func(node Node, path []Node) error { 
  2.     ...... 
  3.     querier, err := q.Querier(ctx, timestamp.FromTime(mint), timestamp.FromTime(s.End)) 
  4.     ...... 
  5.     case *VectorSelector: 
  6.         ....... 
  7.         set, wrn, err = querier.Select(params, n.LabelMatchers...) 
  8.         ...... 
  9.         n.unexpandedSeriesSet = set 
  10.     ...... 
  11.     case *MatrixSelector: 
  12.         ...... 
  13. return nil 

可以看到這個(gè)求值函數(shù),只對(duì)VectorSelector/MatrixSelector進(jìn)行操作,針對(duì)我們的Promql也就是只對(duì)葉子節(jié)點(diǎn)VectorSelector有效。

 

select

獲取對(duì)應(yīng)數(shù)據(jù)的核心函數(shù)就在querier.Select。我們先來(lái)看下qurier是如何得到的.

  1. querier, err := q.Querier(ctx, timestamp.FromTime(mint), timestamp.FromTime(s.End)) 

根據(jù)時(shí)間戳范圍去生成querier,里面最重要的就是計(jì)算出哪些block在這個(gè)時(shí)間范圍內(nèi),并將他們附著到querier里面。具體見(jiàn)函數(shù)

  1. func (db *DB) Querier(mint, maxt int64) (Querier, error) { 
  2.     for _, b := range db.blocks { 
  3.         ...... 
  4.         // 遍歷blocks挑選block 
  5.     } 
  6.     // 如果maxt>head.mint(即內(nèi)存中的block),那么也加入到里面querier里面。 
  7.     if maxt >= db.head.MinTime() { 
  8.         blocks = append(blocks, &rangeHead{ 
  9.             head: db.head, 
  10.             mint: mint, 
  11.             maxt: maxt, 
  12.         }) 
  13.     } 
  14.     ...... 

 

知道數(shù)據(jù)在哪些block里面,我們就可以著手進(jìn)行計(jì)算VectorSelector的數(shù)據(jù)了。

  1. // labelMatchers {job:api-server} {__name__:http_requests} {group:production} 
  2.  querier.Select(params, n.LabelMatchers...) 

有了matchers我們很容易的就能夠通過(guò)倒排索引取到對(duì)應(yīng)的series。為了篇幅起見(jiàn),我們假設(shè)數(shù)據(jù)都在headBlock(也就是內(nèi)存里面)。那么我們對(duì)于倒排的計(jì)算就如下圖所示:

 

這樣,我們的VectorSelector節(jié)點(diǎn)就已經(jīng)有了最終的數(shù)據(jù)存儲(chǔ)地址信息了,例如圖中的memSeries refId=3和4。


 

如果想了解在磁盤中的數(shù)據(jù)尋址,可以詳見(jiàn)筆者之前的博客

  1. <<Prometheus時(shí)序數(shù)據(jù)庫(kù)-磁盤中的存儲(chǔ)結(jié)構(gòu)>> 

通過(guò)populateSeries找到對(duì)應(yīng)的數(shù)據(jù),那么我們就可以通過(guò)evaluator.Eval獲取最終的結(jié)果了。計(jì)算采用后序遍歷,等下層節(jié)點(diǎn)返回?cái)?shù)據(jù)后才開(kāi)始上層節(jié)點(diǎn)的計(jì)算。那么很自然的,我們先計(jì)算VectorSelector。

  1. func (ev *evaluator) eval(expr Expr) Value { 
  2.     ...... 
  3.     case *VectorSelector: 
  4.     // 通過(guò)refId拿到對(duì)應(yīng)的Series 
  5.     checkForSeriesSetExpansion(ev.ctx, e) 
  6.     // 遍歷所有的series 
  7.     for i, s := range e.series { 
  8.         // 由于我們這邊考慮的是instant query,所以只循環(huán)一次 
  9.         for ts := ev.startTimestamp; ts <= ev.endTimestamp; ts += ev.interval { 
  10.             // 獲取距離ts最近且小于ts的最近的sample 
  11.             _, v, ok := ev.vectorSelectorSingle(it, e, ts) 
  12.             if ok { 
  13.                     if ev.currentSamples < ev.maxSamples { 
  14.                         // 注意,這邊的v對(duì)應(yīng)的原始t被替換成了ts,也就是instant query timeStamp 
  15.                         ss.Points = append(ss.Points, Point{V: v, T: ts}) 
  16.                         ev.currentSamples++ 
  17.                     } else { 
  18.                         ev.error(ErrTooManySamples(env)) 
  19.                     } 
  20.                 } 
  21.             ...... 
  22.         } 
  23.     } 

如代碼注釋中看到,當(dāng)我們找到一個(gè)距離ts最近切小于ts的sample時(shí)候,只用這個(gè)sample的value,其時(shí)間戳則用ts(Instant Query指定的時(shí)間戳)代替。

其中vectorSelectorSingle值得我們觀察一下:

  1. func (ev *evaluator) vectorSelectorSingle(it *storage.BufferedSeriesIterator, node *VectorSelector, ts int64) (int64, float64, bool){ 
  2.     ...... 
  3.     // 這一步是獲取>=refTime的數(shù)據(jù),也就是我們instant query傳入的 
  4.     ok := it.Seek(refTime) 
  5.     ...... 
  6.         if !ok || t > refTime {  
  7.         // 由于我們需要的是<=refTime的數(shù)據(jù),所以這邊回退一格,由于同一memSeries同一時(shí)間的數(shù)據(jù)只有一條,所以回退的數(shù)據(jù)肯定是<=refTime的 
  8.         t, v, ok = it.PeekBack(1) 
  9.         if !ok || t < refTime-durationMilliseconds(LookbackDelta) { 
  10.             return 0, 0, false 
  11.         } 
  12.     } 

就這樣,我們找到了series 3和4距離Instant Query時(shí)間最近且小于這個(gè)時(shí)間的兩條記錄,并保留了記錄的標(biāo)簽。這樣,我們就可以在上層進(jìn)行聚合。

 

SUM by聚合

葉子節(jié)點(diǎn)VectorSelector得到了對(duì)應(yīng)的數(shù)據(jù)后,我們就可以對(duì)上層節(jié)點(diǎn)AggregateExpr進(jìn)行聚合計(jì)算了。代碼棧為:

  1. evaluator.rangeEval 
  2.     |->evaluate.eval.func2 
  3.         |->evelator.aggregation grouping keygroup 

具體的函數(shù)如下圖所示:

  1. func (ev *evaluator) aggregation(op ItemType, grouping []string, without bool, param interface{}, vec Vector, enh *EvalNodeHelper) Vector { 
  2.     ...... 
  3.     // 對(duì)所有的sample 
  4.     for _, s := range vec { 
  5.         metric := s.Metric 
  6.         ...... 
  7.         group, ok := result[groupingKey]  
  8.         // 如果此group不存在,則新加一個(gè)group 
  9.         if !ok { 
  10.             ...... 
  11.             result[groupingKey] = &groupedAggregation{ 
  12.                 labels:     m, // 在這里我們的m=[group:production] 
  13.                 value:      s.V, 
  14.                 mean:       s.V, 
  15.                 groupCount: 1, 
  16.             } 
  17.             ...... 
  18.         } 
  19.         switch op { 
  20.         // 這邊就是對(duì)SUM的最終處理 
  21.         case SUM
  22.             group.value += s.V 
  23.         ..... 
  24.         } 
  25.     } 
  26.     ..... 
  27.     for _, aggr := range result { 
  28.         enh.out = append(enh.out, Sample{ 
  29.         Metric: aggr.labels, 
  30.         Point:  Point{V: aggr.value}, 
  31.         }) 
  32.     } 
  33.     ...... 
  34.     return enh.out 

好了,有了上面的處理,我們聚合的結(jié)果就變?yōu)?

 

這個(gè)和我們的預(yù)期結(jié)果一致,一次查詢的過(guò)程就到此結(jié)束了。

總結(jié)

 

Promql是非常強(qiáng)大的,可以滿足我們的各種需求。其運(yùn)行原理自然也激起了筆者的好奇心,本篇文章雖然只分析了一條簡(jiǎn)單的Promql,但萬(wàn)變不離其宗,任何Promql都是類似的運(yùn)行邏輯。希望本文對(duì)讀者能有所幫助。

 

責(zé)任編輯:武曉燕 來(lái)源: 解Bug之路
相關(guān)推薦

2021-03-08 10:18:55

數(shù)據(jù)庫(kù)數(shù)據(jù)Prometheus

2021-03-01 10:20:52

存儲(chǔ)

2021-02-22 10:37:47

存儲(chǔ)Prometheus

2022-07-06 15:41:55

數(shù)據(jù)庫(kù)

2022-09-23 07:44:48

時(shí)序數(shù)據(jù)庫(kù)物聯(lián)網(wǎng)

2017-11-20 11:37:19

時(shí)序數(shù)據(jù)數(shù)據(jù)存儲(chǔ)HBase

2021-09-26 10:08:33

TSDB時(shí)序數(shù)據(jù)庫(kù)壓縮解壓

2022-07-11 10:45:12

數(shù)據(jù)庫(kù)分析

2020-03-11 09:50:21

時(shí)序數(shù)據(jù)庫(kù)快速檢索

2022-07-11 11:12:32

數(shù)據(jù)分析

2022-12-18 19:38:31

時(shí)序數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)

2021-08-31 14:01:59

時(shí)序數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)數(shù)據(jù)

2022-07-07 12:23:29

數(shù)據(jù)庫(kù)

2022-07-07 12:37:27

數(shù)據(jù)

2022-06-10 17:37:37

數(shù)據(jù)庫(kù)

2017-09-05 14:45:14

時(shí)序數(shù)據(jù)數(shù)據(jù)庫(kù)大數(shù)據(jù)

2018-06-26 09:37:07

時(shí)序數(shù)據(jù)庫(kù)FacebookNoSQL

2021-08-04 05:49:40

數(shù)據(jù)庫(kù)數(shù)時(shí)序數(shù)據(jù)庫(kù)技術(shù)

2019-05-30 08:31:39

數(shù)據(jù)庫(kù)QTSDB分布式

2018-04-16 08:44:51

InfluxDB TS時(shí)序數(shù)據(jù)庫(kù)存儲(chǔ)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产色91在线| 91精品国产乱码久久久久久久| 亚洲国产成人va在线观看天堂| 国产另类自拍| 人人妻人人爽人人澡人人精品| 日韩av自拍| 亚洲成成品网站| 国产成人无码一二三区视频| 天天综合视频在线观看| 国产精品99久久久久久似苏梦涵 | 亚洲bt天天射| 免费在线观看黄网站| 久久一区二区中文字幕| 亚洲成人激情视频| 日本三级黄色网址| 欧美调教sm| 亚洲啪啪综合av一区二区三区| 国产精品一区视频| 国产又黄又爽视频| 久久午夜视频| 亚洲18私人小影院| 免费中文字幕在线| 成人羞羞视频播放网站| 亚洲码在线观看| 欧美日韩一区二区区别是什么| 99re66热这里只有精品4| 伊人色综合久久天天人手人婷| 久久久久久久久久久久久久一区| 国产精品视频无码| 日韩vs国产vs欧美| 欧亚精品中文字幕| 伊人365影院| 午夜精品久久久久99热蜜桃导演| 在线观看精品国产视频| 亚洲狠狠婷婷综合久久久久图片| 日韩一区二区三区在线看| 欧美日韩午夜在线| 噼里啪啦国语在线观看免费版高清版| 国产精品25p| 亚洲综合免费观看高清完整版在线 | 国产免费观看久久| 欧美三日本三级少妇三99| 无码国产色欲xxxx视频| 成人蜜臀av电影| 97免费高清电视剧观看| 国产毛片久久久久| 国产一区日韩二区欧美三区| 国产日韩换脸av一区在线观看| 日韩综合在线观看| 久久永久免费| 国产成人精品免费久久久久| 国产精品久免费的黄网站| 国产欧美成人| 热re99久久精品国产66热| av资源免费观看| 先锋影音久久久| 国产成人+综合亚洲+天堂| 日韩av成人在线| www.日日操| 综合久久2023| 色婷婷av一区二区三区软件| 啊啊啊一区二区| 中老年在线免费视频| 精品久久久久久久久久| 日韩一级精品视频在线观看| www.久久久久久久久久久| 一区在线不卡| 日韩欧美成人激情| 精品人妻一区二区免费| 久久久久久久久久久久久久久久久久久久| 精品日韩欧美一区二区| 国产69视频在线观看| 美女福利一区| 亚洲人成电影网站色…| 阿v天堂2014| 婷婷亚洲五月色综合| 欧美高清性猛交| 日本一区二区三区四区五区| 欧美一级网站| 国产精品一区二区久久精品| 国产绿帽一区二区三区| 福利视频网站一区二区三区| 北条麻妃久久精品| 精品无人区无码乱码毛片国产| 国产精品日韩精品中文字幕| 尤物九九久久国产精品的分类| 正在播放国产对白害羞| 欧美阿v一级看视频| 97精品免费视频| 欧美成人dvd在线视频| 免费观看黄色av| 久久精品视频免费| eeuss中文| 麻豆理论在线观看| 欧美日韩高清一区| 天天躁日日躁狠狠躁av麻豆男男| 精品中文字幕一区二区三区av| 色妞一区二区三区| 91亚洲欧美| 久久精品国语| 成人av色在线观看| 日批视频在线播放| 国产日本欧洲亚洲| 欧美一级爱爱视频| 素人一区二区三区| 精品国产乱码久久久久久图片| 国产特黄级aaaaa片免| 亚洲色图二区| 日韩av电影在线网| 亚洲精品一区二区三区四区 | 香蕉视频免费网站| 日本久久黄色| 91精品国产乱码久久久久久久久| 92久久精品一区二区| 不卡一区二区在线| 国产日韩欧美大片| 国产精品第一国产精品| 亚洲韩国日本中文字幕| 国产女片a归国片aa| 久久综合图片| 久久精品一二三区| 在线观看午夜av| 蜜臀av亚洲一区中文字幕| 99在线视频播放| 午夜视频在线免费观看| 欧美日韩裸体免费视频| 深夜做爰性大片蜜桃| 欧美激情久久久久久久久久久| 久久久91精品国产| 国产九色91回来了| 91麻豆精品在线观看| 97久久国产亚洲精品超碰热 | 国产精品久久久久久网站| 欧美亚洲精品在线观看| 亚洲欧美激情一区二区| 久久人人爽av| 欧美好骚综合网| 国产精品入口夜色视频大尺度| 麻豆av电影在线观看| 日韩欧美国产骚| 中文字幕影片免费在线观看| 在线电影一区| 国精产品99永久一区一区| 国产www视频在线观看| 亚洲深深色噜噜狠狠爱网站| 欧美精品国产精品日韩精品| 一区二区三区免费观看视频| 国产精品福利电影一区二区三区四区 | 伦xxxx在线| 欧美日韩高清一区二区三区| 四虎影视一区二区| 精品亚洲成av人在线观看| 在线观看福利一区| 国产日韩一区二区三免费高清| 久久精品电影网| 精品国产九九九| 亚洲国产精品久久不卡毛片 | 国产精品天干天干在线综合| 在线黄色免费观看| 久久久久电影| 91在线直播亚洲| 青青在线视频| 亚洲国产精品一区二区三区| 久久久精品福利| 欧美激情中文字幕| 中文字幕丰满乱码| 国产综合欧美| 免费成人av网站| 精品亚洲a∨| 久久综合亚洲社区| 殴美一级特黄aaaaaa| 欧美日韩在线影院| 永久免费看mv网站入口78| 午夜亚洲精品| 杨幂一区欧美专区| 伊人www22综合色| 欧美一级在线亚洲天堂| 午夜视频在线观看网站| 日韩欧美二区三区| 男人天堂2024| 中文字幕综合网| 91九色蝌蚪porny| 视频一区在线播放| 国产又粗又爽又黄的视频| 豆花视频一区二区| 国产精品福利片| 97caopor国产在线视频| 亚洲精品自产拍| 国产精品伦一区二区三区| 亚洲一区在线观看免费 | 一区二区三区精品久久久| 朝桐光av一区二区三区| 麻豆精品视频在线观看视频| 欧美图片激情小说| 欧美a级成人淫片免费看| 国产精品亚洲一区| 国模私拍国内精品国内av| 久久久亚洲精选| av大全在线免费看| 亚洲国产日韩欧美综合久久 | 精品国产免费一区二区三区香蕉 | 神马午夜在线视频| 久久亚洲精品成人| 激情小视频在线观看| 精品国产乱码久久久久久久久| а中文在线天堂| 亚洲成a天堂v人片| 久草视频手机在线| 国产欧美综合色| 波多野结衣影院| 国产福利精品一区二区| 污版视频在线观看| 欧美在线综合| 福利视频一二区| 欧美一区二区三区另类| 热舞福利精品大尺度视频| av毛片精品| 亚洲一区二区三区在线视频| 福利精品一区| 国产精品欧美日韩久久| 九色porny自拍视频在线播放| 欧美成人激情在线| 免费观看久久久久| 在线看日韩欧美| 国产在线观看精品一区| 日韩久久免费视频| 人妻精品一区一区三区蜜桃91| 欧美一级午夜免费电影| 中文字幕视频二区| 在线免费观看一区| 久草手机在线视频| 一本大道久久a久久精品综合| 婷婷激情五月网| 偷偷要91色婷婷| wwwxxx亚洲| 天天影视涩香欲综合网| 国产无套内射又大又猛又粗又爽| 亚洲免费av在线| 欧美黑人猛猛猛| 夜夜夜精品看看| 欧美精品一级片| 亚洲自拍与偷拍| 免费无遮挡无码永久在线观看视频| 亚洲日穴在线视频| 国产97免费视频| 亚洲精品成人在线| 久久国产精品波多野结衣| 亚洲精品成人悠悠色影视| 国产成人无码aa精品一区| 亚洲欧美日韩电影| 久久久久久久福利| 亚洲不卡在线观看| 国产成人精品网| 在线视频欧美精品| 亚洲网站免费观看| 欧美一区二区三区思思人| 国产极品久久久| 精品成人一区二区三区| 少妇人妻偷人精品一区二区| 日韩av在线电影网| 成人三级黄色免费网站| 最近2019年日本中文免费字幕| 日本暖暖在线视频| 欧美激情aaaa| 亚洲性色av| 国产精品无av码在线观看| 亚洲精品tv| 99国产视频| 亚洲免费观看高清完整版在线观| 日韩在线国产| 亚洲最大黄网| 5月婷婷6月丁香| 老司机精品视频一区二区三区| 久久精品一二三四| 97久久超碰国产精品| 日本人亚洲人jjzzjjz| 亚洲人成网站精品片在线观看| www.99re7.com| 91久久精品网| 亚洲精品国偷拍自产在线观看蜜桃| 亚洲精品一区二区三区精华液 | 手机av免费在线观看| 亚洲一级黄色片| bestiality新另类大全| 秋霞av国产精品一区| 91丨精品丨国产| 精品国产综合| 亚洲成av人片乱码色午夜| 99精品在线免费视频| 另类小说欧美激情| 香港三级日本三级| 自拍偷自拍亚洲精品播放| 欧美激情黑白配| 欧美一区二区三区啪啪| 黄视频在线观看免费| 久久99热精品这里久久精品| 爱情电影社保片一区| 91精品国产综合久久久久久丝袜| 国产精品一国产精品| 蜜臀av色欲a片无码精品一区| 日韩av不卡在线观看| 污污内射在线观看一区二区少妇| 国产精品卡一卡二卡三| 久久久久久久久久久久久久av| 欧美夫妻性生活| 天堂中文资源在线| 久久影院资源网| 草莓视频成人appios| 精品国产免费一区二区三区 | 最近免费中文字幕中文高清百度| 国产精品1024| 青青操在线播放| 日本韩国一区二区| 姝姝窝人体www聚色窝| 免费av一区二区| 久久人人视频| 日韩性感在线| 久久亚洲不卡| 亚洲精品中文字幕在线播放| 亚洲精品免费一二三区| 一起草av在线| 日韩中文字幕av| 日本在线中文字幕一区二区三区| 精品一区二区三区视频日产| 精品1区2区3区4区| av地址在线观看| 亚洲免费av高清| 97在线视频人妻无码| 色偷偷噜噜噜亚洲男人的天堂| 欧美日韩美女| 美国av一区二区三区| 亚洲乱亚洲高清| 800av在线播放| 亚洲高清久久久| 后入内射欧美99二区视频| 欧美成人亚洲成人| 亚洲色图图片| 国产在线拍揄自揄拍无码| 国产伦精品一区二区三区视频青涩| 免费黄色国产视频| 欧美人妖巨大在线| 老司机在线看片网av| 成人深夜直播免费观看| 一区二区三区四区日韩| 国产永久免费网站| 亚洲三级在线免费观看| 国产黄色片网站| 欧美肥婆姓交大片| 国产精品欧美大片| 欧美三级一级片| 久久夜色精品国产欧美乱极品| 中文字幕第四页| 国产午夜精品视频| 日本久久二区| 亚洲国产精品女人| 国产成人精品影视| 日韩女同强女同hd| 亚洲区中文字幕| 亚洲免费一区| 日本男女交配视频| 91在线云播放| 久久久久久av无码免费看大片| 自拍偷拍亚洲区| 这里视频有精品| 亚洲不卡中文字幕无码| 久久久不卡网国产精品二区| 在线黄色av网站| 欧美猛男性生活免费| 久久精品色综合| 亚洲免费av一区二区三区| 综合分类小说区另类春色亚洲小说欧美| a在线观看免费| 69精品小视频| 久久精品国产大片免费观看| 性生活一级大片| 黑丝美女久久久| 日本福利在线| 国产女主播一区二区| 日韩va亚洲va欧美va久久| 农村妇女精品一区二区| 亚洲国产精品人久久电影| 久久久加勒比| 黄色成人在线看| 国产精品久久久久久久久久免费看 | 五月天亚洲综合情| 成人性生交大片免费看中文| 成人a v视频| 欧美精品国产精品日韩精品| 精品久久视频| 亚洲无人区码一码二码三码| 在线一区二区三区做爰视频网站| 在线视频观看国产| 欧美一级二级三级| 成人综合婷婷国产精品久久免费| 波多野结衣黄色| 亚洲18私人小影院| 欧美国产先锋| 夫妇露脸对白88av| 日韩精品在线影院| 亚洲精品观看|