精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

野花视频免费在线观看| 欧美日韩综合精品| 国产黄色片视频| 中文精品一区二区| 欧美日韩你懂的| 日本国产中文字幕| 婷婷丁香一区二区三区| 视频在线观看一区| 美女精品久久久| aaaaaav| 成人国产精品一区二区免费麻豆| 亚洲视频在线一区二区| 久久精品日产第一区二区三区乱码| 欧美在线视频精品| 亚洲午夜极品| 日韩小视频在线观看| 在线看黄色的网站| av在线成人| 在线亚洲人成电影网站色www| 影音先锋男人的网站| 四虎一区二区| 香蕉影院在线观看| 欧美三区视频| 日韩中文字幕在线免费观看| 国产精品久久AV无码| 国产美女视频一区二区 | 国产午夜精品久久久| 亚洲第一色av| 桃花岛tv亚洲品质| 亚洲成人精品影院| 日韩精品第1页| av基地在线| 91色九色蝌蚪| 国产精品视频免费一区| 国产按摩一区二区三区| 美女网站视频久久| 国产不卡av在线| 97久久久久久久| aa国产精品| 欧美激情第一页xxx| www.99re6| 欧美日韩一二| 亚洲人成免费电影| 97人妻天天摸天天爽天天| 亚洲图色一区二区三区| 欧美一区二区三区在线电影| 亚洲成人天堂网| 欧美aaa视频| 色婷婷久久一区二区三区麻豆| 免费成人午夜视频| 成人影音在线| 午夜私人影院久久久久| 国产一区二区片| 亚洲性图自拍| 一区二区欧美在线观看| 日本丰满大乳奶| www在线观看播放免费视频日本| 国产精品伦理一区二区| 亚洲欧美日韩在线综合| 日韩免费啪啪| 亚洲欧美日韩在线不卡| 精品人妻大屁股白浆无码| 日韩专区av| 亚洲成人免费电影| 色妞久久福利网| 欧美一区二区视频在线播放| 亚洲小说区图片区都市| 亚洲精品一二三区| 成年在线观看视频| 成人免费图片免费观看| 欧美性生交xxxxxdddd| 99视频精品免费| 亚洲精品乱码日韩| 日韩欧美国产成人一区二区| 精品国产乱码久久久久夜深人妻| 精品国内亚洲2022精品成人| 精品一区二区电影| 调教驯服丰满美艳麻麻在线视频| 日本一二区不卡| 另类视频在线观看| 国产第一页在线播放| 男人天堂欧美日韩| 国产欧美精品在线| 超碰免费在线97| 2021国产精品久久精品| 亚洲高清视频在线观看| 影音先锋在线视频| 日韩欧美国产视频| 在线视频观看91| 免费成人三级| 中文字幕在线日韩| 久久一区二区三| 日韩中文字幕一区二区三区| 91精品视频播放| 天堂中文在线资源| 久久婷婷色综合| 激情五月五月婷婷| 另类激情视频| 日韩精品自拍偷拍| 精品人妻无码一区| 亚洲无线视频| 国产精品自产拍在线观看| 亚洲国产999| 国产清纯在线一区二区www| 玖玖精品在线视频| 欧美成a人片在线观看久| 在线观看91av| 97伦伦午夜电影理伦片| 综合久久婷婷| 国产精品日韩在线播放| 午夜18视频在线观看| 自拍偷自拍亚洲精品播放| 337p粉嫩大胆噜噜噜鲁| 国产日本欧美在线| 男女视频在线观看免费| 亚洲精品成a人| 日韩中文字幕免费在线| 国产一区调教| 不卡av在线播放| 免费在线观看av的网站| 99这里只有精品| 色撸撸在线观看| 日韩精品一区二区三区av| 亚洲国产精品高清久久久| 亚洲精品卡一卡二| 秋霞电影一区二区| 乱色588欧美| 国产盗摄精品一区二区酒店| 欧美日韩电影一区| 国产美女永久免费无遮挡| 国产日韩欧美三级| 国产二区一区| 污视频在线免费观看网站| 欧美人成免费网站| 影音先锋男人在线| 久久精品91| 欧美一区二区三区四区五区六区| 色偷偷色偷偷色偷偷在线视频| 欧美tk—视频vk| 免费一级片在线观看| 国产一区二区导航在线播放| 中文字幕一区二区三区在线乱码 | 亚洲综合网在线观看| 激情欧美亚洲| 国产精品一区二区三区精品| 国产一线二线在线观看| 日韩精品中午字幕| 欧美成人免费看| 国产成人av一区二区三区在线| mm131午夜| 亚洲综合网狠久久| 欧美激情网友自拍| 开心激情综合网| 亚洲成人在线网站| 在线观看国产三级| 久久精品男女| 日韩久久精品一区二区三区| 日韩经典一区| 久久精品中文字幕| 午夜精品一二三区| 亚洲成人免费观看| 97人妻精品一区二区免费| 日韩激情av在线| 亚洲福利av| 欧美日韩黄网站| 久久久影视精品| 日韩av免费观影| 欧美午夜精品一区| 日韩a级片在线观看| 成人午夜免费av| 日韩欧美亚洲天堂| 国产免费久久| 成人久久一区二区| 久久99亚洲网美利坚合众国| 精品视频偷偷看在线观看| 亚洲毛片一区二区三区| 国产精品丝袜91| 野花视频免费在线观看| 国产精品呻吟| 在线观看国产一区| 在线精品视频一区| 欧亚精品中文字幕| 国产区在线观看| 亚洲第一精品福利| 波多野结衣绝顶大高潮| 亚洲精品免费一二三区| 第四色在线视频| 秋霞电影网一区二区| 99在线观看视频免费| 羞羞答答一区二区| 91美女片黄在线观| 周于希免费高清在线观看| 日韩一二三在线视频播| 人妻视频一区二区三区| 欧美在线不卡一区| 国产一级在线观看视频| 国产日产欧美一区二区三区| 青娱乐国产精品视频| 六月丁香综合| 波多野结衣 作品| 欧美精品一区二区三区中文字幕| 99久久精品久久久久久ai换脸| 二吊插入一穴一区二区| 色综合久久悠悠| 岛国大片在线观看| 欧美成人vps| 中文字幕在线观看你懂的| 婷婷久久综合九色国产成人| 国精品人伦一区二区三区蜜桃| aaa亚洲精品一二三区| www,av在线| 日韩一区精品视频| 国产深夜男女无套内射| 欧美永久精品| 一区二区三区四区五区视频| 网友自拍一区| 国产经典一区二区三区| 亚洲欧美在线综合| 国产成人综合精品| 国模私拍一区二区国模曼安| 欧美成年人网站| 日本高清视频在线播放| 国产亚洲精品va在线观看| 四季av日韩精品一区| 日韩免费视频一区二区| 亚洲天堂网视频| 在线精品视频免费播放| 亚洲久久在线观看| 性欧美疯狂xxxxbbbb| 麻豆一区产品精品蜜桃的特点| 国产精品美女久久久久久| 精品国产av无码| 91丨九色丨国产丨porny| 911亚洲精选| 成人午夜激情影院| 一区二区三区四区影院| 国产激情精品久久久第一区二区 | jizz国产在线观看| 婷婷丁香久久五月婷婷| www.av视频在线观看| 一区二区三区国产豹纹内裤在线| 国产精品免费人成网站酒店| 国产精品高潮久久久久无| 国产精品久久久久久成人| 久久九九全国免费| 成人激情五月天| 中文一区在线播放| 日韩一卡二卡在线观看| 国产精品二三区| 久久久久久久久久久久久女过产乱| 国产精品国产馆在线真实露脸| 纪美影视在线观看电视版使用方法| 久久精品一级爱片| 日韩视频在线观看免费视频| 中文字幕二三区不卡| 精品视频第一页| 中文字幕日韩一区| 国产少妇在线观看| 亚洲精品大片www| 黄色小说在线观看视频| 婷婷丁香久久五月婷婷| 国产精品免费精品一区| 欧美午夜一区二区三区免费大片| 在线视频播放大全| 日韩一二三区视频| 日韩一级片免费观看| 日韩精品在线观看一区| 国产中文在线视频| 色哟哟入口国产精品| 在线看女人毛片| 97碰碰碰免费色视频| 性欧美gay| 成人免费激情视频| 丁香一区二区| 色婷婷精品国产一区二区三区| 98精品久久久久久久| 欧美国产视频一区| 亚洲一区二区三区高清| 视频二区在线播放| 国产成人aaa| 一色道久久88加勒比一| 日韩毛片视频在线看| www.日本精品| 欧美色欧美亚洲另类二区| 国产ts人妖调教重口男| 日韩精品在线观| 国产剧情在线| 欧美做爰性生交视频| 精品欧美视频| 欧美日产一区二区三区在线观看| 久久在线电影| 黄色网页免费在线观看| 久久精品国产色蜜蜜麻豆| 污污免费在线观看| 欧美激情在线观看视频免费| 91视频免费在线看| 欧美综合在线视频| 亚洲精品国产精| 在线看日韩欧美| 91美女主播在线视频| 成人高h视频在线| 偷拍视屏一区| 国产乱人伦精品一区二区三区| 久久婷婷久久| 97中文字幕在线观看| 国产精品网站在线观看| 日本少妇在线观看| 3atv在线一区二区三区| 你懂的视频在线免费| 色综合久久中文字幕综合网小说| 日韩影片中文字幕| 国产精品青青草| 亚洲精品99| 91精品无人成人www| 97国产一区二区| 国产一级av毛片| 91精品国产品国语在线不卡| 黄色在线小视频| 51久久精品夜色国产麻豆| 精品一区二区三区中文字幕视频| 日韩av免费电影| 免费永久网站黄欧美| 欧美日韩人妻精品一区在线| 亚洲美女偷拍久久| 亚洲网站免费观看| 国产亚洲视频在线观看| 二区三区不卡| 久久av免费观看| 极品av少妇一区二区| 秋霞午夜鲁丝一区二区| 国产精品国产三级国产aⅴ原创| www.欧美色| 亚洲男人7777| 亚洲美女久久精品| 精品无码久久久久国产| 亚洲人成久久| 亚洲图片欧美另类| 亚洲午夜av在线| 欧美视频xxx| 久久久久久97| 国产精品自在| 中文字幕无码精品亚洲资源网久久| 国产酒店精品激情| 欧美日韩中文字幕在线观看| 欧美一区二区三区四区五区 | 色婷婷一区二区三区av免费看| 国产偷国产偷亚洲高清人白洁| 一级成人黄色片| 国产亚洲一区二区精品| 日韩欧美少妇| 一区二区在线高清视频| 国产真实乱子伦精品视频| 四虎影院中文字幕| 欧美成人乱码一区二区三区| 色呦呦视频在线观看| 国产精品我不卡| 久久福利精品| 人妻一区二区视频| 欧美色倩网站大全免费| 超碰人人在线| 国产精品久久久一区二区三区| 日韩视频精品在线观看| 91精品国产自产| 欧美网站大全在线观看| 日本免费在线观看| 91精品天堂| 在线一区欧美| 国产精品av久久久久久无| 制服.丝袜.亚洲.中文.综合| 羞羞网站在线免费观看| 国产日韩欧美二区| 久久一区二区三区四区五区| 亚洲不卡的av| 欧美成人性战久久| 97成人资源| 亚洲综合五月天| 粉嫩欧美一区二区三区高清影视| 可以免费看的av毛片| 中日韩美女免费视频网址在线观看| 巨大黑人极品videos精品| 天天做天天躁天天躁| 久久亚洲二区三区| 国产又粗又猛视频免费| 欧美国产精品va在线观看| 色橹橹欧美在线观看视频高清| 乱子伦视频在线看| 亚洲欧洲99久久| 天堂√在线中文官网在线| 国产美女久久久| 亚洲经典视频在线观看| 亚洲精品国产精品国自| 欧美mv日韩mv| 伦一区二区三区中文字幕v亚洲| 性高湖久久久久久久久aaaaa| 久久亚洲一级片| av男人天堂av| 国产精品久久久av久久久| 欧美三区不卡| 亚洲国产精品一区二区久久hs| 亚洲第一男人av|