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

OpenTelemetry 實戰:從零實現應用指標監控

開發 前端
metrics 的使用相對于 trace 更簡單一些,不需要理解復雜的 context、span 等概念,只需要搞清楚有哪幾種 metrics 類型,分別應用在哪些不同的場景即可。

前言

在上一篇文章:OpenTelemetry 實戰:從零實現分布式鏈路追蹤講解了鏈路相關的實戰,本次我們繼續跟進如何使用 OpenTelemetry 集成 metrics 監控。

建議對指標監控不太熟的朋友可以先查看這篇前菜文章:從 Prometheus 到 OpenTelemetry:指標監控的演進與實踐

名稱

作用

語言

版本

java-demo

發送 gRPC 請求的客戶端

Java

opentelemetry-agent: 2.4.0/SpringBoot: 2.7.14

k8s-combat

提供 gRPC 服務的服務端

Golang

go.opentelemetry.io/otel: 1.28/ Go: 1.22

Jaeger

trace 存儲的服務端以及 TraceUI 展示

Golang

jaegertracing/all-in-one:1.56

opentelemetry-collector-contrib

OpenTelemetry 的 collector 服務端,用于收集 trace/metrics/logs 然后寫入到遠端存儲

Golang

otel/opentelemetry-collector-contrib:0.98.0

Prometheus

作為 metrics 的存儲和展示組件,也可以用 VictoriaMetrics 等兼容 Prometheus 的存儲替代。

Golang

quay.io/prometheus/prometheus:v2.49.1





快速開始

以上是加入 metrics 之后的流程圖,在原有的基礎上會新增一個 Prometheus 組件,collector 會將 metrics 指標數據通過遠程的 remote write 的方式寫入到 Prometheus 中。

Prometheus 為了能兼容 OpenTelemetry 寫入過來的數據,需要開啟相關特性才可以。

如果是 docker 啟動的話需要傳入相關參數:

docker run  -d -p 9292:9090 --name prometheus \
-v /prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
quay.io/prometheus/prometheus:v2.49.1 \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/prometheus \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.console.templates=/etc/prometheus/consoles \
--enable-feature=exemplar-storage \
--enable-feature=otlp-write-receiver

--enable-feature=otlp-write-receiver 最主要的就是這個參數,用于開啟接收 OTLP 格式的數據。

但使用這個 Push 特性就會喪失掉 Prometheus 的許多 Pull 特性,比如服務發現,定時抓取等,不過也還好,Push 和 Pull 可以同時使用,原本使用 Pull 抓取的組件依然不受影響。

修改 OpenTelemetry-Collector

接著我們需要修改下 Collector 的配置:

exporters:
  debug:
  otlp:
    endpoint: "jaeger:4317"
    tls:
      insecure: true
  otlphttp/prometheus:
    endpoint: http://prometheus:9292/api/v1/otlp
    tls:
      insecure: true      

processors:
  batch:

service:
  pipelines:
    traces:
      receivers:
      - otlp
      processors: [batch]
      exporters:
      - otlp
      - debug        
    metrics:
      exporters:
      - otlphttp/prometheus
      - debug
      processors:
      - batch
      receivers:
      - otlp

這里我們在 exporter 中新增了一個 otlphttp/prometheus 的節點,用于指定導出 prometheus 的 endpoint 地址。

同時我們還需要在 server.metrics.exporters 中配置相同的 key: otlphttp/prometheus。

需要注意的是這里我們一定得是配置在 metrics.exporters 這個節點下,如果配置在 traces.exporters 下時,相當于是告訴 collector 講 trace 的數據導出到 otlphttp/prometheus.endpoint 這個 endpoint 里了。

所以重點是需要理解這里的配對關系。

運行效果

這樣我們只需要將應用啟動之后就可以在 Prometheus 中查詢到應用上報的指標了。

java -javaagent:opentelemetry-javaagent-2.4.0-SNAPSHOT.jar \
-Dotel.traces.exporter=otlp \
-Dotel.metrics.exporter=otlp \
-Dotel.logs.exporter=none \
-Dotel.service.name=java-demo \
-Dotel.exporter.otlp.protocol=grpc \
-Dotel.propagators=tracecontext,baggage \
-Dotel.exporter.otlp.endpoint=http://127.0.0.1:5317 -jar target/demo-0.0.1-SNAPSHOT.jar

