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

Sentry 開發者貢獻指南- SDK 開發(會話)

開發 前端
對于基本的健康跟蹤,Sentry 接受包含會話更新事件的 envelopes。這些會話更新事件可用于通知 Sentry 有關 release 和 project 相關 project 健康狀況的信息。

對于基本的健康跟蹤,Sentry 接受包含會話更新事件的 envelopes。這些會話更新事件可用于通知 Sentry 有關 release 和 project 相關 project 健康狀況的信息。

注意: 在本地使用 session 時,請確保使用必要的環境變量更新配置文件 ~/.sentry/sentry.config.py:

SENTRY_EVENTSTREAM = 'sentry.eventstream.kafka.KafkaEventStream'

基本操作

  • Session 完全是 client 驅動的。client 確定 session 何時開始、結束或轉變為不健康狀態。
    • client 可以明確結束 session 以記錄時間或退出條件(崩潰等)。
    • 如果需要,client 應在重新啟動時明確結束 session,但 session 不結束是可以接受的。
  • Session 通過保存整個 session state 的會話更改事件進行更新。
  • Session 從發送的事件中更新。最近的事件保存整個 session state。發送到服務器的初始 session event 被顯式標記。
  • Session 更新在實現時不得更改屬性或數據損壞。請參閱下面關于屬性不變性的部分。
  • Session 只能更新 5 天。如果一個會話在 5 天內沒有收到第二個事件,則永遠是好的。
  • Session 不一定要啟動才崩潰。僅僅報告一次崩潰就足夠了。

服務器模型

目前,Sentry 的 session system 已針對易于擴展性和操作成本進行了優化。這意味著該協議非常適合實現這一目標。其中一些優化顯示在協議中,client 準確地遵循協議以避免在服務器上創建 bad data 非常重要。

服務器每小時都有預先物化(pre-materialized)的 session 數據。當會話更新事件到來時,服務器將立即將數據具體化(materialize)到正確的存儲桶中。這意味著該協議僅限于“附加”。這也意味著 client 需要在其一側存儲會話的整個狀態。

會話更新負載

一個 session update 是名為 session 的 envelope 中的一項。它包含一個大致如下所示的 JSON 負載:

  1.   "sid""7c7b6585-f901-4351-bf8d-02711b721929"
  2.   "did""optional distinct user id"
  3.   "init"true
  4.   "started""2020-02-07T14:16:00Z"
  5.   "duration": 60, 
  6.   "status""exited"
  7.   "attrs": { 
  8.     "release""my-project-name@1.0.0"
  9.     "environment""environment name"
  10.     "ip_address""optional user ip address for filtering"
  11.     "user_agent""optional user agent for filtering" 
  12.   } 

