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

使用Golang編寫自定義Prometheus Metrics

網絡 通信技術
為什么想到要用golang來編寫metrics呢?這主要是我們的一個客戶那里,k8s網絡使用了ovs,并且做了bond,即bond0和bond1,每個bond下面2張網卡。

本文轉載自微信公眾號「運維開發故事」,作者xiyangxixia。轉載本文請聯系運維開發故事公眾號。

一、前言

為什么想到要用golang來編寫metrics呢?這主要是我們的一個客戶那里,k8s網絡使用了ovs,并且做了bond,即bond0和bond1,每個bond下面2張網卡。在上了生產后,讓我每天都要檢查一下網卡是否正常,因為之前就有網卡DOWN了。而我呢,比較懶,不想手動去檢查。想著通過prometheus最終展示到grafana,我就在grafana上看看有沒有處于異常的網卡就好了。其次呢,我最近剛好在學習go,也想練練手;同時也問了一下研發同學,說很簡單,叫我試試,遇到困難時也愿意幫助我。所以,我就打算試試了。

二、環境

組件 版本 備注
k8s v1.14  
ovs v2.9.5  
go 1.14.1  

三、目標

目標就是要通過prometheus去拉取我的ovs bond的網卡狀態指標,那么這里我需要編寫一個go程序去獲取我主機的ovs bond信息,并最終以metrics方式暴露供prometheus來拉取,在grafana上展示。示例如下:

  1. # 現獲取當前bond信息 
  2. [root@test~]$ ovs-appctl  bond/show |grep '^slave' |grep -v grep  |awk '{print $2""$3}' 
  3. a1-b1:enabled 
  4. a2-b2:enabled 
  5. a3-b3:enabled 
  6. a4-b4:disabled 
  7. # 最終組件暴露的數據如下 5代表獲取bond信息的命令執行執行失敗了,0-4表示有幾張處于disabled狀態的網卡 
  8. curl http://$IP:$PORT/metrics  
  9. ovs_bond_status{component="ovs"} 5 
  10. ovs_bond_status{component="ovs","a1b1"="enabled","a2b2"="disabled","a3b3"="enabled",a4b4="disabled“} 2 

四、構想

由于要通過prometheus來抓取指標,所以bond 信息肯定要以metrics格式進行暴露。metrics格式可以參考prometheus官網。

bond有兩個,每個下面有兩張網卡,每張網卡的狀態只有enabled和disabled,因此用數字0-4來告訴用戶有幾張網卡disabled了,用數字5來表示命令執行有問題或沒有bond,需要人工介入。可以通過命令去獲取bond信息,因此還是采取命令方式去獲取。

要對執行命令獲取的輸出結果進行處理并放到metrics中去。注:metrics的label不能有【-】。

shell命令返回的bond正確信息用map去接收,key為網卡名,value為網卡狀態

可以參考client_golang/prometheus

五、實踐

先執行shell命令去獲取bond信息

  1. # 現獲取當前bond信息 
  2. [root@test~]$ ovs-appctl  bond/show |grep '^slave' |grep -v grep  |awk '{print $2""$3}' 
  3. a1-b1:enabled 
  4. a2-b2:enabled 
  5. a3-b3:enabled 
  6. a4-b4:disabled 

要針對shell的輸出結果進行處理

  1. # 執行shell命令,并對輸出進行處理,記錄相關日志 
  2. // return map  
  3. // 一種是執行命令錯誤,一種是執行命令成功,但是返回null 
  4. func getBondStatus() (m map[string]string) { 
  5.  result, err := exec.Command("bash""-c""ovs-appctl bond/show | grep '^slave' | grep -v grep | awk '{print $2\"\"$3}'").Output() 
  6.  if err != nil { 
  7.   log.Error("result: ", string(result)) 
  8.   log.Error("command failed: ", err.Error()) 
  9.   m = make(map[string]string) 
  10.   m["msg"] = "failure" 
  11.   return m 
  12.  } else if len(result) == 0 { 
  13.   log.Error("command exec failed, result is null"
  14.   m = make(map[string]string) 
  15.   m["msg"] = "return null" 
  16.   return m 
  17.  } 
  18. // 對結果進行進行處理,先去除兩邊空格 
  19.  ret := strings.TrimSpace(string(result)) 
  20.     // 通過換行符切割 
  21.  tt := strings.Split(ret, "\n"
  22.  //tt := []string{"a1-b1:enabled","a2-b2:disabled"
  23.     //如果key帶有【-】,則需要去掉 
  24.  var nMap = make(map[string]string) 
  25.  for i := 0; i < len(tt); i++ { 
  26.   // if key contains "-" 
  27.   if strings.Contains(tt[i], "-") == true { 
  28.    nKey := strings.Split(strings.Split(tt[i], ":")[0], "-"
  29.    nMap[strings.Join(nKey, "")] = (strings.Split(tt[i], ":"))[1] 
  30.   } else { 
  31.    nMap[(strings.Split(tt[i], ":"))[0]] = (strings.Split(tt[i], ":"))[1] 
  32.   } 
  33.  } 
  34.  return nMap 

定義metrics指標

  1. // define a struct 
  2. type ovsCollector struct { 
  3.     // 可以定義多個 
  4.  ovsMetric *prometheus.Desc 
  5.  
  6. func (collector *ovsCollector) Describe(ch chan<- *prometheus.Desc) { 
  7.  ch <- collector.ovsMetric 
  8.  
  9. // 網卡名 
  10. var vLable = []string{} 
  11. // 網卡狀態 
  12. var vValue = []string{} 
  13. // 固定label,表明是ovs 
  14. var constLabel = prometheus.Labels{"component""ovs"
  15.  
  16. // define metric 
  17. func newOvsCollector() *ovsCollector { 
  18.  var rm = make(map[string]string) 
  19.  rm = getBondStatus() 
  20.  if _, ok := rm["msg"]; ok { 
  21.   log.Error("command execute failed:", rm["msg"]) 
  22.  } else { 
  23.         //只獲取網卡名 
  24.   for k, _ := range rm { 
  25.    // get the net 
  26.    vLable = append(vLable, k) 
  27.   } 
  28.  } 
  29.     // metric 
  30.  return &ovsCollector{ 
  31.   ovsMetric: prometheus.NewDesc("ovs_bond_status"
  32.    "Show ovs bond status", vLable, 
  33.    constLabel), 
  34.  } 

指標對應值

  1. // 命令執行正確則將對應的網卡、網卡狀態以及處于異常的網卡數量注入到到metrics中去 
  2. func (collector *ovsCollector) Collect(ch chan<- prometheus.Metric) { 
  3.  var metricValue float64 
  4.  var rm = make(map[string]string) 
  5.  rm = getBondStatus() 
  6.  if _, ok := rm["msg"]; ok { 
  7.   log.Error("command exec failed"
  8.   metricValue = 5 
  9.   ch <- prometheus.MustNewConstMetric(collector.ovsMetric, prometheus.CounterValue, metricValue) 
  10.  } else { 
  11.   vValue = vValue[0:0] 
  12.         //只取value 
  13.   for _, v := range rm { 
  14.    // get the net 
  15.    vValue = append(vValue, v) 
  16.             // 針對disabled計數 
  17.    if v == "disabled" { 
  18.     metricValue++ 
  19.    } 
  20.   } 
  21.   ch <- prometheus.MustNewConstMetric(collector.ovsMetric, prometheus.CounterValue, metricValue, vValue...) 
  22.  } 

程序入口

  1. func main() { 
  2.  ovs := newOvsCollector() 
  3.  prometheus.MustRegister(ovs) 
  4.  
  5.  http.Handle("/metrics", promhttp.Handler()) 
  6.  
  7.  log.Info("begin to server on port 8080"
  8.  // listen on port 8080 
  9.  log.Fatal(http.ListenAndServe(":8080", nil)) 

完整代碼

  1. package main 
  2.  
  3. import ( 
  4.  "github.com/prometheus/client_golang/prometheus" 
  5.  "github.com/prometheus/client_golang/prometheus/promhttp" 
  6.  log "github.com/sirupsen/logrus" 
  7.  "net/http" 
  8.  "os/exec" 
  9.  "strings" 
  10.  
  11. // define a struct   from prometheus's struct  named Desc 
  12. type ovsCollector struct { 
  13.  ovsMetric *prometheus.Desc 
  14.  
  15. func (collector *ovsCollector) Describe(ch chan<- *prometheus.Desc) { 
  16.  ch <- collector.ovsMetric 
  17.  
  18. var vLable = []string{} 
  19. var vValue = []string{} 
  20. var constLabel = prometheus.Labels{"component""ovs"
  21.  
  22. //  get the value of the metric from a function who would execute a command and return a float64 value 
  23. func (collector *ovsCollector) Collect(ch chan<- prometheus.Metric) { 
  24.  var metricValue float64 
  25.  var rm = make(map[string]string) 
  26.  rm = getBondStatus() 
  27.  if _, ok := rm["msg"]; ok { 
  28.   log.Error("command exec failed"
  29.   metricValue = 5 
  30.   ch <- prometheus.MustNewConstMetric(collector.ovsMetric, prometheus.CounterValue, metricValue) 
  31.  } else { 
  32.   vValue = vValue[0:0] 
  33.   for _, v := range rm { 
  34.    // get the net 
  35.    vValue = append(vValue, v) 
  36.    if v == "disabled" { 
  37.     metricValue++ 
  38.    } 
  39.   } 
  40.  
  41.  
  42.   ch <- prometheus.MustNewConstMetric(collector.ovsMetric, prometheus.CounterValue, metricValue, vValue...) 
  43.  } 
  44.  
  45. // define metric's name、help 
  46. func newOvsCollector() *ovsCollector { 
  47.  var rm = make(map[string]string) 
  48.  rm = getBondStatus() 
  49.  if _, ok := rm["msg"]; ok { 
  50.   log.Error("command execute failed:", rm["msg"]) 
  51.  } else { 
  52.   for k, _ := range rm { 
  53.    // get the net 
  54.    vLable = append(vLable, k) 
  55.   } 
  56.  } 
  57.  return &ovsCollector{ 
  58.   ovsMetric: prometheus.NewDesc("ovs_bond_status"
  59.    "Show ovs bond status", vLable, 
  60.    constLabel), 
  61.  } 
  62.  
  63. func getBondStatus() (m map[string]string) { 
  64.  result, err := exec.Command("bash""-c""ovs-appctl bond/show | grep '^slave' | grep -v grep | awk '{print $2\"\"$3}'").Output() 
  65.  if err != nil { 
  66.   log.Error("result: ", string(result)) 
  67.   log.Error("command failed: ", err.Error()) 
  68.   m = make(map[string]string) 
  69.   m["msg"] = "failure" 
  70.   return m 
  71.  } else if len(result) == 0 { 
  72.   log.Error("command exec failed, result is null"
  73.   m = make(map[string]string) 
  74.   m["msg"] = "return null" 
  75.   return m 
  76.  } 
  77.  ret := strings.TrimSpace(string(result)) 
  78.  tt := strings.Split(ret, "\n"
  79.  var nMap = make(map[string]string) 
  80.  for i := 0; i < len(tt); i++ { 
  81.   // if key contains "-" 
  82.   if strings.Contains(tt[i], "-") == true { 
  83.    nKey := strings.Split(strings.Split(tt[i], ":")[0], "-"
  84.    nMap[strings.Join(nKey, "")] = (strings.Split(tt[i], ":"))[1] 
  85.   } else { 
  86.    nMap[(strings.Split(tt[i], ":"))[0]] = (strings.Split(tt[i], ":"))[1] 
  87.   } 
  88.  } 
  89.  return nMap 
  90.  
  91. func main() { 
  92.  ovs := newOvsCollector() 
  93.  prometheus.MustRegister(ovs) 
  94.  
  95.  http.Handle("/metrics", promhttp.Handler()) 
  96.  
  97.  log.Info("begin to server on port 8080"
  98.  // listen on port 8080 
  99.  log.Fatal(http.ListenAndServe(":8080", nil)) 

六、部署

因為最終要部署到k8s環境中, 先構建鏡像,參考如下Dockerfile

  1. FROM golang:1.14.1 AS builder 
  2. WORKDIR /go/src 
  3. COPY ./ . 
  4. RUN go build -o ovs_check main.go 
  5.  
  6. # runtime 
  7. FROM centos:7.7 
  8. COPY --from=builder /go/src/ovs_check /xiyangxixia/ovs_check 
  9. ENTRYPOINT ["/xiyangxixia/ovs_check"

我這里部署使用的yaml如下所示:

  1. --- 
  2. apiVersion: apps/v1 
  3. kind: DaemonSet 
  4. metadata: 
  5.   name: ovs-agent 
  6.   namespace: kube-system 
  7. spec: 
  8.   minReadySeconds: 5 
  9.   selector: 
  10.     matchLabels: 
  11.       name: ovs-agent 
  12.   template: 
  13.     metadata: 
  14.       annotations: 
  15.       # 這里三個都要加上,告訴promethue抓取路徑 
  16.         prometheus.io/scrape: "true" 
  17.         prometheus.io/port: "8080" 
  18.         prometheus.io/path: "/metrics" 
  19.       labels: 
  20.         name: ovs-agent 
  21.     spec: 
  22.       containers: 
  23.       - name: ovs-agent 
  24.         image: ovs_bond:v1 
  25.         imagePullPolicy: IfNotPresent 
  26.         resources: 
  27.             limits: 
  28.               cpu: 100m 
  29.               memory: 200Mi 
  30.             requests: 
  31.               cpu: 100m 
  32.               memory: 200Mi 
  33.         securityContext: 
  34.           privileged: true 
  35.           procMount: Default 
  36.         volumeMounts: 
  37.         - mountPath: /lib/modules 
  38.           name: lib-modules 
  39.           readOnly: true 
  40.         - mountPath: /var/run/openvswitch 
  41.           name: ovs-run 
  42.         - mountPath: /usr/bin/ovs-appctl 
  43.           name: ovs-bin 
  44.           subPath: ovs-appctl 
  45.       serviceAccountName: xiyangxixia 
  46.       hostPID: true 
  47.       hostIPC: true 
  48.       volumes: 
  49.       - hostPath: 
  50.           path: /lib/modules 
  51.           type: "" 
  52.         name: lib-modules 
  53.       - hostPath: 
  54.           path: /var/run/openvswitch 
  55.           type: "" 
  56.         name: ovs-run 
  57.       - hostPath: 
  58.           path: /usr/bin/ 
  59.           type: "" 
  60.         name: ovs-bin 
  61.   updateStrategy: 
  62.     type: RollingUpdate 

七、測試

  1. [root@test ~]$ kubectl get po -n kube-system -o wide  |grep ovs 
  2. ovs-agent-h8zc6    1/1     Running     0    2d14h   10.211.55.41   master-1   <none>           <none> 
  3. [root@test ~]$ curl 10.211.55.41:8080/metrics |grep ovs_bond 
  4. # HELP ovs_bond_status Show ovs bond status 
  5. # TYPE ovs_bond_status counter 
  6. ovs_bond_status{component="ovs",a1b1="enabled",a2b2="enabled",a3b3="enabled",a4b4="enabled"} 0 

八、總結

 

以上就是這篇文章的所有了,原諒我學藝不精只能粗糙的介紹一下。感謝一直以來關注公眾號的朋友們!

 

責任編輯:武曉燕 來源: 運維開發故事
相關推薦

2020-12-14 10:26:48

Prometheus 監控Services

2023-03-26 08:41:37

2023-12-29 08:01:52

自定義指標模板

2021-03-26 20:37:14

Prometheus監控指標

2009-06-25 14:53:35

自定義UI組件JSF框架

2009-08-03 13:34:06

自定義C#控件

2023-10-31 09:10:39

2023-07-28 09:26:43

GolangZap

2019-12-25 11:47:27

LinuxFVWM

2009-06-23 11:35:44

JSF的Naviati

2010-10-25 16:05:07

oracle自定義函數

2022-01-14 09:17:13

PythonAPISIX插件

2025-08-27 07:22:12

自定義接口Prometheus

2015-02-12 15:33:43

微信SDK

2022-09-13 15:44:52

VSLook插件

2021-10-28 08:39:22

Node Export自定義 監控

2015-02-12 15:38:26

微信SDK

2009-06-22 15:07:45

原則和技巧JSF自定義復合組件

2017-03-16 14:37:05

LinuxShell函數

2016-12-26 15:25:59

Android自定義View
點贊
收藏

51CTO技術棧公眾號

午夜免费一区| 在线观看三级视频| 日韩精品一级中文字幕精品视频免费观看| 亚洲男女自偷自拍图片另类| 欧洲熟妇精品视频| 免费在线看黄色| 久88久久88久久久| 国产综合在线视频| 国精产品视频一二二区| 97品白浆高清久久久久久| 日韩欧美国产黄色| 波多野结衣三级在线| 欧美视频久久久| 老牛嫩草一区二区三区日本| 欧美成人久久久| 女~淫辱の触手3d动漫| 国产美女亚洲精品7777| 黑人欧美xxxx| 成年丰满熟妇午夜免费视频 | 性欧美暴力猛交另类hd| 播播国产欧美激情| 毛片网站免费观看| 91成人精品在线| 欧美日韩精品一区二区天天拍小说| www.日本在线视频| 在线看黄色av| 久久久久久97三级| 国产传媒一区| 国产精品久久777777换脸| 久久亚洲欧洲| 66m—66摸成人免费视频| 日韩在线视频免费看| 蜜桃精品噜噜噜成人av| 亚洲第一福利网| 久久精品视频在线观看免费| 亚洲四虎影院| 欧美日韩亚洲一区二| 成人免费a级片| 久操视频在线观看| 国产精品久久久久久久久晋中 | 在线欧美日韩精品| 毛片在线视频播放| 成人三级高清视频在线看| 亚洲色图丝袜美腿| 超碰免费在线公开| 麻豆tv入口在线看| 国产精品灌醉下药二区| 色姑娘综合网| 岛国大片在线观看| 国产亚洲综合色| 欧美18视频| 色视频免费在线观看| av亚洲精华国产精华精| 国产日韩欧美亚洲一区| 蜜桃久久一区二区三区| 国产福利一区二区三区视频在线 | 国产精品无码一本二本三本色| 成年女人在线看片| 欧美日韩亚洲视频一区| 欧美a在线视频| 亚洲免费福利| 日本福利一区二区| 无码少妇一区二区三区芒果| 欧美与亚洲与日本直播| 欧美日韩免费高清一区色橹橹 | 日本www在线视频| 国产夫妻在线播放| 亚洲第一狼人社区| 奇米精品一区二区三区| www.com.cn成人| 欧洲一区在线电影| 潘金莲激情呻吟欲求不满视频| 亚洲欧洲一二区| 欧美一区二区视频观看视频 | 中文字幕一区二区在线视频| 久久精品国产亚洲高清剧情介绍 | 日本成熟性欧美| 69亚洲精品久久久蜜桃小说 | 亚洲激情五月| 欧美激情中文字幕在线| 三级黄色在线视频| 首页国产欧美久久| 成人精品久久久| 国内爆初菊对白视频| 91一区二区在线观看| 亚洲7777| 黑人精品视频| 91久久国产最好的精华液| 亚洲精品国产一区二区三区| 成人在线视频你懂的| 精品在线欧美视频| 97在线观看免费高| 精品电影一区| 国产欧美日韩亚洲精品| 丰满人妻一区二区三区无码av| www国产精品av| 亚洲第一精品区| 毛片电影在线| 欧美卡1卡2卡| 香蕉视频在线观看黄| 成人黄色免费视频| 青青草手机视频在线观看| 亚洲精品怡红院| 日本三级欧美三级| 性欧美长视频| 91最新在线免费观看| 欧美视频久久久| 中文字幕+乱码+中文字幕一区| 日本成人在线不卡| 神马电影网我不卡| 欧美va日韩va| 国产又粗又长免费视频| 亚洲毛片在线| 成人有码视频在线播放| 欧美在线一卡| 亚洲午夜久久久久久久久电影网 | 午夜精产品一区二区在线观看的| 自拍欧美日韩| 国产精品久久久久久久美男| 黑人乱码一区二区三区av| 国产精品理论片| aa免费在线观看| 国产三级精品三级在线观看国产| 中文字幕在线日韩| 手机看片久久久| 国产成人一级电影| 大地资源第二页在线观看高清版| 成人片免费看| 亚洲第一av在线| 国产免费无码一区二区视频| 美女精品一区二区| 欧美日韩国产综合视频在线| √天堂8资源中文在线| 51精品秘密在线观看| 成人午夜福利一区二区| 国产日韩高清一区二区三区在线| av在线亚洲男人的天堂| 蜜桃视频网站在线| 欧美视频一区二区三区在线观看| 少妇按摩一区二区三区| 亚洲每日在线| 久久国产精品免费一区| 国产激情视频在线看| 精品国精品自拍自在线| 欧美精品成人久久| 国产盗摄一区二区三区| 日本精品福利视频| 日韩三级久久| 久精品免费视频| www.激情五月| 一个色综合av| 亚洲少妇中文字幕| 亚洲清纯自拍| 蜜桃免费一区二区三区| 日韩电影免费观| 亚洲天堂第二页| 五月天中文字幕| 国产精品视频一二| 欧美三级午夜理伦三级富婆| 久久国产电影| 亚洲淫片在线视频| 男女在线视频| 亚洲精品videossex少妇| 久久青青草视频| 久久久国产精品麻豆| 九九九在线观看视频| 91欧美大片| 7777精品久久久大香线蕉小说| 青春草在线视频| 日韩不卡在线观看| 亚洲视屏在线观看| **欧美大码日韩| 又色又爽又黄18网站| 国产精品婷婷| 亚洲在线欧美| 亚洲国产欧美在线观看| 91精品国产777在线观看| 最近中文字幕av| 欧美人妖在线观看| 欧美福利小视频| 天天色综合久久| 在线国产亚洲欧美| 国产精品白丝喷水在线观看| 大桥未久av一区二区三区中文| 男人日女人下面视频| 国产不卡一二三区| 91亚洲国产精品| 男人的天堂免费在线视频| 色悠悠国产精品| 性生活视频软件| 色婷婷av一区二区| 日本aⅴ在线观看| 91影院在线观看| 一二三av在线| 久久精品官网| 黄色一级片国产| 精品国产乱码久久久久久果冻传媒 | 日韩欧美第二区在线观看| 亚洲成人1区| 69av成年福利视频| 生活片a∨在线观看| 日韩高清不卡av| 国产伦精品一区二区三区视频痴汉| 亚洲国产日韩在线一区模特 | 五月婷婷六月丁香综合| 欧美日韩精品一区二区| 国产成人亚洲精品自产在线| 亚洲欧洲www| 人妻少妇一区二区| 国产成人在线视频播放| 黄色成人免费看| 亚洲人成毛片在线播放女女| 黄色www在线观看| 精品久久久久中文字幕小说| 国产欧美日韩一区二区三区| 亚洲人成777| 国产不卡av在线免费观看| 污污的视频在线观看| 在线成人中文字幕| 午夜影院在线视频| 欧美草草影院在线视频| 亚洲无码精品在线播放| 色综合色综合色综合色综合色综合| 欧美日韩精品亚洲精品| 国产精品久久久久精k8| 久久亚洲AV无码专区成人国产| 成人免费黄色大片| 中文字幕第三区| 蜜桃视频在线观看一区| 无码无遮挡又大又爽又黄的视频| 最新成人av网站| 福利在线一区二区| 午夜精品一区二区三区国产| 亚洲欧美国产精品桃花| 国产一区二区三区探花| 免费日韩av电影| 美国十次av导航亚洲入口| 成人在线免费观看一区| 欧美二区观看| 亚洲综合日韩在线| 久久99成人| 亚洲一区精品电影| 精品国产一区二区三区2021| 国产日韩欧美中文| 免费一级欧美在线观看视频| 国产精品男女猛烈高潮激情| 免费成人直播| 国产精品777| 91精品店在线| 国产欧美一区二区三区在线 | 久久三级福利| 成年人小视频网站| 日韩av电影天堂| 自拍偷拍21p| 狠狠久久亚洲欧美| 日本一本在线视频| 国产精品亚洲а∨天堂免在线| 日本一二三区在线| 国产成人在线网站| 久久免费精品国产| 91免费版在线| 国产视频三区四区| 成人免费小视频| 2018天天弄| 亚洲国产一二三| 国产精品美女久久久久av爽| 色欧美乱欧美15图片| 中文字幕一二区| 欧美一区二区三区啪啪| 午夜精品久久久久久久99热黄桃| 欧美成人性战久久| 香蕉视频黄色片| 亚洲午夜av久久乱码| 午夜激情在线观看| 欧美激情亚洲综合一区| 国产精品专区免费| 国产欧亚日韩视频| 成人在线超碰| 任我爽在线视频精品一| 国产精品久久观看| 欧美久久久久久久久久久久久久| 亚洲精选91| 韩国视频一区二区三区| 国产美女精品人人做人人爽| 一级黄色片毛片| 国产免费观看久久| 国产精品视频一区二区三| 亚洲国产日韩a在线播放| 久久久精品视频网站| 欧美巨大另类极品videosbest | 亚洲一区二区影视| 精品处破学生在线二十三| 你懂的视频在线播放| 久久久av免费| 无码小电影在线观看网站免费| 国产精品入口免费视频一| 亚洲不卡在线| 日产中文字幕在线精品一区 | 国产二区视频在线播放| 美女高潮久久久| 亚洲制服丝袜在线播放| 最近日韩中文字幕| 日本韩国欧美中文字幕| 欧美一级高清片在线观看| 蜜桃视频在线入口www| 久久99精品久久久久久琪琪| 日韩a**中文字幕| 国产精品久久久久久久天堂第1集| 欧美影院三区| 男人天堂1024| 国产精品一区二区男女羞羞无遮挡| 国产精品九九九九九| 亚洲综合在线第一页| 中文字幕在线播出| 国产婷婷97碰碰久久人人蜜臀 | 热99精品里视频精品| 天堂av一区| 亚洲图片都市激情| 噜噜噜久久亚洲精品国产品小说| 性高潮久久久久久| 中文字幕永久在线不卡| 无码人妻熟妇av又粗又大| 精品国产露脸精彩对白| 国产区在线观看| 国产精品日本精品| 国产伦精品一区二区三区视频| 国内少妇毛片视频| 国产综合色视频| 人人妻人人澡人人爽| 欧美性猛交xxxx偷拍洗澡 | 永久免费精品影视网站| 夜鲁夜鲁夜鲁视频在线播放| 国产99午夜精品一区二区三区| 99热精品久久| 制服丝袜综合网| 久久精品视频一区| 亚洲GV成人无码久久精品| 亚洲成**性毛茸茸| 日本大片在线播放| av在线不卡观看| 欧美日韩国产精品一区二区亚洲| 久久久福利影院| 中文字幕一区二区不卡| 一个人看的www日本高清视频| 国产一区二区三区毛片| 粉嫩一区二区三区| 日韩色妇久久av| 男女男精品视频| 国产又黄又粗的视频| 欧美无乱码久久久免费午夜一区| 国家队第一季免费高清在线观看| 欧美一级片久久久久久久| 日韩激情啪啪| 东京热加勒比无码少妇| 国产亚洲一本大道中文在线| 无码人妻一区二区三区免费| 伊人精品在线观看| 国模私拍国内精品国内av| 伊人色综合久久天天五月婷| 黑人精品欧美一区二区蜜桃| 99久久99久久精品国产| 日韩亚洲欧美一区二区三区| 深夜国产在线播放| 精品蜜桃一区二区三区| 亚洲专区在线| 99国产精品免费| 3d动漫精品啪啪| 金瓶狂野欧美性猛交xxxx| 国产伦精品一区二区三区视频免费| 亚洲少妇一区| 亚洲国产日韩一区无码精品久久久| 91久久精品日日躁夜夜躁欧美| 1024国产在线| 亚洲一区二区中文| 亚洲一区二区三区高清| 大吊一区二区三区| 欧美一区二区三区喷汁尤物| 岛国av在线播放| 亚洲 国产 欧美一区| 国产成人一区在线| 成人免费视频国产免费| 色系列之999| 国产精品一线| 亚洲人辣妹窥探嘘嘘| 一区二区三区国产精品| 人人九九精品| 成人一区二区电影| 国产欧美日本| 性欧美疯狂猛交69hd| 亚洲精品第一国产综合精品| 国产一区精品福利| 国产精品自拍合集| 亚洲国产精品黑人久久久| 亚洲黄色小说网| 国产精品美女午夜av| 很黄很黄激情成人| 中文字幕第69页| 日韩高清不卡av| 日韩一二三区在线观看| 国产一线二线三线在线观看|