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

使用 Go 開發(fā) Prometheus Exporter

共 2156字,需瀏覽 5分鐘

 ·

2020-11-06 03:30

Exporter 是 Prometheus 監(jiān)控的核心,如果你遇到一些應用不存在相應的 Exporter,那么我們可以自己去編寫 Exporter。下面我們簡單介紹如何使用 Golang 來快速編寫一個 Exporter。

1. 安裝 GO 和依賴包

按照 https://golang.org/doc/install 上的步驟進行安裝配置 GO 環(huán)境,創(chuàng)建一個名為 my_first_exporter 的文件夾。

$?go?mod?init?my_first_exporter?
$?go?get?github.com/prometheus/client_golang?
$?go?get?github.com/joho/godotenv
-->?creates?go.mod?file
-->?Installs?dependency?into?the?go.mod?file

2. 創(chuàng)建入口點和導入依賴包

package?main

import?(
?"github.com/joho/godotenv"
?"github.com/prometheus/client_golang/prometheus"
?"github.com/prometheus/client_golang/prometheus/promhttp"
)

3. 創(chuàng)建 main() 函數

func?main()

4. 添加 prometheus metrics 端點,并在某個服務端口上監(jiān)聽

func?main()?{
???http.Handle("/metrics",?promhttp.Handler())
???log.Fatal(http.ListenAndServe(":9101",?nil))
}

5. 使用 curl 請求外部服務接口

比如我們這里監(jiān)控的應用程序是 MirthConnect,所以我需要進行兩個 API 接口調用:

  • 獲取 channel 統(tǒng)計數據
  • 獲取 channel id 和名稱映射
curl?-k?--location?--request?GET?'https://apihost/api/channels/statistics'?\
--user?admin:admin

curl?-k?--location?--request?GET?'https://apihost/api/channels/idsAndNames'?\
--user?admin:admin

6. 將 curl 調用轉換為 go http 調用,并解析結果

如果你是 Go 新手,這應該是最困難的一步。對于我這里的例子,端點返回的是 XML 格式的數據,所以我必須用 "encoding/xml" 包來反序列化 XML。轉換成功后意味著我的 GO 程序可以執(zhí)行和 curl 命令一樣的 API 調用。

7. 聲明 Prometheus metrics

在 Prometheus 中,每個 metric 指標都由以下幾個部分組成:metric name/metric label values/metric help text/metric type/measurement ,例如:

