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

日志與追蹤的完美融合:OpenTelemetry MDC實踐指南

開發 前端
通常我們排查問題的方式是先查詢異常日志,判斷是否是當前系統的問題。如果不是,則在日志中撈出 trace_id 再到鏈路查詢系統中查詢鏈路,看看具體是哪個系統的問題,然后再做具體的排查。

前言

通常我們排查問題的方式是先查詢異常日志,判斷是否是當前系統的問題。

如果不是,則在日志中撈出 trace_id 再到鏈路查詢系統中查詢鏈路,看看具體是哪個系統的問題,然后再做具體的排查。

類似于這樣:

圖片圖片

日志中會打印 trace_id 和 span_id。

如果日志系統做的比較完善的話,還可以直接點擊 trace_id 跳轉到鏈路系統里直接查詢鏈路信息。

MDC

這里的日志里關聯 trace 信息的做法有個專有名詞:MDC:(Mapped Diagnostic Context)。

簡單來說就是用于排查問題的上下文信息,通常是由鍵值對組成,類似于這樣的數據:

{  
  "timestamp" : "2024-08-05 17:27:31.097",  
  "level" : "INFO",  
  "thread" : "http-nio-9191-exec-1",  
  "mdc" : {  
    "trace_id" : "26242f945af80b044a60226af00211fb",  
    "trace_flags" : "01",  
    "span_id" : "3a7842b3e28ed5c8"  
  },  
  "logger" : "com.example.demo.DemoApplication",  
  "message" : "request: name: \"1232\"\n",  
  "context" : "default"  
}

在 Java 中的 Log4j 和 Logback 都有提供對應的實現。

如果我們使用了 OpenTelemetry 提供的 javaagent 再配合 logback 或者 Log4j 時就會自動具備打印 MDC 的能力:

java -javaagent:/Users/chenjie/Downloads/blog-img/demo/opentelemetry-javaagent-2.4.0-SNAPSHOT.jar xx.jar

比如我們只需要這樣配置這樣一個JSON 輸出的 logback 即可:

<appender name="PROJECT_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">  
    <file>${PATH}/demo.log</file>  
  
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">  
        <fileNamePattern>${PATH}/demo_%i.log</fileNamePattern>  
        <maxIndex>1</maxIndex>  
    </rollingPolicy>  
  
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">  
        <maxFileSize>100MB</maxFileSize>  
    </triggeringPolicy>  
  
    <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">  
        <jsonFormatter  
                class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">  
            <prettyPrint>true</prettyPrint>  
        </jsonFormatter>  
        <timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat>  
    </layout>  
  
</appender>  
  
<root level="INFO">  
    <appender-ref ref="STDOUT"/>  
    <appender-ref ref="PROJECT_LOG"/>  
</root>

圖片圖片

就會在日志文件中輸出 JSON 格式的日志,并且帶上 MDC 的信息。

自動 MDC 的原理

我也比較好奇 OpenTelemetry 是如何自動寫入 MDC 信息的,這里以 logback 為例。

@Override  
public ElementMatcher<TypeDescription> typeMatcher() {  
  return implementsInterface(named("ch.qos.logback.classic.spi.ILoggingEvent"));  
}  
  
@Override  
public void transform(TypeTransformer transformer) {  
  transformer.applyAdviceToMethod(  
      isMethod()  
          .and(isPublic())  
          .and(namedOneOf("getMDCPropertyMap", "getMdc"))  
          .and(takesArguments(0)),  
      LoggingEventInstrumentation.class.getName() + "$GetMdcAdvice");  
}

會在調用 ch.qos.logback.classic.spi.ILoggingEvent.getMDCPropertyMap()/getMdc() 這兩個函數中進行埋點。

這些邏輯都是寫在 javaagent 中的。

這個函數其實默認情況下會返回一個 logback 內置 MDC 的 map 數據(這里的數據我們可以自定義配置)。

而這里要做的就是將 trace 的上下文信息寫入這個 mdcPropertyMap 中。

以下是 OpenTelemetry agent 中的源碼:

Map<String, String> spanContextData = new HashMap<>();  
  
SpanContext spanContext = Java8BytecodeBridge.spanFromContext(context).getSpanContext();  
  