請注意,這必須包含在 envelope 中。所以完整的事件看起來像這樣:

  1. {} 
  2. {"type":"session"
  3. {"sid":"..."

存在以下字段:

sid

  • String, optional. 會話 ID (唯一的并且由客戶端生成的)。

如果初始會話狀態為 exited,則允許客戶端跳過它。

did

  • String, optional. Distinct ID. 應該是設備或用戶 ID。

系統會在存儲此 ID 之前自動對其進行哈希處理。

seq

  • Number, optional. 一個邏輯時鐘。默認為攝取期間的當前 UNIX 時間戳(以毫秒為單位)。

值 0 是保留的,因為 init 設置為 true 的會話將自動將 seq 強制為 0。

timestamp

  • String, optional. 會話更改事件發生時的時間戳。

必須是 ISO 日期時間字符串。如果未發送,服務器將采用當前的 UTC 時間戳。在數據模型中,這稱為 received。

started

  • String, required. 會話開始時的時間戳。

必須是 ISO 日期時間字符串。

init

  • Boolean, optional, 默認為 false。

如果將其設置為 true,則表示這是會話的第一個事件。這讓服務器優化會話計數,因為不需要重復數據刪除(客戶端無論如何都是權威的)。在內部設置此標志時,處理時 seq 更改為0。

duration

  • Number, optional. 一個可選字段,可以在接收到事件時傳輸會話持續時間。這可以由客戶端控制,例如,可以減去非活動時間(以浮點數表示的秒數)。

status

  • String, optional, 默認是ok。會話的當前狀態。

一個 session 只能有效地處于兩種狀態:ok,這意味著會話處于活動狀態或終止狀態之一。當會話從 ok 移開時,它不能再被更新。

  • ok: 會話當前正在進行中,但運行良好。這可以是會話的終止狀態。
  • exited: 會話正常終止。
  • crashed: 會話因崩潰而終止。
  • abnormal: 會話遇到非崩潰相關的異常退出。

errors

  • _Number, optional, 默認為 0 _。此會話正在進行時遇到的錯誤的運行計數器。

重要的是,當會話進入 crashed 時,此計數器也會增加。(例如:crash 本身也始終是一個 error)。如果未設置或為 0,攝取應強制 errors 為 1。

attrs

  • Object, required 除了 release 之外的所有 key 都是可選的。具有以下屬性的對象:
    • release: Sentry Release ID (release),建議格式為 my-project-name@1.0.0。
    • environment: Sentry 環境 (environment)。
    • ip_address: 要考慮的主要 IP 地址。這通常是用戶的 IP。此數據不會持久化,而是用于過濾。如果未設置,則自動填寫 IP。
    • user_agent: 要考慮的 user agent。這通常是導致會話的用戶的用戶代理。此數據不會持久化,而是用于過濾。

Session Aggregates Payload(會話聚合有效負載)

特別是對于 request-mode(請求模式) 會話(見下文),通常每秒有數千個請求和會話。

假設這些 session 將是短時間的,并且不希望跟蹤它們的持續時間, 那么在它們被發送到 Sentry 之前,可以在 SDK 端將這些 session 聚合在一起。

SDK 應聚合關閉的 session,并按 started 時間、distinct_id 和 attrs 對它們進行分組。這些組將作為 sessions envelope 項發送。它包含一個大致如下所示的 JSON 負載:

  1.   "aggregates": [ 
  2.     { 
  3.       "started""2020-02-07T14:16:00Z"
  4.       "exited": 123 
  5.     }, 
  6.     { 
  7.       "started""2020-02-07T14:16:00Z"
  8.       "did""optional distinct user id"
  9.       "exited": 12, 
  10.       "errored": 3 
  11.     } 
  12.   ], 
  13.   "attrs": { 
  14.     "release""my-project-name@1.0.0"
  15.     "environment""development" 
  16.   } 

請注意,這必須包含在 envelope 中。所以完整的 envelope 看起來像這樣:

  1. {} 
  2. {"type""sessions"
  3. {"aggregates": [...], "attrs": {...}} 

aggregates

  • Array, required. 按 started 時間戳和 distinct id (did) 分組的聚合數組。
    • started: Required. 組的時間戳,四舍五入到分鐘。必須是 ISO 日期時間字符串。
    • did: Optional. 組的 distinct user id。
    • exited: Optional. 狀態為 "exited" 且沒有任何錯誤的 session 數。
    • abnormal: Optional. 狀態為 "abnormal" 的 session 數。
    • crashed: Optional. 狀態為 "crashed" 的 session 數。
    • errored: Optional. 狀態為 "exited" 且 errors 計數不為零的 session 數。

attrs

  • Object, required. 見上文。

崩潰與會話

會話(Session)和錯誤(error)事件是 Sentry 中兩個不同的系統。 Session 更新可以在不發送錯誤事件的情況下完成,同樣,可以在沒有 session 更新的情況下發送 error。

這使 client 可以完全控制應如何執行 session 更新。激勵因素是服務器可以在某些情況下自由拒絕 error 事件,在這種情況下記錄 session 信息仍然很有趣。例如,如果項目對 error 事件應用了 rate limit,則它們的 session 數據仍然可以繞過此 rate limit 路由到項目。

但是,強烈建議在與 crash 事件相同的 envelope 中發送 session 更新,以防 session 轉換到 crashed 狀態。如果網絡不可靠,這將確保事件同時到達系統。

重要客戶端行為

這些是 client 必須遵守的重要規則:

屬性不可變性

當前不允許 session 更改后續更新中的任何屬性,包括 did、started 或其他屬性。唯一允許更改的屬性是 session 狀態、持續時間或錯誤計數。如果一開始不知道 user,則應該延遲 session 開始,或者一旦知道 user 就應該重新啟動 session。

會話計數/初始化

發送到系統的初始 session 更新必須將 init 設置為 true。這是必要的,因為服務器當前不會將總 session 計數作為優化進行重復數據刪除。如果初始的 init: true flag 丟失,則 Sentry 可能無法正確攝取 session。

終止會話狀態

Session 可以存在兩種狀態:進行中(progress)或終止(terminated)。終止的 session 不得接收進一步的更新。退出(exited)、崩潰(crashed)和異常(abnormal)都是終止狀態。當 session 達到此狀態時,client 不得再報告任何 session 更新或啟動新 session。

鼓勵 SDK 區分結束 session 的不同方式:

  • exited: 這意味著 session 干凈地結束了。從成功報告的角度來看,這與保持 ok 的 session 沒有任何不同。但是,只有以 exited 結尾的 session 才會被考慮用于 session 持續時間。即使發生 error,session 也可以進入 exited 狀態。
  • crashed: 在以下情況下,session 應報告為 crashed:
    • 發生未處理的錯誤(unhandled error)并且 session 自然結束(例如:HTTP 請求結束)
    • 應用程序完全崩潰(崩潰到桌面,終止)
    • 用戶反饋(feedback)對話框顯示給用戶。在此之后,SDK 必須啟動一個新 session,就像它完全崩潰一樣。
  • abnormal: 如果可以的話,鼓勵 SDK 始終將 session 轉換為 exited 或 crashed。對于能夠始終結束 session 的 SDK,如果無法檢測到應用程序正確關閉, 則應以 abnormal 結束 session。異常 session 示例:

異常的 session 結束通常會在應用程序重新啟動時被記錄下來。

  • 計算機被關閉/斷電
  • 用戶通過 kill -9 或任務管理器強制關閉應用程序

崩潰、異常與錯誤

Session 應該在遇到未處理的錯誤(例如應用程序完全崩潰)時轉換為 crashed。對于無法完全崩潰的應用程序(例如網站),如果用戶遇到錯誤對話框,則轉換到 crashed 狀態是可以接受的。對于我們為每個傳入請求創建 session 的 server 環境,crashed 基本上就像狀態代碼 500 內部服務器錯誤。因此,如果在請求期間發生未處理的錯誤(unhandled error),會話應該 crashed。

Abnormal 是其命運未知的 session。例如,對于桌面應用程序,如果 session 被存儲但未觀察到應用程序退出但也沒有崩潰, 則將 session 轉換為 abnormal 是有意義的。在這些情況下,用戶通過任務管理器強制關閉應用程序、機器斷電或其他情況。可以通過將 session 持久保存到磁盤來存儲 session。這個保存的文件可以在應用程序重啟時檢測到,以關閉 abnormal 的會話。

錯誤的 session 由大于零的 errors 計數器確定。 client 需要對被視為 error 的事件進行計數,并將計數與 session 更新一起發送。正常且錯誤計數大于零的 session 被視為錯誤 session。所有崩潰和異常 session 也始終被視為錯誤,但會從最終錯誤 session 計數中減去。

退出

Session 可以轉換為 exited,這與 ok 狀態完全相同, 但有一個區別:轉換為 exited 的 session 的 session 持續時間是平均的。這讓 Sentry 向您顯示非崩潰 session 的持續時間。

警報

當 issue 影響到指定百分比的會話時觸發警報。創建新的 issue alert 并選擇 "When" 條件 An issue affects more than {X} percent of sessions(問題影響超過 {X}% 的會話)。在 Issue Alert Configuration 文檔中查看更多問題警報選項。

  • https://docs.sentry.io/product/alerts/alert-types/#issue-alerts
  • https://docs.sentry.io/product/alerts/create-alerts/issue-alert-config/

SDK 注意事項

一般來說,SDK 可以使用兩種獨立的健康報告模式。一個是非常短暫的 session,另一個是用戶參與的 session。

短時會話 (server-mode / request-mode)

這些 session 大致對應于服務器設置中的 HTTP 請求或 RPC 調用。

  • 海量請求, 通常每個請求一個會話
  • Session 數通常高于 Sentry 事件數
  • Session 附加到單個 hub/concurrency unit
  • 計時信息通常是無用的,因為 session 時間以毫秒為單位

用戶參與的會話 (user-mode / application-mode)

這些 session 更對應于實際的用戶 session 或應用程序運行。這就是您在 Web 瀏覽器、移動世界、命令行應用程序或類似應用程序中會看到的內容。

  • 通常只是從應用程序開始到退出的單個 session
  • 如果適用,一旦應用程序置于后臺超過 30 秒(移動 SDK),session 就可以結束
  • session 次數通常少于 Sentry 事件
  • session 跨越多個 hub/thread
  • session 持續時間通常以分鐘為單位,計時信息很有用

從 API 的角度來看,這兩種情況看起來很相似,但對于 SDK 的建議不同。

選擇會話模式

雖然理論上可以在單個應用程序中使用兩種會話模式,但建議 SDK 默認使用最適合語言生態系統主要用例的單一模式。這類似于某些 SDK 支持的全局 Hub 模式,并且可以以相同的方式使用。

當 SDK 配置為使用 user-mode 會話或全局 Hub 模式時,應在應用程序啟動時啟動單個會話,并應在應用程序的運行時持續存在。根據 SDK 內部結構,此單個 session 可以在所有應用程序線程和線程本地 Hub 之間共享。

使用 server-mode 會話時,不會啟動應用程序范圍的 session, 并且由集成或用戶在收到請求時啟動 session 并在返回響應時結束 session。

統一 API 的含義

SDK 應該遵循的統一 API 定義了 Hub、Scope 和 Client 的概念。

從概念上講,session 是 Hub 的關注點,與 scope 不同,session 不應嵌套。當任何一種事件發生時,應該只有一個明確的 session 來跟蹤錯誤計數。

在考慮通過 SDK 的事件流時,從靜態 capture_event 函數,通過線程本地 Hub,進入 Client::capture_event(event, scope) 方法;根據 SDK 的內部實現細節,將 session 附加到 Scope 可能是有意義的, 這將使 Client 可以將 event 和 session 更新捆綁到單個 envelope 中以發送到 Sentry。

會話更新以及何時向上游發送更新

對于所有 SDK,只要在調用 apply_to_scope 的類似位置捕獲數據以增加 error 計數, 或根據 distinct ID / user ID 更新 session,將自動更新當前 session。

SDK 通常應旨在減少向上游發送的 envelope 數量。

跟蹤大量會話的 server-mode SDK 應考慮使用定期 session 刷新器(每 60 秒), 將會話預聚合到單個 session_aggregates envelope 項中。

User-Mode SDK 可能會選擇在同一 envelope 中發送 session 更新以及捕獲的事件。關閉 session 的最終 session 更新可以類似于 Server-Mode session 進行批處理。

在任何一種情況下,必須為 session 的第一次傳輸正確設置 init 標志, 并且 session 元數據(例如 distinct ID)在初始傳輸后必須是不可變的。

會話的預聚合

如果 SDK 配置為使用 server-mode session,則應在將 session 計數發送到 Sentry 之前對其進行分組和預聚合。每當 session 關閉(轉換到 terminal 狀態),并且之前沒有向上游發送(其 init 標志為 true)時,它就有資格進行聚合,其執行方式如下:

  • Session 的 started 時間戳應四舍五入到分鐘。
  • 然后必須將 Session 聚合到由該舍入時間戳標識的存儲 bucket 中,以及會話的 distinct id (did)。
  • 在適當的 bucket 中,根據 session 狀態增加 session 計數。與單個 session 更新相反,"errored" 狀態用于標記具有 "exited" 狀態和非零 errors 計數的會話。

公開 API

公開的最基本的 API 位于 hub 級別,可讓您啟動和停止 session 記錄:

API:

Hub.start_session()

在當前 scope 上存儲一個 session 并開始跟蹤它。這通常會將一個全新的 session 附加到 scope,并隱式地結束任何已經存在的 session。

Hub.end_session()

結束 session,設置適當的 status 和 duration,并將其加入隊列以發送到 Sentry。

Hub.start_auto_session_tracking() / Hub.stop_auto_session_tracking()

停止并重新激活自動 session 跟蹤。

初始化選項:

auto_session_tracking

這通過集成 啟用/禁用 自動 session 跟蹤。

SDK 實現指南

在開始在 SDK 中實現此功能之前,請與團隊聯系。

  • https://github.com/getsentry/develop/pull/323

我們通過從 SDK 發送 session 有效負載來跟蹤 Sentry 中每個項目 release 的健康狀況。 Session 有效負載提供諸如 session 持續時間以及是否存在錯誤/崩潰等數據。

SDK 以兩種模式之一跟蹤 session:

  • 單個 Session
  • Session 聚合

單個 session 是一般情況,非常適合通常只涉及單個用戶的(相對短暫的)應用程序。例子:

  • 命令行實用程序,如 craft;craft 子命令的每次執行都會向 Sentry 報告一個 session
  • 用戶與 mobile app 交互
  • 用戶使用他們最喜歡的瀏覽器加載網站

當發送單個 session 不受歡迎或不切實際時,將使用 session 聚合。為了限制資源使用(即內存和網絡),SDK 會跟蹤有關最近發生的一批會話的摘要信息, 實際上不必處理代表構成聚合的各個 session 的 session 對象。此模式適用于運行任意長時間并為潛在的多個用戶處理更大吞吐量的應用程序,例如 Web Server、后臺 Job Worker 等。請注意,對于這些類型的應用程序,session 的更好定義與執行匹配單個 HTTP 請求或任務,而不是整個應用程序進程的單個執行。

在任何一種情況下,SDK 都應默認創建和報告 session,根據應用程序類型選擇單獨報告或作為聚合報告。

如果 SDK 可以檢測到 session 聚合更好地為應用程序提供服務,則它不得報告應用程序范圍的 session。應用程序范圍的 session 可能仍會在 SDK 初始化期間創建,但必須中止并且永遠不會發送到 Sentry。例如,在 Node.js SDK 中,如果應用程序使用提供的 requestHandler 集成,我們可以檢測到它可能是一個 web server。

單個會話功能

配置

  • 全局/靜態 API 默認開啟;

如果用戶不想跟蹤 session,他們應該能夠禁用 session。

報告 session 和確定 Sentry 中項目的 Release Health 的先決條件,例如 release 應由 SDK 自動檢測,例如通過查找 env 變量。

(也許,需要討論)如果我的先決條件不能被檢測到(例如,沒有好的方法來確定 release 版本), 那么我們設置一些默認值,以便我們總是可以默認報告 session (取決于討論,這可能不會是 SDK 代碼的更改,但在 Relay 中,基本上刪除了 session 有效負載中的硬要求)。

會話的生命周期

默認情況下,會話應該只為由 Sentry.init 初始化的全局 hub/client 啟用,并默認為任何其他手動創建的 client 禁用。 Session 在 SDK 初始化時開始(理想情況下,當默認 client 綁定到全局 hub 時)并在以下情況之一發生時結束:顯式調用 Hub.endSession() 方法;或程序無錯誤終止;或程序以未處理的異常終止;或程序以未處理的 promise rejection 而終止。

必須注意永遠不要嘗試為已經結束的 session 向 Sentry 發送新的 session 負載。例如,如果用戶使用 Hub.endSession() 手動結束 session,則程序終止時不應有任何新的 session 更新。

會話屬性和可變性

向 Sentry 發送會話

Session 最初在一定的(最初是硬編碼的,配置越少越好)延遲(大約 1 到 30 秒 TBD)后發送, 然后在程序終止時更新持續時間、最終狀態和錯誤計數。請注意,作為一種優化,short lived 程序不會向 Relay 發送 2 個 session 請求, 而只會向 Relay 發送最后一個帶有狀態和持續時間的請求。

會話聚合功能

配置

默認情況下應啟用 session,session 在 web server 收到請求后立即啟動,并在響應完全發回后立即結束。

會話的生命周期

 

Session 從不被跟蹤或單獨發送,相反,它們被聚合,聚合每 30 秒發送一次,最后一次當 web server 終止。作為對上述點的實現提示,當 "Client" 關閉或刷新時,相關聯的 "Session Flusher" 也應被刷新并在傳輸被刷新/關閉之前提交當前聚合。確保這對于 Serverless 來說是合理的 — 我們不會使用 "request mode" 和 SessionFlusher,因為我們不能在 request-response 流之外進行任何工作。提供一種與現有 Node 框架(Express、Next.js、Koa)集成的簡單方法。

 

責任編輯:武曉燕 來源: 黑客下午茶
相關推薦

2021-12-25 22:31:55

Sentry 監控SDK 開發 性能監控

2022-01-21 21:33:03

開發JavaScript應用

2021-12-31 18:35:40

監控Sentry開發

2022-01-03 22:59:30

開發SDK數據

2022-01-02 06:59:43

SentrySDK 開發客戶端報告

2022-01-15 23:33:47

SentryPyCharm配置

2022-01-18 23:26:45

開發

2022-01-11 20:42:54

開發Sentry標志

2022-01-17 19:34:43

SentryWeb APISentry API

2022-01-19 19:49:53

Sentry瀏覽器SDK

2021-12-15 20:06:48

ReactJSSentry開發者

2022-01-16 22:16:59

數據庫Sentry開發者

2022-01-13 20:13:31

元宇宙搜索引擎

2021-12-16 20:12:37

后端開發Sentry

2022-01-20 19:49:10

Sentry開發Scope

2021-12-17 19:15:51

前端蟲洞狀態

2015-07-22 16:08:46

OpenStack開源貢獻代碼

2018-03-27 23:25:40

Paddle

2024-02-01 09:37:42

Kubernetes服務網格? 命令

2019-08-16 10:55:37

開發者技能AI
點贊
收藏

51CTO技術棧公眾號

蜜桃狠狠色伊人亚洲综合网站| 久久久久久com| 日本中文字幕影院| 18在线观看的| 久久尤物电影视频在线观看| 国产美女久久久| 久久精品无码人妻| 成人免费av| 亚洲精品在线三区| 污污动漫在线观看| av手机在线观看| 国产精品的网站| 久久国产精品亚洲va麻豆| 一本一道人人妻人人妻αv | 三区精品视频观看| 国产黄色大片网站| 日韩精品午夜视频| 九九九久久久久久| 69xxx免费| 日韩高清电影免费| 日韩免费视频线观看| 人妻丰满熟妇av无码区app| 欧美xxxx性xxxxx高清| 国产女人18毛片水真多成人如厕 | 一区二区不卡在线视频 午夜欧美不卡在| 久久精品日产第一区二区三区乱码 | 精品免费国产二区三区| 婷婷免费在线观看| 亚洲插插视频| 无码av免费一区二区三区试看 | 日韩精品极品视频在线观看免费| 亚洲免费一级片| 国内精品在线播放| 国产精品天天狠天天看| 中文字幕在线观看视频免费| 日韩视频三区| 欧美激情精品久久久久久免费印度| 中文字幕在线观看免费高清| 卡一精品卡二卡三网站乱码 | 91精品国产综合久久久久久蜜臀| 无码免费一区二区三区| 一本色道久久综合亚洲精品不| 久久国产精品亚洲| 日韩在线视频免费看| 九九热精品视频在线观看| 亚洲国产91精品在线观看| 国内av免费观看| 豆花视频一区| 91精品国产综合久久久久久漫画| 手机免费av片| 婷婷久久免费视频| 欧美日韩精品系列| 国产主播中文字幕| 国产成人福利夜色影视| 欧美午夜不卡在线观看免费| 亚洲最大综合网| 国产第一精品| 欧美系列亚洲系列| 狠狠干狠狠操视频| 亚洲青青久久| 日韩一级片网站| 中文字幕18页| 久久中文资源| 日韩精品视频免费在线观看| 朝桐光av一区二区三区| 欧美美女在线观看| 国产亚洲一级高清| 午夜国产福利视频| 91精品动漫在线观看| 久久这里有精品视频| www.av视频| 亚洲精品1区2区| 欧美在线亚洲一区| 亚洲av无码乱码国产精品fc2| 日本aⅴ免费视频一区二区三区| 国产精品中文字幕在线| japanese国产| a亚洲天堂av| 日本在线免费观看一区| 色欧美激情视频在线| 亚洲激情欧美激情| 国产乱子伦农村叉叉叉| 成人激情综合| 日韩一区二区三区高清免费看看| 一级黄色片毛片| 久久93精品国产91久久综合| 日韩综合中文字幕| 久久久夜色精品| 玖玖在线精品| 亚洲free性xxxx护士白浆| 少妇喷水在线观看| 欧美国产一区二区| 久久久久福利视频| 欧美无毛视频| 日韩久久久精品| 新91视频在线观看| 亚洲理论电影网| 日本精品免费一区二区三区| 国产区精品在线| 久久婷婷综合激情| 蜜臀在线免费观看| 日本免费一区二区三区四区| 91精品国产综合久久精品麻豆| 国产成人精品无码片区在线| 999久久久免费精品国产| 久久免费在线观看| 伊人网视频在线| 波多野结衣中文字幕一区二区三区 | 日本一区二区三区在线播放| 国产乱叫456在线| 久久婷婷国产综合精品青草| 日本天堂免费a| 国产精成人品2018| 亚洲精品国产精品国自产在线 | 一区二区黄色片| 狠狠入ady亚洲精品经典电影| 国产精品日韩精品| 无码国产精品高潮久久99| 亚洲欧洲国产日本综合| 国产日韩一区二区在线观看| 伊人久久大香线蕉av超碰| 中文字幕亚洲综合久久筱田步美| 国产农村妇女aaaaa视频| 国产精品羞羞答答xxdd| 亚洲午夜久久久影院伊人| 日本在线啊啊| 欧美精品一区二区三区高清aⅴ| 中文字幕美女视频| 性娇小13――14欧美| 99中文字幕| h片在线播放| 欧美日韩国产一区| 精品欧美一区二区久久久| 黄色国产精品| 国产传媒一区二区| 国产福利在线播放麻豆| 欧美精品九九99久久| 一级黄色毛毛片| 日日摸夜夜添夜夜添国产精品| 精品一区二区国产| 都市激情国产精品| 亚洲成人黄色网| 91视频免费在线看| 国产精品综合一区二区三区| 中文字幕制服丝袜在线| 国外成人福利视频| 中文字幕精品av| 亚洲无码精品国产| 国产精品福利一区二区| 亚洲天堂网一区| 久久国产精品成人免费观看的软件| 日本精品视频在线播放| 毛片网站在线观看| 在线视频一区二区三区| 一级片久久久久| 免费精品视频在线| 中文字幕在线亚洲三区| avtt久久| 久久久久久久影院| 天堂在线视频观看| 欧美午夜精品久久久久久浪潮| 成人网站免费观看| 日韩精品亚洲一区| 亚洲一区尤物| 国产一区二区三区| 欧美激情第99页| 五月婷婷六月丁香| 在线观看一区二区精品视频| 综合 欧美 亚洲日本| 国内精品免费**视频| 国产自产在线视频| 杨幂一区二区三区免费看视频| 日本在线观看天堂男亚洲 | 日韩三级av| 国产aaa精品| 五月婷婷在线视频| 欧美一区二区在线不卡| 国产精品第56页| 久久久精品2019中文字幕之3| 中文字幕免费高清在线| 欧美日韩蜜桃| 日本精品一区二区| 在线观看欧美| 97久久精品人人澡人人爽缅北| 黄色av网站在线看| 日韩欧美在线综合网| av资源免费观看| 国产精品久久久久影视| 国产成人av片| 久久影院亚洲| 先锋影音男人资源| 亚洲欧美tv| 91在线免费看片| 日韩精品一区二区三区| 久久精品在线播放| 五月婷婷综合久久| 欧美久久久久久久久中文字幕| 国产真实乱人偷精品视频| 中文av一区二区| 亚洲中文字幕无码一区| 蜜桃传媒麻豆第一区在线观看| 日韩精品在线视频免费观看| 精品视频亚洲| 国产区二精品视| 国产精品一区二区三区四区在线观看| 欧洲精品在线视频| av免费网站在线观看| 国产亚洲精品美女| 免费观看黄色av| 91麻豆精品国产91久久久资源速度| 天天综合网入口| 亚洲免费在线视频一区 二区| 亚洲最大成人网站| 国产福利91精品一区二区三区| 国产成人av影视| 国产情侣一区| 日韩精品一区二区三区四| 精品久久一区| 蜜桃传媒视频麻豆一区| 国产suv精品一区二区四区视频| 国产在线播放不卡| 日韩高清在线| 国产成人精品一区二区三区| 超碰在线资源| 欧美黑人性猛交| av电影高清在线观看| 色噜噜久久综合伊人一本| 国产三级在线免费| 国产婷婷色综合av蜜臀av| 熟妇高潮一区二区三区| 日韩欧美aaaaaa| 国产精品高潮呻吟AV无码| 在线观看免费一区| 亚洲精品中文字幕乱码三区91| 亚洲综合色视频| 久久久久久久久久久久久久久久久 | 国产精品99久久久久久成人| 欧美激情在线观看视频免费| 我和岳m愉情xxxⅹ视频| 2023国产精品| 女人被狂躁c到高潮| jizz一区二区| 亚洲av网址在线| 久久亚洲影视婷婷| 欧美亚一区二区三区| 久久久综合九色合综国产精品| 亚洲最大免费视频| 91免费在线视频观看| jizz欧美性20| 久久精品一区二区三区不卡| 亚洲а∨天堂久久精品2021| 国产欧美日韩视频在线观看| 国产又粗又猛又爽又黄的视频四季| 亚洲国产精品黑人久久久| 亚欧精品视频一区二区三区| 中文字幕一区二区三| 午夜精品福利在线视频| 亚洲欧美日韩久久| 欧美精品久久久久性色| 亚洲国产综合在线| 全部毛片永久免费看| 色偷偷成人一区二区三区91 | 日本麻豆一区二区三区视频| www.亚洲高清| 国产福利不卡视频| 2一3sex性hd| 国产欧美一区二区精品性 | 天天操天天干天天综合网| 国产精品免费精品一区| 欧美性受xxxx黑人xyx| 国产精品视频久久久久久| 日韩一区和二区| 瑟瑟在线观看| 在线中文字幕日韩| 图片区小说区亚洲| 日韩av电影院| 成人自拍视频| 久久亚裔精品欧美| 成人免费在线播放| www.欧美黄色| 噜噜噜躁狠狠躁狠狠精品视频| jizz欧美性11| 成人av电影在线观看| 亚洲色成人网站www永久四虎 | 91麻豆精东视频| 特黄一区二区三区| 亚洲大片一区二区三区| 91porny九色| 日韩美女一区二区三区四区| 久久精品蜜桃| 久久91超碰青草是什么| 人人视频精品| 成人欧美一区二区三区视频xxx| 伊人久久综合影院| 超碰10000| 欧美bbbbb| 国产精品成人无码专区| 国产精品嫩草影院av蜜臀| 日本在线视频免费| 欧美精品久久久久久久多人混战| 亚洲av成人无码网天堂| 日韩一区二区av| 深夜成人影院| 国产精品伊人日日| 香蕉综合视频| 日韩有码免费视频| 国产91精品一区二区麻豆亚洲| 欧美人与禽zoz0善交| 精品日韩中文字幕| www.精品久久| 日韩亚洲国产中文字幕| 日韩电影av| 久久精品日产第一区二区三区乱码| 一区二区三区网站 | 日本一区二区不卡在线| 在线电影一区二区三区| 国产在线日本| 欧日韩不卡在线视频| 国产精品极品在线观看| 一本—道久久a久久精品蜜桃| 日韩精品欧美成人高清一区二区| 动漫美女无遮挡免费| 亚洲欧美日韩电影| 岳乳丰满一区二区三区| 亚洲天堂开心观看| 理论不卡电影大全神| 福利视频一区二区三区| 一区二区三区午夜视频| 亚洲精品手机在线观看| 国产欧美日韩亚州综合| 国产女主播喷水视频在线观看| 日韩国产欧美精品一区二区三区| a级片在线免费| 国产精品国产一区二区| 海角社区69精品视频| 国内精品国产三级国产aⅴ久| 日韩一区欧美一区| 91在线视频国产| 久久精品99国产精品酒店日本| 99精品国产九九国产精品| 亚洲一区bb| 久久国产视频网| 日韩三级在线观看视频| 欧美肥妇毛茸茸| 黄黄的网站在线观看| 97视频热人人精品| 欧美日韩国产精品一区二区亚洲| 国产精品日日摸夜夜爽| 香蕉加勒比综合久久| 手机av免费在线观看| 欧美亚洲国产日本| 少妇精品久久久| 99sesese| 日韩码欧中文字| 精品人妻午夜一区二区三区四区| 欧美日韩成人在线播放| 最新精品在线| 黄网站欧美内射| 国产欧美一区二区三区网站| 一区二区三区精彩视频| 美乳少妇欧美精品| 最新国产精品精品视频| 69堂免费视频| 日本一区二区三区在线观看| 一个人看的www日本高清视频| 久久久精品久久| 国产人妖ts一区二区| 久草精品在线播放| 国产精品久久午夜夜伦鲁鲁| av观看在线免费| 午夜精品99久久免费| 久久不卡国产精品一区二区| 黄色小视频免费网站| 亚洲国产日日夜夜| 黄上黄在线观看| 91最新国产视频| 亚洲欧美日韩在线观看a三区| jizz18女人高潮| 日韩精品资源二区在线| 久久r热视频| 最新黄色av网站| 91在线云播放| 国产免费黄色录像| 欧美一区二三区| 91精品电影| 蜜桃传媒一区二区亚洲av| 欧美高清激情brazzers| heyzo高清在线| 一区二区av| 91网站在线观看视频| 国产婷婷一区二区三区久久| 韩国视频理论视频久久| 四虎国产精品免费观看| 一边摸一边做爽的视频17国产| 欧美三区免费完整视频在线观看| 青春草在线视频| 亚洲 国产 日韩 综合一区| 成人精品亚洲人成在线| 在线免费av网| 奇米成人av国产一区二区三区|