Example:
#?HELP?promhttp_metric_handler_requests_total?Total?number?of?scrapes?by?HTTP?status?code.
#?TYPE?promhttp_metric_handler_requests_total?counter
promhttp_metric_handler_requests_total{code=”200"}?1.829159e+06
promhttp_metric_handler_requests_total{code=”500"
}?0
promhttp_metric_handler_requests_total{code=”503"}?0

對于應用 scrapers,我們將定義 Prometheus metrics 描述信息,其中包括 metric 名稱、metric label 標簽以及 metric 幫助信息。

messagesReceived?=?prometheus.NewDesc(
?prometheus.BuildFQName(namespace,?"",?"messages_received_total"),
?"How?many?messages?have?been?received?(per?channel).",
?[]string{"channel"},?nil,
)

8. 定義一個結構體實現 Prometheus 的 Collector 接口

Prometheus 的 client 庫提供了實現自定義 Exportor 的接口,Collector 接口定義了兩個方法 Describe 和 Collect,實現這兩個方法就可以暴露自定義的數據:

  • Describe(chan<- *Desc)
  • Collect(chan<- Metric)

如下所示:

type?Exporter?struct?{
?mirthEndpoint,?mirthUsername,?mirthPassword?string
}

func?NewExporter(mirthEndpoint?string,?mirthUsername?string,?mirthPassword?string)?*Exporter?{
?return?&Exporter{
??mirthEndpoint:?mirthEndpoint,
??mirthUsername:?mirthUsername,
??mirthPassword:?mirthPassword,
?}
}
func?(e?*Exporter)?Describe(ch?chan<-?*prometheus.Desc)?{
}
func?(e?*Exporter)?Collect(ch?chan<-?prometheus.Metric)?{
}

9. 在 Describe 函數中,把第7步的 metric 描述信息發(fā)送給它

func?(e?*Exporter)?Describe(ch?chan<-?*prometheus.Desc)?{
?ch?<-?up
?ch?<-?messagesReceived
?ch?<-?messagesFiltered
?ch?<-?messagesQueued
?ch?<-?messagesSent
?ch?<-?messagesErrored
}

10. 將接口調用邏輯從第6步移到 Collect 函數中

直接將采集的數據發(fā)送到 prometheus.Metric 通道中。

func?(e?*Exporter)?Collect(ch?chan<-?prometheus.Metric)?{
?channelIdNameMap,?err?:=?e.LoadChannelIdNameMap()
?if?err?!=?nil?{
??ch?<-?prometheus.MustNewConstMetric(
???up,?prometheus.GaugeValue,?0,
??)
??log.Println(err)
??return
?}
?ch?<-?prometheus.MustNewConstMetric(
??up,?prometheus.GaugeValue,?1,
?)

?e.HitMirthRestApisAndUpdateMetrics(channelIdNameMap,?ch)
}

當執(zhí)行 api 調用時,確保使用prometheus.MustNewConstMetric(prometheus.Desc, metric type, measurement)發(fā)送測量值,如果你需要傳入額外的標簽,可以像下面這樣在參數列表的后面加入:

channelError,?_?:=?strconv.ParseFloat(channelStatsList.Channels[i].Error,?64)
ch?<-?prometheus.MustNewConstMetric(
?messagesErrored,?prometheus.GaugeValue,?channelError,?channelName,
)

11. 在 main 函數中聲明 exporter

exporter?:=?NewExporter(mirthEndpoint,?mirthUsername,?mirthPassword)
prometheus.MustRegister(exporter)

到這里其實這個 Exporter 就可以使用了,每次訪問 metrics 路由的時候,它會執(zhí)行 api 調用,并以 Prometheus Text 文本格式返回數據。下面的步驟主要是方便部署了。

12. 將硬編碼的 api 路徑放到 flag 中

前面我們硬編碼了好多參數,比如應用程序的網址、metrics 路由地址以及 exporter 端口,我們可以通過從命令行參數中來解析這些值使程序更加靈活。

var?(
listenAddress?=?flag.String("web.listen-address",?":9141",
?"Address?to?listen?on?for?telemetry")
metricsPath?=?flag.String("web.telemetry-path",?"/metrics",
?"Path?under?which?to?expose?metrics")
)
func?main()?{
???flag.Parse()
???...
???http.Handle(*metricsPath,?promhttp.Handler())
???log.Fatal(http.ListenAndServe(*listenAddress,?nil))
}

13. 將憑證放入環(huán)境變量

如果應用端點改變了或者登錄憑證改變了怎么辦?我們可以從環(huán)境變量中來加載這些數據,在這個例子中,我們使用 godotenv 這個包來幫助將變量值存儲在本地的一個目錄中:

import?(
??"os"
)
func?main()?{
?err?:=?godotenv.Load()
?if?err?!=?nil?{
??log.Println("Error?loading?.env?file,?assume?env?variables?are?set.")
?}
?mirthEndpoint?:=?os.Getenv("MIRTH_ENDPOINT")
?mirthUsername?:=?os.Getenv("MIRTH_USERNAME")
?mirthPassword?:=?os.Getenv("MIRTH_PASSWORD")
}

整個 Exporter 完整的代碼如下所示:

package?main

import?(
?"crypto/tls"
?"encoding/xml"
?"flag"
?"io/ioutil"
?"log"
?"net/http"
?"os"
?"strconv"

?"github.com/joho/godotenv"
?"github.com/prometheus/client_golang/prometheus"
?"github.com/prometheus/client_golang/prometheus/promhttp"
)

/*

??
????101af57f-f26c-40d3-86a3-309e74b93512
????Send-Email-Notification
??


*/

type?ChannelIdNameMap?struct?{
?XMLName?xml.Name???????`xml:"map"`
?Entries?[]ChannelEntry?`xml:"entry"`
}
type?ChannelEntry?struct?{
?XMLName?xml.Name?`xml:"entry"`
?Values??[]string?`xml:"string"`
}

/*

??
????c5e6a736-0e88-46a7-bf32-5b4908c4d859
????101af57f-f26c-40d3-86a3-309e74b93512
????0
????0
????0
????0
????0
??


*/

type?ChannelStatsList?struct?{
?XMLName??xml.Name???????`xml:"list"`
?Channels?[]ChannelStats?`xml:"channelStatistics"`
}
type?ChannelStats?struct?{
?XMLName???xml.Name?`xml:"channelStatistics"`
?ServerId??string???`xml:"serverId"`
?ChannelId?string???`xml:"channelId"`
?Received??string???`xml:"received"`
?Sent??????string???`xml:"sent"`
?Error?????string???`xml:"error"`
?Filtered??string???`xml:"filtered"`
?Queued????string???`xml:"queued"`
}

const?namespace?=?"mirth"
const?channelIdNameApi?=?"/api/channels/idsAndNames"
const?channelStatsApi?=?"/api/channels/statistics"

var?(
?tr?=?&http.Transport{
??TLSClientConfig:?&tls.Config{InsecureSkipVerify:?true},
?}
?client?=?&http.Client{Transport:?tr}

?listenAddress?=?flag.String("web.listen-address",?":9141",
??"Address?to?listen?on?for?telemetry")
?metricsPath?=?flag.String("web.telemetry-path",?"/metrics",
??"Path?under?which?to?expose?metrics")

?//?Metrics
?up?=?prometheus.NewDesc(
??prometheus.BuildFQName(namespace,?"",?"up"),
??"Was?the?last?Mirth?query?successful.",
??nil,?nil,
?)
?messagesReceived?=?prometheus.NewDesc(
??prometheus.BuildFQName(namespace,?"",?"messages_received_total"),
??"How?many?messages?have?been?received?(per?channel).",
??[]string{"channel"},?nil,
?)
?messagesFiltered?=?prometheus.NewDesc(
??prometheus.BuildFQName(namespace,?"",?"messages_filtered_total"),
??"How?many?messages?have?been?filtered?(per?channel).",
??[]string{"channel"},?nil,
?)
?messagesQueued?=?prometheus.NewDesc(
??prometheus.BuildFQName(namespace,?"",?"messages_queued"),
??"How?many?messages?are?currently?queued?(per?channel).",
??[]string{"channel"},?nil,
?)
?messagesSent?=?prometheus.NewDesc(
??prometheus.BuildFQName(namespace,?"",?"messages_sent_total"),
??"How?many?messages?have?been?sent?(per?channel).",
??[]string{"channel"},?nil,
?)
?messagesErrored?=?prometheus.NewDesc(
??prometheus.BuildFQName(namespace,?"",?"messages_errored_total"),
??"How?many?messages?have?errored?(per?channel).",
??[]string{"channel"},?nil,
?)
)

type?Exporter?struct?{
?mirthEndpoint,?mirthUsername,?mirthPassword?string
}

func?NewExporter(mirthEndpoint?string,?mirthUsername?string,?mirthPassword?string)?*Exporter?{
?return?&Exporter{
??mirthEndpoint:?mirthEndpoint,
??mirthUsername:?mirthUsername,
??mirthPassword:?mirthPassword,
?}
}

func?(e?*Exporter)?Describe(ch?chan<-?*prometheus.Desc)?{
?ch?<-?up
?ch?<-?messagesReceived
?ch?<-?messagesFiltered
?ch?<-?messagesQueued
?ch?<-?messagesSent
?ch?<-?messagesErrored
}

func?(e?*Exporter)?Collect(ch?chan<-?prometheus.Metric)?{
?channelIdNameMap,?err?:=?e.LoadChannelIdNameMap()
?if?err?!=?nil?{
??ch?<-?prometheus.MustNewConstMetric(
???up,?prometheus.GaugeValue,?0,
??)
??log.Println(err)
??return
?}
?ch?<-?prometheus.MustNewConstMetric(
??up,?prometheus.GaugeValue,?1,
?)

?e.HitMirthRestApisAndUpdateMetrics(channelIdNameMap,?ch)
}

func?(e?*Exporter)?LoadChannelIdNameMap()?(map[string]string,?error)?{
?//?Create?the?map?of?channel?id?to?names
?channelIdNameMap?:=?make(map[string]string)

?req,?err?:=?http.NewRequest("GET",?e.mirthEndpoint+channelIdNameApi,?nil)
?if?err?!=?nil?{
??return?nil,?err
?}

?//?This?one?line?implements?the?authentication?required?for?the?task.
?req.SetBasicAuth(e.mirthUsername,?e.mirthPassword)
?//?Make?request?and?show?output.
?resp,?err?:=?client.Do(req)
?if?err?!=?nil?{
??return?nil,?err
?}

?body,?err?:=?ioutil.ReadAll(resp.Body)
?resp.Body.Close()
?if?err?!=?nil?{
??return?nil,?err
?}
?//?fmt.Println(string(body))

?//?we?initialize?our?array
?var?channelIdNameMapXML?ChannelIdNameMap
?//?we?unmarshal?our?byteArray?which?contains?our
?//?xmlFiles?content?into?'users'?which?we?defined?above
?err?=?xml.Unmarshal(body,?&channelIdNameMapXML)
?if?err?!=?nil?{
??return?nil,?err
?}

?for?i?:=?0;?i?len(channelIdNameMapXML.Entries);?i++?{
??channelIdNameMap[channelIdNameMapXML.Entries[i].Values[0]]?=?channelIdNameMapXML.Entries[i].Values[1]
?}

?return?channelIdNameMap,?nil
}

func?(e?*Exporter)?HitMirthRestApisAndUpdateMetrics(channelIdNameMap?map[string]string,?ch?chan<-?prometheus.Metric)?{
?//?Load?channel?stats
?req,?err?:=?http.NewRequest("GET",?e.mirthEndpoint+channelStatsApi,?nil)
?if?err?!=?nil?{
??log.Fatal(err)
?}

?//?This?one?line?implements?the?authentication?required?for?the?task.
?req.SetBasicAuth(e.mirthUsername,?e.mirthPassword)
?//?Make?request?and?show?output.
?resp,?err?:=?client.Do(req)
?if?err?!=?nil?{
??log.Fatal(err)
?}

?body,?err?:=?ioutil.ReadAll(resp.Body)
?resp.Body.Close()
?if?err?!=?nil?{
??log.Fatal(err)
?}
?//?fmt.Println(string(body))

?//?we?initialize?our?array
?var?channelStatsList?ChannelStatsList
?//?we?unmarshal?our?byteArray?which?contains?our
?//?xmlFiles?content?into?'users'?which?we?defined?above
?err?=?xml.Unmarshal(body,?&channelStatsList)
?if?err?!=?nil?{
??log.Fatal(err)
?}

?for?i?:=?0;?i?len(channelStatsList.Channels);?i++?{
??channelName?:=?channelIdNameMap[channelStatsList.Channels[i].ChannelId]

??channelReceived,?_?:=?strconv.ParseFloat(channelStatsList.Channels[i].Received,?64)
??ch?<-?prometheus.MustNewConstMetric(
???messagesReceived,?prometheus.GaugeValue,?channelReceived,?channelName,
??)

??channelSent,?_?:=?strconv.ParseFloat(channelStatsList.Channels[i].Sent,?64)
??ch?<-?prometheus.MustNewConstMetric(
???messagesSent,?prometheus.GaugeValue,?channelSent,?channelName,
??)

??channelError,?_?:=?strconv.ParseFloat(channelStatsList.Channels[i].Error,?64)
??ch?<-?prometheus.MustNewConstMetric(
???messagesErrored,?prometheus.GaugeValue,?channelError,?channelName,
??)

??channelFiltered,?_?:=?strconv.ParseFloat(channelStatsList.Channels[i].Filtered,?64)
??ch?<-?prometheus.MustNewConstMetric(
???messagesFiltered,?prometheus.GaugeValue,?channelFiltered,?channelName,
??)

??channelQueued,?_?:=?strconv.ParseFloat(channelStatsList.Channels[i].Queued,?64)
??ch?<-?prometheus.MustNewConstMetric(
???messagesQueued,?prometheus.GaugeValue,?channelQueued,?channelName,
??)
?}

?log.Println("Endpoint?scraped")
}

func?main()?{
?err?:=?godotenv.Load()
?if?err?!=?nil?{
??log.Println("Error?loading?.env?file,?assume?env?variables?are?set.")
?}

?flag.Parse()

?mirthEndpoint?:=?os.Getenv("MIRTH_ENDPOINT")
?mirthUsername?:=?os.Getenv("MIRTH_USERNAME")
?mirthPassword?:=?os.Getenv("MIRTH_PASSWORD")

?exporter?:=?NewExporter(mirthEndpoint,?mirthUsername,?mirthPassword)
?prometheus.MustRegister(exporter)

?http.Handle(*metricsPath,?promhttp.Handler())
?http.HandleFunc("/",?func(w?http.ResponseWriter,?r?*http.Request)?{
??w.Write([]byte(`
?????????????Mirth?Channel?Exporter
?????????????
?????????????

Mirth?Channel?Exporter


?????????????

Metrics


?????????????
?????????????`
))
?})
?log.Fatal(http.ListenAndServe(*listenAddress,?nil))
}

14. 編寫一個 Makefile 文件,方便在不同平臺上快速構建

Makefile 可以讓你在開發(fā)過程中省去很多多余的操作,比如我們要構建多個平臺的構建程序,可以創(chuàng)建如下所示的 Makefile 文件。

linux:
???GOOS=linux?GOARCH=amd64?go?build
mac:
???GOOS=darwin?GOARCH=amd64?go?build

只要調用 make macmake linux 命令就可以看到不同的可執(zhí)行文件出現。

15. 編寫一個 service 文件,將這個 go 應用作為守護進程運行

我們可以為這個 Exporter 編寫一個 service 文件或者 Dockerfile 文件來管理該應用,比如這里我們直接在 Centos 7 上用 systemd 來管理該應用。這可以編寫一個如下所示的 service 文件:

[Unit]
Description=mirth?channel?exporter
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
WorkingDirectory=/mirth/mirthconnect
EnvironmentFile=/etc/sysconfig/mirth_channel_exporter
ExecStart=/mirth/mirthconnect/mirth_channel_exporter

[Install]
WantedBy=multi-user.target

到這里就完成了使用 Golang 編寫一個簡單的 Prometheus Exporter。

原文鏈接:https://medium.com/teamzerolabs/15-steps-to-write-an-application-prometheus-exporter-in-go-9746b4520e26

?點擊屏末?|??|?即刻學習

瀏覽 103
點贊
評論
收藏
分享

手機掃一掃分享

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

手機掃一掃分享

分享
舉報

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 五月丁香六月久久| 东京热男人的天堂| 久草福利| 成人亚洲精品一区二区三区| 天堂a在线8| 久久久久99精品成人片三人毛片 | 免费在线无码视频| www.91AV| 日韩小视频在线观看| 一级免费黄色电影| www.在线播放| 嫩BBB槡BBBB槡BBBB二一 | 爽爽午国产浪潮AV性色www| 日本A片在线免费观看| 大香蕉做爱| 免费成人黄片| 91迷奸| 人妖和人妖互交性XXXX视频| 国內精品久久久久久久| 国产操逼视频网站| 操人妻视频| 午夜亚洲AV永久无码精品麻豆| 2016超碰| 亚洲精品秘一区二区三小| 黄色视频亚洲| 国产亚洲欧美一区二区| 天天干天天干天天操| 国产精品欧美一区二区| 久久久久久久性爱| 国产一级a毛一级a毛片视频黑人| 亚洲高清福利视频| 日韩精品一区二区三区中文在线| 壹屌探花| 成年人毛片视频| 国产精品无码激情| 免费a视频在线观看| AV一区二区三区| 欧美系列在线| 2025精品视频| 亚洲网站在线观看| 久艹在线视频| 青娱乐av在线| 色婷婷综合激情| 91站街农村熟女露脸| 天天影视综合网免费观看电视剧国产 | 国产中文在线视频| 亚洲天堂精品在线| 操操日| 狠狠干狠狠操| 少妇BBBB| 亚洲字幕在线观看| 亚洲AV第二区国产精品| 中文字幕淫乱视频欧美| 爱爱视频天天操| 色婷婷影音| 久久亚洲天堂| 免费看A级片| 中文字幕在线成人| 无码av免费精品一区二区三区| 亚洲成人少妇老妇a视频在线 | 综合色婷婷一区二区亚洲欧美国产| 搞搞视频| 精品多人P群无码视频| 激情五月婷婷丁香| 岛国精品在线播放| 一本色道久久综合狠狠| 最新三级网站| 亚洲综合免费观看高清完整版在线| 麻豆精品无码| 911久久| 日韩av中文在线| 久久久久久久久久久国产| 无码在线免费观看视频| 日韩午夜片| 国产A片免费观看| 91丝袜足交| 亚洲A片V一区二区三区| 91丨PORN首页| 乱伦五月| 操一操| 色黄网站在线观看| 91精品久久久久久久| 久久国产香蕉| 免费草逼视频| 精品中文字幕视频| 色婷婷亚洲综合| 东京热久久综合色五月老师| 在线免费观看亚洲| 亚洲vs无码蜜桃少妇| 青青草亚洲| 天天干天天干天天操| 色接久久| 成人黄色性爱视频| 中国熟女视频| 亚洲秘无码一区二区三区,| 动漫一区二区三区| 玖玖视频| 久色视频在线| 性毛片| 99热99精品| 亚州视频在线观看| 日韩一级免费| 国产黄色性爱视频| 人人操日本| 99免费观看视频| 日韩无码视频一区二区| 高清免费无码| 色综合一区二区| 色欲色欲一区二区三区| 啪啪啪啪网站| 三级大香蕉| 天堂成人在线视频| 色五月天婷婷| 日韩毛片在线看| 亚洲黄色无码视频| 高清无码免费观看| 手机AV在线播放| 91丨人妻丨国产| 超碰国产在线| 国产精品久久久久久无码人妻 | 国产丰满大乳无码免费播放| 99热这里| 亚洲夜夜操| 午夜h片| 一区二区Av| 日韩一区无码| 日韩毛片一级| 免费观看黄片网站| 亚州毛多色色精品| 日韩精品电影| 欧美A色| 亚洲无码一区二区三区妃光| 欧美视频在线观看| 日本在线小视频| 日本aaaa片| 99成人乱码一区二区三区在线| 伊人五月天激情| 天天干人人干| 日本在线视频不卡| 亚洲一区| 婷婷中文在线| 国产三级小视频| 伊人激情五月| 大吊无码| 99视频在线播放| 久久九热| 国产日韩二区| 大香蕉伊人影视| 日韩在线小视频| 国产乱妇乱子伦视频免费观看让女人 | 91大神在线资源观看无广告| 三级网址在线观看| 中文字幕天天干| 国内精品久久久久久久久98| jizz在线视频| 亚洲三区视频| 日韩在线视频免费观看| 成人在线精品视频| 波多野结衣无码高清视频| 日韩久久婷婷| 成人片网站在线观看| 亚洲草逼视频| 激情毛片| 成人啪啪视频| 国产成人无码免费看片| 激情深爱五月天| 久久国产乱子伦精品免费午夜...| 国产成人精品国内自产拍免费看| 国产欧美一区二区人妻喷水| 欧美大香蕉视频| 韩国精品一区二区| 91香蕉国产在线观看软件| 99热精品国产| 日韩性爱av| 91精品少妇高潮一区二区三区不卡 | 亚洲一二三四区| 国产激情精品视频| 亚洲AV第一页| 国产精品久久久久久久久久| 人妻中文无码| 一本道中文字幕| 色呦呦一区二区三区| 国产尤物视频| 亚洲精品午夜| 18啪啪网站| 国产综合无码| 国产嫩草影院| 成人三级片视频| 国产成人无码区免费视频| 一区无码| 国精产品一区二区三区| 亚洲狠狠操| 国产免费麻豆| 黄网站免费在线观看| 无卡无码| 东京热在线视频观看| 99热在线只有精品| 在线观看的AV| 亚洲欧美国产精品专区久久| 天美精东蜜桃91| 91香蕉国产在线观看软件| 亚洲高清无码视频在线| 久9视频| 欧美AAA在线观看| 影音先锋男人资源网| 高清无码免费观看视频| 色五月激情小说| 天堂网2025| 亚洲成人大片| 丁香午夜| eeuss久久| 亚洲日韩黄色| 国产做爰XXXⅩ久久久骚妇| 婷婷五月天丁香在线| 少婦揉BBBB揉BBBB揉| 天天操夜夜操狠狠| 能看的操逼视频| 亚洲中文免费观看| 嫩BBB搡BBBB搡BBBB-百度| 特级特黄AAAA免费看| 丁香五月成人网| 欧美成人网址在线观看| 亚洲色图15| 污视频网站免费观看| 欧美成人手机在线观看| 成人亚洲性情网站www在线| 中文字幕网站在线观看| 成人在线免费观看国产| 亚洲日本三级片| 北条麻妃久久网站| 安徽妇搡BBBB搡BBBB,另类老妇| www日韩无码| 蜜芽av在线观看| 日韩中文字幕| 91麻豆免费看| 国产成人精品亚洲男人的天堂| 亚洲香蕉国产| 无码欧精品亚洲日韩一区| 欧美级黑寡妇毛片app| 一区二区三区www污污污网站| 亚洲第一综合| 超碰操| 少妇搡BBBB搡BBB搡造水多| 无码囯无精品毛片大码| 久久嫩草精品久久久久| 欧洲一级片| 久久久久久国产| 婷婷五月激情网| 日本无码一区二区三三| 高清无码学生妹| 波多野结衣高清av久久直播免| 亚洲成人第一网站| 日本中文字幕在线观看视频| 人成无码| 精品免费在线观看| 青青操逼视频| 亚洲中文字幕AV| 亚洲欧美日韩黑料吃瓜在线观看 | 成人做爰黄A片免费看三区蜜臀| www.zaixianshipin| 亚洲一区日韩| 无码一区二区区| 无码人妻在线播放| 丰满人妻一区二区三区四区53| 中文字幕在线观看视频免费| 人妻操| 91视频一区二区| 蜜挑视频一区二区三区| 中文字幕www一区| 屁屁影院CCYYCOM发布地| 无码在线免费播放| 精品国产污污免费网站入口| 亚洲av资源| 综合久久99| 最新国产毛片| 伊人色五月天| 99在线看| 高清国产mv在线观看| 天天拍天天干| 五月欧美激情| 免费黄色一级视频| 激情综合久久| 尻屄视频在线观看| 国产亚洲久一区二区| 成人亚洲精品一区二区三区| 奇米色网| 国产成人精品123区免费视频| 丰满欧美熟妇免费视频| 三级片日本在线| 国产激情网址| HEYZO少婦AV無碼精品| 亚欧一区二区| 欧美日韩国产成人在线| 在线看黄色片| 日韩第一区| 插穴网| 高潮喷水无码| 激情五月婷婷网| 97人妻精品一区二区三区免| 大香蕉96| 91免费视频观看| 国产精品一二| 亚洲影视中文字幕| 一本之道高清数码大全| 先锋影音一区二区| 特级西西WWW444人体聚色| 亚洲一区二区三| 日韩字幕久久| 吴梦梦《女教师时间暂停》| 中文字幕资源在线| 色色色色综合| 中文在线高清字幕| 久久久久久亚洲| 久久久999精品日韩一区二区| 日韩人妻无码一区二区三区七区 | 女人的天堂AV| 亚洲人在线观看| 欧产日产国产swag| 免费在线观看AV网站| 国产操比视频| 中文字幕在线观看福利视频| 欧美成人手机在线观看| www.A片| 成人国产精品视频| 欧亚无码| PORNY九色视频9l自拍| 丰满人妻一区二区三区免费| 天天做天天爱天天爽| 一级A片60分钟免费看| 精品无码一| 91精品午夜少妇| 高清无码视频观看| 免费无码在线观看| 久久理论电影| 日韩无码少妇| 做爰视频毛片下载蜜桃视频。| 中文字幕AV在线播放| 国产超级无码高清在线视频观看| 欧美丰满美乳XXⅩ高潮www| 91成人做爰A片| 国产成人AV免费观看| 就爱搞搞| 人妻丰满熟妇av无码区| 欧美亚洲综合手机在线| 无套内射在线| 国产精品天天狠天天看| 色五月婷婷五月| 久久伊人春色| 青青草乱伦视频| 六月丁香激情| 夜夜嗨av无码一区二区三区| 日韩精品无码电影| 韩国精品无码一区二区三区18 | 成人伊人大香蕉| 亚洲午夜福利一区二区三区| 亚洲欧美成人在线观看| 骚逼操| 国产換妻4P视频| 欧美日韩一道本| 国产在线观看一区二区| 青草网在线观看| 亚洲videos| 国产伦精一品二品三品app| 久久一区二区三区四区| 污视频网站免费观看| 7777影视电视剧在线观看官网 | 成人黄色电影在线观看| 日韩久久久| 免费色色| 黄色激情五月天| 国产人妖AV| 男女激情网站| 日韩中文字幕视频在线观看| 日韩中文在线播放| 国产黄色电影| 大香蕉免费网| 91精品久久久久| 人人妻人人操人人爱| 一区四区视频| 干欧美| 思思操在线视频| 嫩BBB槡BBBB槡BBBB视频-百度 | 五月婷婷综合激情| 国产一级a毛一级做a爱| 成人中文字幕无码| 中文字幕在线一区二区a| 日韩99| 久热精品在线观看视频| 青草影视久久| 日本A片免费观看| 大香蕉精品欧美色综合2025| 国产精品久久7777777精品无码| 美女网站在线观看| 日韩黄色A片| 囯产精品久久久久久久| 安徽妇搡BBBB搡BBBB,另类老妇| 黄色香蕉视频| 91香蕉视频在线播放| 国产精品一区av| 丰满的人妻一区二区三区果冻 | 国产女人18水真多18精品一级做 | 中国精品77777777| 黄片在线免费播放| 香蕉av在线| 中文字幕有码在线视频| 亚洲五月天色| 亚洲美女视频| 台湾无码精品| 欧美手机在线视频| 九月丁香婷婷| 高潮视频在线观看| AV无码免费| 豆花视频在线观看| 欧美精品一级| 成人免费无码婬片在线观看免费| 欧美性性性| 日韩电影免费在线观看中文字幕| 欧美黄色成人视频| 九九九九精品| 中文字幕无码成人| 国产十欧洲十美国+亚洲一二三区在线午夜 | 插插插插网| av资源网站| 蜜臀久久99精品久久| 中文字幕无码人妻| 天天夜夜久久| 日本黄色A片| 99精品免费在线观看| 北条麻妃在线观看香蕉| 最新中文字幕免费MV第一季歌词| 中文字幕特黄A片| 亚洲免费黄片| 国产成人精品片| www.国产精品| 亚洲精品在线视频观看| 中文字幕无码在线| 黄色电影视频网站| 亚洲一区日韩| 日韩在线不卡视频| 四虎av在线播放| 亚洲AV成人无码精在线| 成人免费激情视频| 翔田千里av在线| 天天色色| 69AV无码| 成人无码视频在线| 久久精品大香蕉| av无码毛片| AV在线不卡中文| 人人色视频| 欧美日韩北条麻妃视频在线观看 | 日本黄色视频免费看| 9l农村站街老熟女| 激情婷婷色五月| 日韩乱伦小说| 影音先锋av资源在线| 黄片视频在线免费播放| 91av在线看| 清清草在线视频| 欧美美女日逼视频| 青青草97国产精品麻豆| 一起草在线视频| 久草网视频| 自拍偷拍免费| 日韩精品人妻中文字幕有| 亚洲超级高清无码第一在线视频观看 | 韩国GOGOGO高清| 91禁樱桃在线| 欧美性交网| 韩国av在线| 亚洲天堂AV网| 高潮毛片| 91人人澡人人爽人人看| 国产学生妹| 色呦呦视频| 毛片毛片毛片| 肉乳无码A片av| 超碰97老师| 丰满的人妻一区二区10| 中文字幕AV在线播放| 亚洲激情四射| 国产精品你懂得| 国产三级偷拍| 免费一级A片在线观看视频| 中文字幕国产av| 91丨九色丨老熟女探花| 欧美精品| 日韩性爱视频| 小黄片在线| 精品免费一区二区三区四区| 国产一级婬片A片免费妖精视频 | 国产va在线| 男女啪啪啪网站| 日本成人激情视频| 爱搞视频在线观看| 精品无码电影| 免费日韩毛片| 国产亚洲精品久久久波多野结衣| 国产精品乱码毛片在线人与| 国产亚洲色婷婷| 亚洲无码在线免费| 国产探花在线观看| 中文字幕婷婷五月天| 土牛AV| 久久久久成人电影| 无码四区| 性爱av天堂| 羞羞午夜| 大地资源第5页在线| 欧美又粗又大AAA片| 在线观看黄色片| 国产香蕉网| 99热3| 亚洲AV一二三区| 天天干天天操天天拍| 日韩aaa视频| 亚洲无码精品视频| 久久爆乳一区二区三区| 日韩精品91| 日本无码成人| 亚洲无码av在线观看| 亚洲视频在线观| 黄色成人视频网站| 日韩精品欧美一区二区三区| 国产精品一区二区视频| 精品少妇人妻| 亚洲AV无码乱码精| 日本无码在线视频| 日本男人天堂| 免费黄网站在线观看| 日本免费在线观看视频| 亚洲影视中文字幕| 色色色色色欧美| 国产小视频在线观看| 特级西西西西4444级酉西88wwww特| 欧美一级黄色A片| 91麻豆精品传媒| 欧美黄色三级视频| 黄色一级片免费观看| 中国丰满妇BBwBBwHD| 日韩一级免费观看| 先锋成人影音| 国产一毛a一毛a在线观看| 国产V精品| 老司机永久免费91| 丰臀肥逼高清视频电影播放| av免费网站| 9999久久久久| 日韩欧美高清视频| 国产一区在线视频| 午夜在线视频| 天天操综合| 俺来也俺就去www色情网| 欧美成人精品欧美一级私黄| 五月丁香成人| 亚洲激情黄色| 日韩高清无码人妻| 国产乱人| 一级片视频在线观看| 深爱五月激情| 蜜桃Av噜噜一区二区三| 国模一区二区| 夜夜操网站| 激情视频在线免费观看| 青青操网| 男人色天堂网| 欧美拍拍视频| www.99爱| 亚洲综合电影| 狠狠色婷婷7777| 免费的av| 特级丰满少妇一级AAAA爱毛片| 成人视频网| 国产精品免费久久影院| 亚洲中文无码第一页| 午夜国产精品AV| 日日夜夜天天操| 亚洲精品国产成人| 国产在线观看mv免费全集电视剧大全| 五月婷婷中文版| 国产剧情一区二区| 真人一级毛毛片| 91精品久久久久久久久久久久| 国产成人网站免费观看| 中文在线无码| 色九九九九| 亚洲无码在线免费视频| 一级爱爱片| 人人操人人摸人人| 亚洲中文无码视频| 久草在线| 亚洲精品成人片在线观看精品字幕| 中国熟女视频| 亚洲成人无码高清| 夜间福利视频| 亚洲成人精品一区二区| 中文字幕久热| 免费看一级A片| 成人毛片在线观看| 操逼视频在线观看| 国产性爱图| 苍井空一区二区三区四区| 青青草网址| 亚洲AV无码精品国产| 99福利视频| 亚洲精品视频在线播放| 五月天婷婷丁香| 色就是色欧美成人网| 51精品国产午夜福利| 免费在线观看黄色网址| 免看一级a毛片一片成人不卡| 中文字幕一二三区| 亚洲免费观看高清完整版在va线观 | 亚欧洲精品在线视频| 亚洲成人无码一区| 国产又粗又长的视频| 操逼视频大全| 久久精品综合| 日本有码中文字幕| 噜噜噜在线视频| 黑人大荫蒂女同互磨| 无码精品一区二区三区同学聚会 | 国产特级毛片| 韩日无码| 欧美18禁| 日韩欧美黄色电影| 国产视频福利在线| 亚洲激情五月天| 懂色av一区蜜桃| 在线观看免费人成视频| 五月婷在线观看| 91精品国产麻豆国产自产在线| 91在线无码精品秘国产色多多| 一级片黄色电影| 亚洲成人一二三区| 特级西西444www大精品| 搡BBBB搡BBB搡我瞎了| youjizzcom日本| 高清无码视频直接看| www.豆花视频成人版| 国产精品久久久久久久久久九秃| 亚洲视屏| 丰满人妻一区二区三区精品高清 | 中文字幕无码精品三级在线欧美| 精品视频日韩| 97欧美| 黄色成人在线观看| 欧美日韩一区二区三区视频| 九一亚洲精品| 超碰三级| 乳揉みま痴汉电车羽月希免费观看 | 欧美爱爱网站| 特级西西人体WWWWW| 日韩一区二区无码| 99er这里只有精品| 色婷婷五月天激情| 欧美三级精品| 看一级黄色毛片| 俺也来最新色视频| 超级人人操| 成年人在线观看| 欧美AAA| 91秦先生在线播放| 成人三级电影| 国产av影音| 欧美性BBB槡BBB槡BBB| 国产77777| 嗯啊在线视频| 中文字幕无码日韩| 久热精品视频| 亚洲波多野结衣| 丰滿人妻-区二区三区| 亚洲熟女视频| 色骚爽大香蕉91| 日本一级特黄大片AAAAA级| 九九乱伦| 亚洲乱码国产乱码精品天美传媒 | 高清欧美日韩第一摸| 国产主播专区| 爱爱爱免费视频| 日本精品乱伦| 日本三级片网址| 中文字幕在线观看日韩| 插菊花综合网亚洲| BBB搡BBB搡BBB搡BBB| 制服丝袜人妻| 中文字幕成人免费视频| 国产日韩欧美在线播放| 东京热久久综合色五月老师| 无码国产精品一区二区视频| 黄色A视频| 国产寡妇亲子伦一区二区三区四区| 人人干天天干| 操逼A片| 亚洲第一成网站| 一区二区免费看| 特猛特黄AAAAAA片| 亚洲黄色成人| 成人大战香蕉最新视频| 影音先锋成人AV资源| 成人在线一区二区| 亚洲欧美在线成人| 亚洲免费黄色电影| 3D动漫精品啪啪一区二区| 午夜福利91| 炮友露脸青楼传媒刘颖儿| 黄片视频在线播放| 强伦轩一区二区三区四区播放方式 | 成人日韩| 一区无码高清| 国产无码激情视频| 亚洲黄色在线免费观看| 国产色无码网站www色视频| 国产福利合集| 国产精品色8| 99色综合网| 国产精品成人99一区无码| 亚洲精品一线| 操东北女人逼| 日韩中文无码一级A片| 欧美精品日韩在线观看| 超碰精品| 欧美熟妇一区二区三区| 51乱伦| 黃色一級片黃色一級片尖叫声-百度-百| 青娱乐亚洲视频| 影音先锋成人AV资源| 亚洲欧洲在线视频| 中文字幕五码| 国产AV影院| 免费成人视频| 亚洲品久久久蜜| 在线国产中文字幕| 操骚B| 波多野结衣91| 超碰在线网| 在线无码av| 欧美老熟妇BBBBB搡BBB | 亚洲高清无码在线视频| 国产一区在线播放| 亚洲精品成人无码毛片| 午夜视频成人| 国产精品成人AV在线| 欧美群交videotv群交| 成人毛片网| 国产黄色一级| 特黄A级毛片| 久久女人视频| 江苏妇搡BBBB搡BBBB-百度| 特级黄色片| 迷情校园综合| 国产操穴| 超级人人操| 中文字幕无码免费| 毛片福利| 色欲五月天| 欧美四区| 中文字幕35页| 东京热无码高清| 激情丁香五月天| 亚洲AV无码乱码国产精品黑人| 成人在线免费观看视频| 无码专区在线观看| 欧美日韩伊人| 91久久国产| 欧美日韩在线看| 福利黄色片:片| 小黄片在线| 欧美一级一区| 翔田千里被躁120分钟| 无码一区二区视频| 69自拍视频| 姐弟乱伦性爱| 靠逼久久| 中文精品在线| 国产欧美综合视频| 欧美插穴| 一个人看的www日本高清视频| 二区AV| 91av免费观看| 粉嫩小泬BBBBBB免费看| 日韩AV在线电影| 色中色在线视频| 国内超碰| se婷婷| 99热这里只有精品99| 日韩欧美一级视频| 乱伦一区二区三区| youjizzcom日本| 日韩人妻精品无码制服| 色色网五月天| 免费在线无码视频| 初学影院WWWBD英语完整版在线观看| 七十路の高齢熟妇无码| AV婷婷五月天| 欧美洲成人网站| 免费看一级一级人妻片| 高清无码三级片在线观看| 北条麻妃中文字幕旡码| 中文字幕一区三区三A片密月| 国产乱伦电影| 另类老太婆性BBWBBw| 精品黄色电影| 欧美老妇BBBBBBBBB| 另类老妇奶性BBWBBw| 操操日| 江苏妇搡BBB搡BBBB| 日韩超清无码| 少妇在线观看| av水果派| 五月婷婷六月色| 精品成人影视| 亚洲天堂2016| 男女精品一区| av女人天堂| 欧美日韩综合| 江苏妇搡BBB搡BBBB| 日本黄色免费在线观看| 亚洲一区二区三区免费视频| 影音先锋人妻限定| 国产AV一级| 色欲av伊人久久大香线蕉影院| HEYZO少婦AV無碼精品| 美女国产精品| 色婷婷Av一区| 久久久久久三级电影| 九一精品| 亚洲精品福利视频| 加勒比精品在线| 十八禁视频在线观看网站.www | 无码AV电影| 黑人一级片| 中文原创麻豆传媒md0052| 黄色一级网站| 九九视频在线观看| 日本无码在线视频| 国产99精品视频| av在线小说| 黄色电影一区二区三区| 亚洲高清无码在线观看| 波多野结衣亚洲| 无码成人午夜在线影院| 国产av地址| 免费日韩黄色电影| 在线观看中文字幕亚洲| 特级毛片AAAAAA蜜桃| 操逼视频在线观看| 日韩A片在线观看| 小视频+福利| 免费操| 四川BBBBBB搡BBBBB| 日韩V欧美| 中文字幕在线观看一区二区三区| 无码网址| 中文字幕视频2023| 伊人无码视频| 成人伊人大香蕉| 亚州在线视频| 风流少妇一区二区三区91| 国产学生妹| av在线资源播放| 日韩欧美小电影| 人人射人人射| 大BBBw大BBBW另类| AA片免费| 成人在线观看无码| 美日毛片| 九九精品12| 国产精品三级片| 激情av在线| 亚洲专区在线| 四lll少妇BBBB槡BBBB| 西西人体大胆裸体A片| 久久国产99| 亚洲色偷精品一区二区三区| 91视频中文字幕| 免费的av网站| 日韩成人视频在线| 9797色色| 无码秘人妻一区二区三-百度| 黄色av免费观看| 在线无码一区二区三区| 亚洲精品久久久久久久久豆丁网 | 麻豆一级片| av一区二区三区| 亚洲品久久久蜜| 波多野吉衣视频| 日韩在线一级片| 先锋影音男人| 国产无遮挡又黄又爽又| 大香蕉一本| 天天日AV| www.xxx国产| 七十路の高齢熟女千代子下载| 高清无码免费不卡| 国产区欧美去区在线| 91视频国产精品| 在线成人免费视频| 色婷婷狠狠| 91精品亚洲|