# Run go app
export OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:5317 OTEL_RESOURCE_ATTRIBUTES=service.name=k8s-combat
./k8s-combat

因為我們在 collector 中開啟了 Debug 的 exporter,所以可以看到以下日志:

2024-07-22T06:34:08.060Z info MetricsExporter {"kind": "exporter", "data_type": "metrics", "name": "debug", "resource metrics": 1, "metrics": 18, "data points": 44}

此時是可以說明指標上傳成功的。

然后我們打開 Prometheus 的地址:http://127.0.0.1:9292/graph便可以查詢到 Java 應用和 Go 應用上報的指標。

圖片圖片

OpenTelemetry 的 javaagent 會自動上報 JVM 相關的指標。

而在 Go 程序中我們還是需要顯式的配置一些埋點:

func initMeterProvider() *sdkmetric.MeterProvider {  
    ctx := context.Background()  
  
    exporter, err := otlpmetricgrpc.New(ctx)  
    if err != nil {  
       log.Printf("new otlp metric grpc exporter failed: %v", err)  
    }  
    mp := sdkmetric.NewMeterProvider(  
       sdkmetric.WithReader(sdkmetric.NewPeriodicReader(exporter)),  
       sdkmetric.WithResource(initResource()),  
    )    otel.SetMeterProvider(mp)  
    return mp  
}

mp := initMeterProvider()
defer func() {
 if err := mp.Shutdown(context.Background()); err != nil {
  log.Printf("Error shutting down meter provider: %v", err)
 }
}()

和 Tracer 類似,我們首先也得在 main 函數中調用 initMeterProvider() 函數來初始化 Meter,此時它會返回一個 sdkmetric.MeterProvider 對象。

OpenTelemetry Go 的 SDK 中已經提供了對 go runtime 的自動埋點,我們只需要調用相關函數即可:

err := runtime.Start(runtime.WithMinimumReadMemStatsInterval(time.Second))
if err != nil {
    log.Fatal(err)
}

之后我們啟動應用,在 Prometheus 中就可以看到  Go  應用上報的相關指標了。

圖片圖片

圖片圖片

runtime_uptime_milliseconds_total  Go 的運行時指標。

Prometheus 中展示指標的 UI 能力有限,通常我們都是配合 grafana 進行展示的。

圖片圖片

手動上報指標

當然除了 SDK 自動上報的指標之外,我們也可以類似于 trace 那樣手動上報一些指標;

比如我就想記錄某個函數調用的次數。

var meter =  otel.Meter("test.io/k8s/combat")  
apiCounter, err = meter.Int64Counter(  
    "api.counter",  
    metric.WithDescription("Number of API calls."),  
    metric.WithUnit("{call}"),  
)  
if err != nil {  
    log.Err(err)  
}

func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {  
    defer apiCounter.Add(ctx, 1)  
    return &pb.HelloReply{Message: fmt.Sprintf("hostname:%s, in:%s, md:%v", name, in.Name, md)}, nil  
}

只需要創建一個 Int64Counter 類型的指標,然后在需要埋點處調用它的函數 apiCounter.Add(ctx, 1) 即可。

圖片圖片

之后便可以在 Prometheus 中查到這個指標了。

除此之外 OpenTelemetry 中的 metrics 定義和 Prometheus 也是類似的,還有以下幾種類型:

  • Counter:單調遞增計數器,比如可以用來記錄訂單數、總的請求數。
  • UpDownCounter:與 Counter 類似,只不過它可以遞減。
  • Gauge:用于記錄隨時在變化的值,比如內存使用量、CPU 使用量等。
  • Histogram:通常用于記錄請求延遲、響應時間等。

在 Java 中也提供有類似的 API 可以完成自定義指標:

messageInCounter = meter    
        .counterBuilder(MESSAGE_IN_COUNTER)    
        .setUnit("{message}")    
        .setDescription("The total number of messages received for this topic.")    
        .buildObserver();

對于 Gauge 類型的數據用法如下,使用 buildWithCallback 回調函數上報數據,OpenTelemetry 會在框架層面每 30s 回調一次。