if (spanContext.isValid()) {  
  spanContextData.put(traceIdKey(), spanContext.getTraceId());  
  spanContextData.put(spanIdKey(), spanContext.getSpanId());  
  spanContextData.put(traceFlagsKey(), spanContext.getTraceFlags().asHex());  
}  
spanContextData.putAll(ConfiguredResourceAttributesHolder.getResourceAttributes());  
  
if (LogbackSingletons.addBaggage()) {  
  Baggage baggage = Java8BytecodeBridge.baggageFromContext(context);  
  
  // using a lambda here does not play nicely with instrumentation bytecode process  
  // (Java 6 related errors are observed) so relying on for loop instead  for (Map.Entry<String, BaggageEntry> entry : baggage.asMap().entrySet()) {  
    spanContextData.put(  
        // prefix all baggage values to avoid clashes with existing context  
        "baggage." + entry.getKey(), entry.getValue().getValue());  
  }}  
  
if (contextData == null) {  
  contextData = spanContextData;  
} else {  
  contextData = new UnionMap<>(contextData, spanContextData);  
}

這就是核心的寫入邏輯,從這個代碼中也可以看出直接從上線文中獲取的 span 的 context,而我們所需要的 trace_id/span_id  都是存放在 context 中的,只需要 get 出來然后寫入進 map 中即可。

從源碼里還得知,只要我們開啟 -Dotel.instrumentation.logback-mdc.add-baggage=true 配置還可以將 baggage 中的數據也寫入到 MDC 中。

而得易于 OpenTelemetry 中的 trace 是可以跨線程傳輸的,所以即便是我們在多線程里打印日志時 MDC 數據依然可以準確無誤的傳遞。

MDC 的原理

public static final String MDC_ATTR_NAME = "mdc";

圖片圖片

在 logback 的實現中是會調用剛才的 getMDCPropertyMap() 然后寫入到一個 key 為 mdc 的 map 里,最終可以寫入到文件或者控制臺。

這樣整個原理就可以串起來了。

自定義日志 數據

提到可以自定義 MDC 數據其實也是有使用場景的,比如我們的業務系統經常有類似的需求,需要在日志中打印一些常用業務數據:

  • userId、userName
  • 客戶端 IP等信息時

此時我們就可以創建一個 Layout 類來繼承 ch.qos.logback.contrib.json.classic.JsonLayout:

public class CustomJsonLayout extends JsonLayout {
    public CustomJsonLayout() {
    }

    protected void addCustomDataToJsonMap(Map<String, Object> map, ILoggingEvent event) {
        map.put("user_name", context.getProperty("userName"));
        map.put("user_id", context.getProperty("userId"));
        map.put("trace_id", TraceContext.traceId());
    }
}


public class CustomJsonLayoutEncoder extends LayoutWrappingEncoder<ILoggingEvent> {  
    public CustomJsonLayoutEncoder() {  
    }  
    public void start() {  
        CustomJsonLayout jsonLayout = new CustomJsonLayout();  
        jsonLayout.setContext(this.context);  
        jsonLayout.setIncludeContextName(false);  
        jsonLayout.setAppendLineSeparator(true);  
        jsonLayout.setJsonFormatter(new JacksonJsonFormatter());  
        jsonLayout.start();  
        super.setCharset(StandardCharsets.UTF_8);  
        super.setLayout(jsonLayout);  
        super.start();  
    }}

這里的 trace_id 是之前使用 skywalking 的時候由 skywalking 提供的函數:org.apache.skywalking.apm.toolkit.trace.TraceContext#traceId

接著只需要在 logback.xml 中配置這個 CustomJsonLayoutEncoder 就可以按照我們自定義的數據輸出日志了:

<appender name="PROJECT_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">  
    <file>${PATH}/app.log</file>  
  
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">  
        <fileNamePattern>${PATH}/app_%i.log</fileNamePattern>  
        <maxIndex>1</maxIndex>  
    </rollingPolicy>  
  
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">  
        <maxFileSize>100MB</maxFileSize>  
    </triggeringPolicy>  
  
    <encoder class="xx.CustomJsonLayoutEncoder"/>  
</appender>