public static void registerObservers() {      
    Meter meter = MetricsRegistration.getMeter();      
      
    meter.gaugeBuilder("pulsar_producer_num_msg_send")      
            .setDescription("The number of messages published in the last interval")      
            .ofLongs()      
            .buildWithCallback(      
                    r -> recordProducerMetrics(r, ProducerStats::getNumMsgsSent));  
  
private static void recordProducerMetrics(ObservableLongMeasurement observableLongMeasurement, Function<ProducerStats, Long> getter) {      
    for (Producer producer : CollectionHelper.PRODUCER_COLLECTION.list()) {      
        ProducerStats stats = producer.getStats();      
        String topic = producer.getTopic();      
        if (topic.endsWith(RetryMessageUtil.RETRY_GROUP_TOPIC_SUFFIX)) {      
            continue;      
        }        observableLongMeasurement.record(getter.apply(stats),      
                Attributes.of(PRODUCER_NAME, producer.getProducerName(), TOPIC, topic));      
    }}

更多具體用法可以參考官方文檔鏈接:https://opentelemetry.io/docs/languages/java/instrumentation/#metrics

如果我們不想將數據通過 collector 而是直接上報到 Prometheus 中,使用 OpenTelemetry 框架也是可以實現的。

我們只需要配置下環境變量:

export OTEL_METRICS_EXPORTER=prometheus

這樣我們就可以訪問 http://127.0.0.1:9464/metrics 獲取到當前應用暴露出來的指標,此時就可以在 Prometheus 里配置好采集 job 來獲取數據。

scrape_configs:
  - job_name: "k8s-combat"
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
      - targets: ["k8s-combat:9464"]

這就是典型的 Pull 模型,而 OpenTelemetry 推薦使用的是 Push 模型,數據由 OpenTelemetry 進行采集然后推送到 Prometheus。

這兩種模式各有好處:


Pull模型

Push 模型

優點

可以在一個集中的配置里管理所有的抓取端點,也可以為每一個應用單獨配置抓取頻次等數據。

在 OpenTelemetry 的 collector中可以集中對指標做預處理之后再將過濾后的數據寫入 Prometheus,更加的靈活。

缺點

1. 預處理指標比較麻煩,所有的數據是到了 Prometheus 后再經過relabel處理后再寫入存儲。

2. 需要配置服務發現

1. 額外需要維護一個類似于 collector 這樣的指標網關的組件

比如我們是用和 Prometheus 兼容的 VictoriaMetrics 采集了 istio 的相關指標,但里面的指標太多了,我們需要刪除掉一部分。

就需要在采集任務里編寫規則:

apiVersion: operator.victoriametrics.com/v1beta1  
kind: VMPodScrape  
metadata:  
  name: isito-pod-scrape  
spec:  
  podMetricsEndpoints:  
    - scheme: http  
      scrape_interval: "30s"  
      scrapeTimeout: "30s"  
      path: /stats/prometheus  
      metricRelabelConfigs:  
        - regex: ^envoy_.*|^url\_\_\_\_.*|istio_request_bytes_sum|istio_request_bytes_count|istio_response_bytes_sum|istio_request_bytes_sum|istio_request_duration_milliseconds_sum|istio_response_bytes_count|istio_request_duration_milliseconds_count|^ostrich_apigateway.*|istio_request_messages_total|istio_response_messages_total  
          action: drop_metrics  
  namespaceSelector:  
    any: true

換成在 collector 中處理后,這些邏輯都可以全部移動到 collector 中集中處理。

總結

metrics 的使用相對于 trace 更簡單一些,不需要理解復雜的 context、span 等概念,只需要搞清楚有哪幾種 metrics 類型,分別應用在哪些不同的場景即可。

參考鏈接:

  • https://prometheus.io/docs/prometheus/latest/feature_flags/#otlp-receiver
  • https://opentelemetry.io/docs/languages/java/instrumentation/#metrics
  • https://opentelemetry.io/docs/languages/go/instrumentation/#metrics

責任編輯:武曉燕 來源: crossoverJie
相關推薦

2024-08-21 08:09:17

2024-09-04 08:09:51

2024-06-14 08:19:45

2024-04-08 08:09:10

埋點收集數據StartRocks數據存儲

2023-08-30 07:20:58

2025-02-17 07:45:29

2020-05-18 14:55:34

監控系統架構技術

2021-10-14 08:07:33

Go 應用Prometheus監控

2025-10-14 02:45:00

Serilog.NET架構

2023-09-05 07:28:02

Java自動埋點

2025-10-31 07:10:00

裝飾器Python代碼

2021-08-15 22:52:30

前端H5拼圖

2024-04-16 08:09:36

JavapulsarAPI

2020-09-24 11:46:03

Promise

2023-04-27 07:06:09

Categraf夜鶯

2023-12-25 11:18:12

OpenTeleme應用日志Loki

2021-04-20 08:31:59

應用監控高可用

2023-11-07 14:30:28

Python開發

2021-05-07 08:20:52

前端開發技術熱點

2023-01-07 08:09:41

零代碼Dooring組件
點贊
收藏

51CTO技術棧公眾號

3atv在线一区二区三区| 国产最新精品精品你懂的| 亚洲男子天堂网| 国产精品久久网| 99视频只有精品| 欧美aaaaa级| 欧美日韩中文精品| 日本黄大片在线观看| 国产在线电影| 成人一级片在线观看| 国产精品久久久久久久久久久久| 国产在线一卡二卡| 国产一区二区观看| 亚洲第一精品久久忘忧草社区| 99视频精品免费| 久久av色综合| 亚洲丝袜美腿综合| 国产伦精品一区二区三区精品视频| 成人免费视频网站入口::| 伊人久久大香线蕉| 欧美精品一区二区蜜臀亚洲| 午夜免费看视频| 周于希免费高清在线观看| 亚洲精品第1页| 亚洲伊人婷婷| 国产三级电影在线| 99re免费视频精品全部| 99re在线视频上| 91激情在线观看| 日本午夜一本久久久综合| 97在线免费观看| 久久免费视频播放| 亚洲精品电影| 久久精品国产96久久久香蕉| av男人的天堂av| 性欧美lx╳lx╳| 亚洲变态欧美另类捆绑| 天堂va欧美va亚洲va老司机| 亚洲小说区图片区都市| 国产精品久久影院| 日本一区二区三区www| 亚洲日本中文字幕在线| 国产区高清在线| 亚洲成人黄色| 91精品国产一区二区三区香蕉 | 免费一级在线观看播放网址| 一区二区日韩免费看| 欧美乱大交xxxxx另类电影| 精品无码一区二区三区蜜臀| 97欧美在线视频| 少妇久久久久久| 黄色国产在线播放| 日本不卡电影| 中文字幕亚洲综合久久| 日韩精品电影一区二区三区| 日韩欧美二区| 最近中文字幕日韩精品| 97在线观看视频免费| 日韩一区自拍| 欧美成年人视频网站欧美| 亚洲香蕉中文网| 国产ts一区| 日韩成人在线视频观看| 国产成人av一区二区三区不卡| 日本在线一区二区| 在线播放视频一区| 日韩精品在线播放视频| 国偷自产视频一区二区久| 精品日韩99亚洲| 成人一区二区三| 久久精品女人天堂av免费观看| 国产精品久久99| 手机在线视频你懂的| 最新国产露脸在线观看| 亚洲成人av电影| 日韩人妻精品无码一区二区三区| 欧美一级大黄| 91精品国产综合久久久蜜臀粉嫩| 九一精品久久久| 天天操天天射天天舔| 男人最爱成人网| 色综合久久综合| 亚洲天堂国产视频| 国产成人一二| 国产亚洲激情在线| 欧美成人一二三区| 免费欧美日韩| 亚洲精品免费网站| 欧美中文在线| 亚洲人亚洲人成电影网站色| 内射国产内射夫妻免费频道| 国产精品久久久久久吹潮| 日韩欧美国产三级电影视频| asian性开放少妇pics| 999久久久亚洲| 午夜免费日韩视频| 一区二区三区www污污污网站| 成人美女在线视频| 亚洲一卡二卡三卡| 日本а中文在线天堂| 777亚洲妇女| 波多野吉衣中文字幕| 99久久久久久中文字幕一区| 2019中文字幕在线免费观看| 卡通动漫亚洲综合| 免费日韩一区二区| 99re国产| 日本免费在线观看| 色综合久久88色综合天天免费| 宇都宫紫苑在线播放| 精品一区电影| 97超级碰碰碰| 精品女同一区二区三区| 亚洲国产经典视频| 免费欧美一级视频| 亚洲国产aⅴ精品一区二区| 在线观看视频99| 手机av在线不卡| 99在线观看免费视频精品观看| 成人国产亚洲精品a区天堂华泰| 久久米奇亚洲| 天天色综合成人网| av天堂一区二区| 久久久久久免费视频| 国产精品久久久精品| 香蕉人妻av久久久久天天| 一区二区三区在线播放| 99九九99九九九99九他书对| 日本不卡不卡| 亚洲毛片在线免费| 日韩精品在线观看视频| 久久婷婷国产麻豆91| 国模少妇一区二区三区| 在线综合视频网站| 欧美日韩卡一| 中文字幕一区日韩电影| 无码人妻av一区二区三区波多野 | 国产九九精品视频| 国产日产精品久久久久久婷婷| 欧美性猛交xxxx免费看| 免费看黄色aaaaaa 片| 亚洲特色特黄| 国产精品欧美日韩久久| porn视频在线观看| 欧美在线观看一区| 国产wwwwxxxx| 韩国成人精品a∨在线观看| 亚洲在线视频一区二区| 国产成人免费9x9x人网站视频| 亚洲欧美在线x视频| 好看的av在线| 国产亚洲一区二区三区在线观看| 99re在线视频免费观看| 国产日产一区 | 中文字幕久久精品一区二区 | 欧美深深色噜噜狠狠yyy| 亚洲黄色网址| 国产一区二区三区在线| 最好看的日本字幕mv视频大全| 国产精品美女一区二区三区| 中文字幕色网站| 欧美日韩影院| 精品视频一区二区三区四区| 亚洲天堂av影院| 性欧美疯狂xxxxbbbb| 99精品一区二区三区无码吞精 | 欧美午夜aaaaaa免费视频| 成人同人动漫免费观看| 亚洲一区二区少妇| 国产不卡123| 在线播放日韩av| 99产精品成人啪免费网站| 亚洲国产成人va在线观看天堂| 国产男女猛烈无遮挡a片漫画| 日韩av成人高清| 青草全福视在线| 欧美国产不卡| 国产欧美在线看| 久草在线资源站资源站| 亚洲区一区二区| 99在线观看免费| 色综合久久综合中文综合网| 婷婷社区五月天| fc2成人免费人成在线观看播放| 99视频精品免费| 亚洲手机在线| 一本一道久久a久久精品综合| 亚洲不卡在线| 国产精品直播网红| 动漫一区二区| 在线成人中文字幕| 日本黄色免费视频| 亚洲视频免费观看| 91玉足脚交白嫩脚丫| 青草国产精品久久久久久| 男人添女人荫蒂免费视频| 99久久99九九99九九九| 欧美精品videossex88| 99爱视频在线| 性欧美freehd18| 欧美韩国理论所午夜片917电影| 每日更新在线观看av| 日韩你懂的在线观看| 久久久久精彩视频| 五月天欧美精品| 久久精品黄色片| 国产精品午夜在线| 亚洲中文字幕一区| 国产不卡一区视频| 亚洲av首页在线| 少妇精品久久久一区二区| 99在线首页视频| 欧美亚洲综合视频| 国产成人在线视频| 国产露出视频在线观看| 精品国产乱码久久久久久久久 | 日韩国产在线观看一区| a级黄色小视频| 亚洲激情中文在线| 亚洲精品日韩成人| 欧美一区=区三区| 国产a∨精品一区二区三区不卡| 国产嫩草在线视频| 欧美成人免费全部| 黄色成人在线| 丝袜一区二区三区| 丁香婷婷在线观看| 亚洲区免费影片| 麻豆导航在线观看| 日韩精品在线免费观看视频| 欧性猛交ⅹxxx乱大交| 精品噜噜噜噜久久久久久久久试看 | 亚洲人成人一区二区三区| 日韩精品手机在线观看| 欧美伊人影院| 51xx午夜影福利| 欧美精品啪啪| 欧美性猛交内射兽交老熟妇| 欧美在线免费| 国产精品视频网站在线观看| 亚洲精品小说| 日本国产中文字幕| 欧美视频二区| 精品少妇人欧美激情在线观看| 国产精品a久久久久| 久久这里只有精品8| 亚洲国产日韩在线| 免费在线a视频| 欧美中文字幕| 手机在线看福利| 美女在线观看视频一区二区| 99精品国产99久久久久久白柏| 亚洲黄色av片| 国产综合一区二区| 和岳每晚弄的高潮嗷嗷叫视频| 欧美成人国产| 高清欧美精品xxxxx| 亚洲一区二区网站| www.99av.com| 经典三级在线一区| 91精品国产高清91久久久久久| 粉嫩av亚洲一区二区图片| 国产+高潮+白浆+无码| 男女男精品视频| 亚洲一二区在线观看| 国产999精品久久| 黄色a一级视频| 欧美国产成人在线| 97在线观看免费高| 黄色一区二区三区| 中文字幕资源网| 日韩精品一区二区三区中文不卡 | 蜜臀尤物一区二区三区直播| 欧美午夜一区二区三区免费大片| 国产精品无码AV| 亚洲国产精品网站| 黄色免费在线播放| 久久成人精品一区二区三区| 蜜桃视频在线观看免费视频| 国产精品91久久久| 日韩在线视频一区二区三区| 久久另类ts人妖一区二区| 欧美韩日一区| 国产精品裸体瑜伽视频| 美美哒免费高清在线观看视频一区二区 | 国产亚洲字幕| 麻豆成人av| 欧美在线1区| 美女网站免费观看视频| 国产精品1024| 国产精品国产福利国产秒拍 | 国产伦精品一区二区三区视频| 三年中文高清在线观看第6集 | 日韩中文字幕a| 成人av动漫在线| 毛片视频免费播放| 粉嫩老牛aⅴ一区二区三区| 欧美特级一级片| 色婷婷精品大在线视频| 精品人妻一区二区三区浪潮在线 | 国产日韩欧美精品| 四虎成人av| 东京热加勒比无码少妇| 国产高清亚洲一区| 羞羞在线观看视频| 色欧美日韩亚洲| 色呦呦视频在线| 美日韩精品免费视频| 成人在线视频免费| 欧美下载看逼逼| 99精品国产一区二区青青牛奶| 91插插插影院| 国产亚洲va综合人人澡精品 | 国产亚洲激情| 亚洲美女高潮久久久| 一区在线观看免费| 国产乡下妇女三片| 亚洲人a成www在线影院| 麻豆理论在线观看| 国产高清在线一区二区| 欧美二区视频| 亚洲五月激情网| 亚洲欧美偷拍另类a∨色屁股| 在线免费看av的网站| 国产亚洲激情在线| 亚洲精品.com| 欧美日韩电影一区二区| 亚洲一区二区三区四区五区午夜| 午夜剧场免费看| 亚洲6080在线| 蜜臀久久久久久999| 久久久亚洲成人| 2020国产精品极品色在线观看| 国产精品三级一区二区| 国产精品影视网| 欧美毛片在线观看| 日韩精品专区在线| av中文在线资源| 粉嫩av一区二区三区免费观看| 欧美国产91| 18禁一区二区三区| 午夜精品福利在线| 午夜av免费观看| 欧美自拍大量在线观看| 女人丝袜激情亚洲| 国产裸体免费无遮挡| 国产精品久久久久久久久免费丝袜| 欧美 亚洲 另类 激情 另类| 中文字幕欧美在线| 成人网av.com/| 激情成人开心网| www.欧美精品一二区| 国产专区第一页| 一区二区三区视频在线| 成人做爰视频www| 伊人av成人| 国产精品一二三四| 国产特黄大片aaaa毛片| 亚洲人成在线观看| 999精品视频在线观看| www.亚洲成人网| 99久久精品国产一区| 精人妻无码一区二区三区| 神马久久久久久| 亚洲日本va午夜在线电影| 国产69精品久久久久999小说| 老色鬼在线视频| 69视频在线免费观看| 国产亚洲电影| 亚洲精品在线视频播放| 亚洲一二三专区| 黄色av网站在线看| 91九色在线视频| 久久综合影院| 国产原创精品在线| 亚洲一区二区欧美日韩| 毛片在线能看| 91精品国产综合久久久久久丝袜| 亚洲综合欧美| 美国黄色片视频| 亚洲精品电影在线观看| 国产成人毛片| 成人小视频在线观看免费| 久久久蜜桃精品| 99视频在线观看免费| 日av在线播放中文不卡| 91精品国产91久久综合| 在线观看日韩精品视频| 51精品视频一区二区三区| 英国三级经典在线观看| 大桥未久一区二区三区| 久久日一线二线三线suv| 国产手机av在线| 国产97色在线|日韩| 国产综合精品一区| 青青草华人在线视频| 日韩成人在线观看| 亚洲天堂中文字幕在线观看| 国产野外作爱视频播放| 午夜视频一区二区|