<root level="INFO">  
    <appender-ref ref="STDOUT"/>  
    <appender-ref ref="PROJECT_LOG"/>  
</root>

雖然這個功能也可以使用日志切面來打印,但還是沒有直接在日志中輸出更加方便,它可以直接和我們的日志關聯在一起,只是多加了這幾個字段而已。

Spring Boot 使用

OpenTelemetry 有給 springboot 應用提供一個 spring-boot-starter 包,用于在不使用  javaagent 的情況下也可以自動埋點。

<dependencies>
  <dependency>
    <groupId>io.opentelemetry.instrumentation</groupId>
    <artifactId>opentelemetry-spring-boot-starter</artifactId>
    <version>OPENTELEMETRY_VERSION</version>
  </dependency>
</dependencies>

但在早期的版本中還不支持直接打印 MDC 日志:

圖片圖片

最新的版本已經支持

即便已經支持默認輸出 MDC 后,我們依然可以自定義的內容,比如我們想修改一下 key 的名稱,由 trace_id 修改為 otel_trace_id 等。

<appender name="OTEL" class="io.opentelemetry.instrumentation.logback.mdc.v1_0.OpenTelemetryAppender">
  <traceIdKey>otel_trace_id</traceIdKey>
  <spanIdKey>otel_span_id</spanIdKey>
  <traceFlagsKey>otel_trace_flags</traceFlagsKey>
</appender>

還是和之前類似,修改下 logback.xml 即可。

他的實現邏輯其實和之前的 auto instrument 中的類似,只不過使用的 API 不同而已。

auto instrument 是直接攔截代碼邏輯修改 map 的返回值,而 OpenTelemetryAppender 是繼承了 ch.qos.logback.core.UnsynchronizedAppenderBase 接口,從而獲得了重寫 MDC 的能力,但本質上都是一樣的,沒有太大區別。

不過使用它的前提是我們需要引入以下一個依賴:

<dependencies>
  <dependency>
    <groupId>io.opentelemetry.instrumentation</groupId>
    <artifactId>opentelemetry-logback-mdc-1.0</artifactId>
    <version>OPENTELEMETRY_VERSION</version>
  </dependency>
</dependencies>

如果不想修改 logback.yaml ,對于 springboot 來說還有更簡單的方案,我們只需要使用以下配置即可自定義 MDC 數據:

logging.pattern.level = trace_id=%mdc{trace_id} span_id=%mdc{span_id} trace_flags=%mdc{trace_flags} %5p

這里的 key 也可以自定義,只要占位符沒有取錯即可。

使用這個的前提是需要加載  javaagent,因為這里的數據是 javaagent 里寫進去的。

總結

以上就是關于 MDC 在 OpenTelemetry 中的使用,從使用和源碼邏輯上都分析了一遍,希望對 MDC 和 OpenTelemetry 的理解更加深刻一些。

關于 MDC 相關的概念與使用還是很有用的,是日常排查問題必不可少的一個工具。

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

2025-09-17 07:19:50

2024-05-21 08:09:00

OpenTelemetry倉庫

2023-10-16 23:43:52

云原生可觀測性

2024-06-14 08:19:45

2024-06-27 08:41:21

2015-11-04 15:13:56

華為

2012-10-19 12:49:40

NAS系統性能N8500OPS

2023-02-06 09:36:00

騰訊燈塔融合引擎

2024-06-07 07:41:03

2013-01-14 11:37:29

惠普電腦

2023-11-23 10:45:13

Next.js 14Supabase

2025-01-20 08:10:00

微服務架構SLF4J

2009-08-31 17:52:12

NehalemSSDSolaris

2025-05-26 08:50:00

SLF4JMDC全鏈路追蹤

2012-04-26 19:46:06

反釣魚沙龍

2025-10-10 08:58:13

2024-02-01 08:00:00

百川大模型角色大模型

2019-08-01 10:57:52

開發者技能TypeScript

2022-07-05 10:38:23

BGPCalicoMetalLB
點贊
收藏

51CTO技術棧公眾號

国产欧美成人| 亚洲精品午夜| 国产精品每日更新| 国产日韩一区在线| 久久久精品一区二区涩爱| 国语一区二区三区| 欧美在线观看一二区| 午夜在线视频免费观看| 日批免费在线观看| 免费成人性网站| 欧美日韩国产91| 91久久免费视频| 精品国产不卡一区二区| 精品久久久中文| 亚洲欧美国产不卡| 天天爱天天干天天操| 免费人成精品欧美精品| 久久久久久久一区二区| xxxxx99| 中文字幕一区二区三区中文字幕 | 一区二区三区四区免费| 日韩精品一页| 色视频一区二区| 国产精品日韩三级| 日本在线观看| 91视频国产观看| 亚洲a在线观看| 无码人妻精品一区二区50| 黄色亚洲精品| 中文字幕日韩欧美在线视频| 精品国产av色一区二区深夜久久| 欧洲精品久久久久毛片完整版| 午夜成人免费电影| 免费观看黄色大片| 日本蜜桃在线观看| 国产日韩欧美制服另类| 精品不卡在线| 农村少妇久久久久久久| 极品少妇一区二区三区精品视频 | 国产资源在线观看入口av| 亚洲视频在线观看一区| 相泽南亚洲一区二区在线播放| 污视频在线免费| 国产成人在线视频免费播放| 国产精品永久在线| www.亚洲激情| 老司机午夜免费精品视频 | 日本在线观看不卡| 亚洲 另类 春色 国产| 国产成人综合在线| 亚洲一区二区三区视频播放| 一区二区小视频| 老司机午夜精品视频| 日本一区二区不卡| 成人午夜视频在线播放| 久久www成人_看片免费不卡| 91大神福利视频在线| 国产香蕉在线视频| 激情久久久久| 97精品久久久| 久久黄色精品视频| 亚洲一区二区三区高清不卡| 69久久夜色精品国产7777| 国产大片中文字幕| 一区二区三区国产在线| 韩国美女主播一区| 国产精品国产三级国产专区52| 国产欧美在线| 日本一区二区三区在线播放| 免费无码国产精品| 日韩精品国产精品| 国产一区深夜福利| 97人妻精品一区二区三区| 国产在线麻豆精品观看| 99久久精品久久久久久ai换脸| 国产成人免费看一级大黄| 国产一区不卡视频| 精品国产乱码久久久久久蜜柚| 五月婷婷久久久| 久久综合久久综合九色| 日本在线观看一区二区三区| 91激情在线| 亚洲人成在线播放网站岛国| www.亚洲视频.com| 亚洲天堂资源| 欧美久久久一区| 日本成人在线免费| 亚洲精品小区久久久久久| 伊人亚洲福利一区二区三区| 国产免费一区二区三区四区| 欧美日韩三级电影在线| 青青草99啪国产免费| 一区二区视频网站| 成人av电影免费在线播放| 欧美一区二区三区在线播放| 欧美成人xxx| 亚洲成av人片一区二区| 97公开免费视频| aa亚洲一区一区三区| 亚洲精品久久久久久久久久久久久 | av高清不卡| 91麻豆精品国产91久久久更新时间 | 久久人体大尺度| 在线播放91灌醉迷j高跟美女| 麻豆精品国产传媒av| 激情五月综合网| 欧美黑人巨大xxx极品| 香蕉污视频在线观看| 国产一区在线观看麻豆| 欧美极品一区二区| 影音先锋在线视频| 欧美影院午夜播放| 日本护士做爰视频| 亚洲精品国产首次亮相| 国产999精品| 亚洲女人18毛片水真多| 国产精品二三区| 国产极品尤物在线| 看亚洲a级一级毛片| 亚洲欧美综合v| 久久免费小视频| 麻豆国产精品777777在线| 激情视频一区二区| 欧洲成人综合网| 欧美挠脚心视频网站| 少妇按摩一区二区三区| 欧美人成在线| 亚洲999一在线观看www| 国产精品无码2021在线观看| 亚洲高清免费在线| 潘金莲一级淫片aaaaaaa| 欧州一区二区| 日本伊人精品一区二区三区介绍 | 亚洲日本欧美在线| 欧美电影免费观看| 日韩精品极品在线观看| 久久久久噜噜噜亚洲熟女综合| 久久精品国产精品亚洲综合| 欧美日韩在线一二三| 中文在线а√在线8| 精品国产91亚洲一区二区三区婷婷| 国产三级精品三级观看| 麻豆国产精品777777在线| 日本午夜精品电影 | 国产精品视频最多的网站| 三级在线观看| 欧美香蕉大胸在线视频观看| 国产黑丝一区二区| 在线观看视频日韩| 国产精品日韩一区二区三区| 久色国产在线| 亚洲成人网av| 日韩av电影网| 91污在线观看| 97视频在线免费播放| 少妇高潮一区二区三区| 欧美在线一级视频| 邻居大乳一区二区三区| 在线观看免费亚洲| 久久久久久成人网| 蜜桃视频在线一区| 日本特级黄色大片| 国产精品视频一区二区三区综合 | 怡红院红怡院欧美aⅴ怡春院| 欧美日韩国产一级| 成人在线观看免费完整| 国产精品69久久久久水密桃| 蜜臀av性久久久久蜜臀av| 嫩呦国产一区二区三区av| 美女久久久久久久久久久| 午夜精品久久久久久久爽| 亚洲国产精品一区二区久久| 美女又爽又黄免费| 老**午夜毛片一区二区三区 | 天堂www中文在线资源| 亚洲黄色大片| 日本精品一区二区| 91成人小视频| 久久久久久国产精品久久| 深夜福利在线观看直播| 在线观看免费亚洲| 国产盗摄一区二区三区在线| 成人综合婷婷国产精品久久蜜臀 | 911精品国产一区二区在线| 成人免费毛片xxx| 成人av网站在线观看免费| 精品99在线视频| 99国产精品一区二区| www.av一区视频| 欧美日韩电影免费看| www.日韩不卡电影av| 全部免费毛片在线播放一个| 色88888久久久久久影院野外| 久久精品在线观看视频| 国产成人av影院| 日韩手机在线观看视频| 亚洲高清资源在线观看| 久久久综合亚洲91久久98| 日韩漫画puputoon| 欧美黄网免费在线观看| 亚洲AV午夜精品| 日本韩国欧美在线| 久久久久噜噜噜亚洲熟女综合| 国产亚洲欧美色| 岛国精品一区二区三区| 免费观看在线综合| 青青青免费在线| 久久久久免费av| 免费观看成人高| 久久精品一级| 国产精品视频在线观看| 蜜桃视频在线观看免费视频| 日韩在线观看精品| 国产小视频在线观看| 亚洲精品一区二区三区精华液| 姑娘第5集在线观看免费好剧| 亚洲一区二区三区四区在线观看 | 最新av免费在线观看| 亚洲深夜激情| 毛片av在线播放| 久久电影院7| 欧美中日韩一区二区三区| jizz性欧美23| 91视频-88av| 国产麻豆一区| 日韩免费在线免费观看| 高端美女服务在线视频播放| 欧美美女18p| 乱人伦中文视频在线| 一区二区三区美女xx视频| 亚洲三区在线播放| 欧美精品一区二区三区一线天视频 | 亚洲一区二区久久久久久| 国产一区一一区高清不卡| 午夜精品一区二区三区视频免费看| 成人在线免费看片| 日韩亚洲欧美中文高清在线| 成人免费高清在线播放| 亚洲欧美日韩成人| 你懂的视频在线观看| 亚洲电影第1页| 免费观看黄一级视频| 欧美成人a∨高清免费观看| 国产精品无码在线播放| 4438x亚洲最大成人网| 中文字幕av免费观看| 色综合色综合色综合 | 国产乱色在线观看| 俺去啦;欧美日韩| 欧美成人hd| 欧美精品一区二区免费| 在线视频中文字幕第一页| 欧美精品免费在线观看| 日本aa在线| 久久久久国产精品免费| 国产在线观看www| 热99精品里视频精品| 台湾佬成人网| 国产精品91在线观看| 精品日本视频| 国产又爽又黄的激情精品视频| 日韩一区二区三区四区五区| 国产在线拍揄自揄视频不卡99 | 国产精品久久久久久久久久直播 | 欧美在线视频一区二区三区| 欧美综合一区| 在线天堂一区av电影| 伊人久久大香线蕉综合四虎小说| 亚洲高潮无码久久| 国内综合精品午夜久久资源| 国产 日韩 亚洲 欧美| 亚欧美中日韩视频| 老司机午夜性大片| 国产aⅴ综合色| free性中国hd国语露脸| 久久精品无码一区二区三区| www.xx日本| 亚洲国产婷婷综合在线精品| 久久久久久久久久久久久av| 欧美午夜不卡视频| www.成人在线观看| 国产视频精品xxxx| 中文日本在线观看| 欧美激情高清视频| 日韩高清在线| 懂色中文一区二区三区在线视频| 色88888久久久久久影院| 四虎永久在线精品免费一区二区| 一区二区三区毛片免费| 日韩av综合在线观看| 精品一区二区三区影院在线午夜| www.com日本| 国产精品你懂的在线欣赏| 久久久国产精品人人片| 色综合天天综合给合国产| 国产欧美第一页| 精品视频一区在线视频| 激情成人四房播| 欧美在线播放视频| 美女精品久久| 日韩国产欧美精品| 国模大胆一区二区三区| 国产小视频精品| a在线欧美一区| 日韩福利小视频| 欧亚洲嫩模精品一区三区| 高h放荡受浪受bl| xvideos亚洲| sis001欧美| 成人动漫视频在线观看免费| 日本久久一二三四| 极品美女扒开粉嫩小泬| 国产剧情在线观看一区二区| 日本少妇xxxxx| 午夜欧美在线一二页| 国产三级午夜理伦三级| 亚洲人成网站免费播放| free性欧美| 91成人免费在线观看| 第一会所sis001亚洲| 免费在线a视频| 高清国产午夜精品久久久久久| 亚洲综合第一区| 日本韩国精品在线| 完全免费av在线播放| 视频成人永久免费视频| 色综合久久av| 午夜在线观看免费一区| 国产成人精品综合久久久久99| 国产精品美女久久久久av爽李琼| 久久人妻免费视频| 亚洲精品福利免费在线观看| 免费污视频在线| 91亚洲va在线va天堂va国| 日韩精品欧美| 熟妇人妻无乱码中文字幕真矢织江 | 亚洲大片一区二区三区| 国产日韩欧美一区二区东京热| 在线色欧美三级视频| 久久久人成影片一区二区三区在哪下载 | 国产3p露脸普通话对白| 国产91富婆露脸刺激对白| 精品自拍偷拍视频| 欧美高清视频不卡网| 欧美被日视频| 91丨九色丨国产在线| 亚洲男女av一区二区| www.欧美激情.com| 亚洲欧美日韩中文播放 | 精品国产免费一区二区三区香蕉| 在线中文免费视频| 成人永久免费| 亚洲大胆在线| 久久无码人妻精品一区二区三区 | 中文字幕一二三四| 色播久久人人爽人人爽人人片视av| 成人免费在线观看视频| 综合国产精品久久久| 国产一区二区三区免费在线观看| 加勒比婷婷色综合久久| 日韩美女主播在线视频一区二区三区| 午夜激情在线| 韩国精品一区二区三区六区色诱| 国产一区二区高清| 亚洲成人黄色av| 欧美另类z0zxhd电影| 人妖欧美1区| 欧美成人免费在线| 美国欧美日韩国产在线播放| 91传媒免费观看| 精品久久五月天| 日韩av一卡| 亚洲视频电影| 国产精品 欧美精品| 日韩高清精品免费观看| 亚洲图片在线综合| 99国内精品久久久久| 蜜臀av无码一区二区三区| 久久久亚洲精品石原莉奈| 亚洲一区 中文字幕| 欧美丰满少妇xxxx| 亚洲福利天堂| 992tv人人草| 精品久久久中文| 高清全集视频免费在线| 国产日韩在线一区二区三区| 日韩avvvv在线播放| www欧美com| 亚洲免费电影一区| 精品一级视频| 成人免费观看毛片| 亚洲欧美日韩在线不卡| 亚洲人成色777777精品音频| 国产精品在线看| 亚洲国产欧美国产综合一区| 亚洲精品午夜视频| 精品日韩一区二区三区| 最新欧美电影| 和岳每晚弄的高潮嗷嗷叫视频| 国产日韩欧美不卡|