久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

用 impeccable 給日志立規(guī)矩:從源頭提升可觀測(cè)性與代碼質(zhì)量

用 impeccable 給日志立規(guī)矩:從源頭提升可觀測(cè)性與代碼質(zhì)量 1. 為什么日志也需要一把尺子impeccable 的誕生背景與定位日志大概是所有后端項(xiàng)目里最“隨緣”的部分。功能代碼有單元測(cè)試、有 Code Review接口有契約測(cè)試但日志往往是誰(shuí)順手就怎么寫(xiě)。有人用字符串拼接有人塞一堆占位符有人把手機(jī)號(hào)、token 直接打出來(lái)還有人一個(gè)方法里連打十幾條 debug。平時(shí)看著沒(méi)毛病線上出了故障要查鏈路的時(shí)候才發(fā)現(xiàn)這些日志根本沒(méi)法用。我自己也踩過(guò)這種坑。某次線上接口超時(shí)排查時(shí)翻日志發(fā)現(xiàn)關(guān)鍵路徑上既有l(wèi)og.info(result: JSON.toJSONString(resp))這種寫(xiě)法也有l(wèi)og.info(requestId:{} userId:{}, requestId, userId)這種寫(xiě)法。同一個(gè)服務(wù)里格式五花八門想要 grep 某個(gè)關(guān)鍵字段還得先猜它是用冒號(hào)、等號(hào)還是橫線拼接的。更糟的是有同事把完整請(qǐng)求體打到了 info 級(jí)別日志系統(tǒng)直接爆量那天整個(gè)團(tuán)隊(duì)的排查效率低到令人崩潰。后來(lái)我們項(xiàng)目組內(nèi)部做了一個(gè)叫 impeccable 的輕量級(jí)日志規(guī)范檢查工具專門掃描代碼倉(cāng)庫(kù)里的日志語(yǔ)句按照預(yù)置或自定義的規(guī)則自動(dòng)判斷每條日志是否“得體”。它解決的是那個(gè)長(zhǎng)期被忽視的問(wèn)題日志質(zhì)量沒(méi)有自動(dòng)化手段來(lái)把關(guān)。無(wú)論你用的是哪門語(yǔ)言、哪種日志框架impeccable 都會(huì)用同一套標(biāo)準(zhǔn)去約束日志寫(xiě)法把原先靠人 review 才能發(fā)現(xiàn)的日志問(wèn)題提前到提交代碼的那一刻就攔住。這篇文章我會(huì)從工具定位、環(huán)境配置、規(guī)則體系、CI 接入、真實(shí)踩坑排錯(cuò)這幾個(gè)維度把我實(shí)際使用和參與維護(hù) impeccable 過(guò)程中的經(jīng)驗(yàn)完整記錄下來(lái)。對(duì)于正在被日志問(wèn)題困擾或者想在團(tuán)隊(duì)里推日志規(guī)范但不知道怎么落地的同學(xué)應(yīng)該會(huì)有些參考價(jià)值。1.1 一團(tuán)亂麻的日志到底坑了誰(shuí)很多團(tuán)隊(duì)對(duì)日志規(guī)范的第一反應(yīng)是“差不多就行”。但當(dāng)你真正需要依賴日志解決問(wèn)題的時(shí)候混亂日志的代價(jià)會(huì)立刻暴露出來(lái)。首先是檢索困難字段分隔符不統(tǒng)一想用 grep 把某筆訂單的所有日志撈出來(lái)幾乎不可能其次是信息缺失關(guān)鍵參數(shù)沒(méi)打全出了問(wèn)題還要去猜當(dāng)時(shí)的入?yún)⒃儆芯褪前踩[患敏感信息被打進(jìn)日志輕則違反內(nèi)部安全要求重則引發(fā)數(shù)據(jù)泄露最后是成本問(wèn)題無(wú)意義的日志鋪太多日志存儲(chǔ)和檢索的開(kāi)銷會(huì)被白白浪費(fèi)。舉個(gè)很簡(jiǎn)單的對(duì)比。下面兩種寫(xiě)法表達(dá)的是同一個(gè)意思// 混亂版本 log.info(user login success, user_id userId , login_time loginTime); // 規(guī)范版本 log.info(user login success, userId{}, loginTime{}, userId, loginTime);表面上看只是風(fēng)格差異但實(shí)際差別很大。規(guī)范版本用了占位符既避免了字符串拼接帶來(lái)的性能損耗又讓日志字段變成了結(jié)構(gòu)化的鍵值對(duì)。配合日志采集端做解析時(shí)規(guī)范版本可以直接提取 userId 和 loginTime 作為檢索字段混亂版本則只能靠正則硬摳還容易摳錯(cuò)。impeccable 想做的事情就是把這些“一眼能看出來(lái)不規(guī)范”的問(wèn)題自動(dòng)化。它不要求你靠自覺(jué)而是在你寫(xiě)代碼的那一刻就提醒你哪里不合格。這個(gè)定位聽(tīng)起來(lái)簡(jiǎn)單做起來(lái)卻牽扯到不少設(shè)計(jì)取舍后面我會(huì)詳細(xì)展開(kāi)。1.2 現(xiàn)成工具為什么管不住日志你可能會(huì)問(wèn)代碼風(fēng)格檢查工具不是已經(jīng)能管格式了嗎為什么還要專門做一個(gè)日志檢查工具因?yàn)槲覀冊(cè)囘^(guò)效果很差。普通的風(fēng)格檢查工具主要關(guān)注代碼格式、命名、復(fù)雜度它不會(huì)理解“日志語(yǔ)句里出現(xiàn)了字符串拼接”是性能問(wèn)題還是可讀性問(wèn)題。更別說(shuō)判斷“這條日志里有沒(méi)有敏感字段”“這個(gè)日志級(jí)別是否合理”“占位符數(shù)量和參數(shù)數(shù)量是否匹配”這類語(yǔ)義問(wèn)題了。日志檢查比風(fēng)格檢查難在幾個(gè)地方。第一日志語(yǔ)句往往散落在業(yè)務(wù)代碼里不像命名規(guī)范那樣有一個(gè)唯一的“名”第二不同語(yǔ)言的日志框架 API 差異很大有的用占位符{}有的用百分號(hào)%s還有的直接支持 lambda 延遲計(jì)算第三日志本身還涉及級(jí)別、上下文、敏感信息等多個(gè)維度這些很難用一套固定的語(yǔ)法規(guī)則覆蓋。所以我們?cè)缙诘姆桨甘菍?xiě)腳本、寫(xiě)正則在 CI 里跑一遍哪里有拼接、哪里沒(méi)有級(jí)別就報(bào)哪里。但腳本越寫(xiě)越多規(guī)則之間互相沖突維護(hù)成本很快就失控了。這也是我們決定把 impeccable 獨(dú)立出來(lái)做成一個(gè)真正可配置工具的原因。它想走的路子是像風(fēng)格檢查工具一樣提供規(guī)則框架但規(guī)則的具體定義交給使用者同時(shí)把日志場(chǎng)景里常見(jiàn)的檢查邏輯都內(nèi)置好。1.3 從內(nèi)部小工具到可復(fù)用的檢查器impeccable 最開(kāi)始只是我們倉(cāng)庫(kù)里一個(gè)幾十行的檢查腳本后來(lái)逐步演變成了一個(gè)命令行工具。它的定位非常明確不侵入業(yè)務(wù)代碼、不要求改日志框架、不需要 server 端部署只要在 CI 階段跑起來(lái)輸出一份報(bào)告就夠了。設(shè)計(jì)上我們定了幾個(gè)原則第一默認(rèn)規(guī)則要能直接覆蓋最常見(jiàn)的臟日志問(wèn)題讓用戶開(kāi)箱即用第二規(guī)則必須可配置、可關(guān)閉因?yàn)椴煌瑘F(tuán)隊(duì)的日志規(guī)范確實(shí)不一樣第三檢查結(jié)果要能做到增量輸出方便大倉(cāng)庫(kù)在 CI 里只做改動(dòng)文件的檢查。整篇文章后面的內(nèi)容都是圍繞這幾個(gè)原則展開(kāi)的。接下來(lái)先從環(huán)境準(zhǔn)備和最小配置說(shuō)起因?yàn)槲以诮o團(tuán)隊(duì)推廣它的過(guò)程中發(fā)現(xiàn)很多問(wèn)題其實(shí)在安裝和配置階段就已經(jīng)開(kāi)始了。2. 運(yùn)行環(huán)境與最小配置動(dòng)手前先規(guī)避這些坑2.1 安裝方式和版本選擇impeccable 本身是一個(gè)命令行工具不需要額外的守護(hù)進(jìn)程這讓我們?cè)?CI 上接入時(shí)省了很多事。安裝方式主要有兩種一種是直接用包管理器安裝發(fā)布版適合大多數(shù)使用者另一種是從源碼構(gòu)建適合需要二次開(kāi)發(fā)、自定義插件的場(chǎng)景。無(wú)論用哪種方式建議都在 CI 配置里鎖定版本號(hào)避免新版本發(fā)布后規(guī)則行為變化導(dǎo)致檢查結(jié)果漂移。實(shí)際執(zhí)行時(shí)工具會(huì)讀取配置文件然后掃描代碼目錄最終輸出檢查報(bào)告。以我們團(tuán)隊(duì)的實(shí)踐經(jīng)驗(yàn)首次接入時(shí)不要一上來(lái)就用最嚴(yán)格的全量規(guī)則否則存量代碼會(huì)產(chǎn)生海量違規(guī)開(kāi)發(fā)人員一看報(bào)告就失去信心了。正確的做法是先跑一遍默認(rèn)配置看看倉(cāng)庫(kù)里主要有哪些問(wèn)題類型再根據(jù)實(shí)際情況調(diào)整規(guī)則開(kāi)關(guān)和級(jí)別。我曾經(jīng)見(jiàn)過(guò)一個(gè)其他團(tuán)隊(duì)的同學(xué)把全部規(guī)則都開(kāi)到 error 級(jí)別結(jié)果整個(gè)倉(cāng)庫(kù)掃出來(lái)上千條違規(guī)CI 徹底沒(méi)法跑。后來(lái)我們建議他從 warning 級(jí)別開(kāi)始先只把增量代碼納入檢查存量問(wèn)題放到每周的整改任務(wù)里慢慢消化。這個(gè)節(jié)奏很重要后面我還會(huì)再提。2.2 一份夠用的初始配置impeccable 的配置文件采用常見(jiàn)的 YAML 格式核心結(jié)構(gòu)分為掃描范圍和規(guī)則列表兩部分。下面這份配置是我們項(xiàng)目里比較典型的一個(gè)初始版本可以直接拿來(lái)改著用scan: include: - src/**/*.py - src/**/*.java - src/**/*.js exclude: - **/test/** - **/third_party/** follow-symlinks: false incremental: true rules: no-string-concat: enabled: true level: error placeholder-args-matched: enabled: true level: error sensitive-info: enabled: true level: error extra-keywords: - idcard - password - secret log-level-required: enabled: true level: warning allowed-levels: - debug - info - warn - error這些字段的含義很直接include指定掃描哪些文件exclude排除掉測(cè)試代碼和第三方目錄follow-symlinks控制是否追蹤符號(hào)鏈接incremental表示是否只檢查改動(dòng)文件。規(guī)則部分每個(gè)規(guī)則有獨(dú)立的開(kāi)關(guān)和錯(cuò)誤級(jí)別。no-string-concat就是檢查日志里的字符串拼接問(wèn)題placeholder-args-matched檢查占位符和參數(shù)數(shù)量是否一致sensitive-info負(fù)責(zé)掃描敏感關(guān)鍵字log-level-required檢查日志是否顯式指定了級(jí)別。這里我想多說(shuō)一句為什么incremental要默認(rèn)打開(kāi)。大倉(cāng)庫(kù)全量掃描一次可能要好幾分鐘而 CI 里每次提交通常只改了幾十個(gè)文件。增量模式通過(guò)計(jì)算文件哈希只掃描發(fā)生變化的文件讓檢查時(shí)間降到秒級(jí)。要注意的是增量模式依賴 git 工作區(qū)的狀態(tài)所以它只適合在 git 倉(cāng)庫(kù)內(nèi)使用打包成 tar 的源碼目錄是跑不了增量檢查的。2.3 掃描范圍與排除規(guī)則的正確寫(xiě)法掃描范圍這塊比很多人想象中更容易出錯(cuò)。最常見(jiàn)的問(wèn)題是把構(gòu)建產(chǎn)物目錄也包含進(jìn)去比如target、dist、node_modules這類目錄里往往有大量生成代碼甚至包含第三方依賴的源碼掃進(jìn)去只會(huì)產(chǎn)生一堆無(wú)意義的報(bào)錯(cuò)。另一個(gè)問(wèn)題是 glob 寫(xiě)法不對(duì)導(dǎo)致規(guī)則匹配不到任何文件工具靜默通過(guò)給人一種“項(xiàng)目很干凈”的錯(cuò)覺(jué)。我用一個(gè)真實(shí)案例說(shuō)明一下。項(xiàng)目組有位同事配置的是scan: include: - src/*.java結(jié)果工具運(yùn)行了掃描耗時(shí) 0 秒報(bào)告為空他還以為項(xiàng)目日志質(zhì)量特別好。后來(lái)我們排查才發(fā)現(xiàn)src/*.java只匹配 src 目錄下直接存放的 Java 文件并沒(méi)有匹配src/main/java/...下的深層文件。正確的寫(xiě)法應(yīng)該是scan: include: - src/**/*.java在配置掃描范圍時(shí)建議寫(xiě)完配置后先加一條臨時(shí)的“全文件匹配”規(guī)則比如用log-level-required去跑一個(gè)已知有問(wèn)題的目錄確認(rèn)工具真的能發(fā)現(xiàn)違規(guī)再繼續(xù)調(diào)其他規(guī)則。這樣可以避免“配置脫靶”遲遲沒(méi)被發(fā)現(xiàn)。3. 規(guī)則體系拆解impeccable 如何判定一條日志是否得體3.1 內(nèi)置規(guī)則的五個(gè)維度impeccable 的內(nèi)置規(guī)則雖然看起來(lái)數(shù)量不少但歸類下來(lái)其實(shí)覆蓋五個(gè)維度格式類、占位符類、敏感信息類、級(jí)別類、上下文類。格式類規(guī)則用于統(tǒng)一日志里的時(shí)間格式、字段分隔符、大小寫(xiě)習(xí)慣。比如時(shí)間戳統(tǒng)一用yyyy-MM-dd HH:mm:ss而不是混用yyyy/MM/dd占位符統(tǒng)一用{}而不是%s。這類規(guī)則看起來(lái)最“表面”但對(duì)日志檢索幫助最大。字段格式一旦統(tǒng)一采集端做解析時(shí)規(guī)則就能寫(xiě)得很簡(jiǎn)單。占位符類規(guī)則檢查兩個(gè)方面數(shù)量和類型。數(shù)量方面logger.info(a{}, b{}, a)這種參數(shù)缺失是典型的 bug運(yùn)行時(shí)會(huì)輸出axxx, b{}排查問(wèn)題的人看到這個(gè)占位符就知道代碼有問(wèn)題。類型方面{}對(duì)應(yīng)的參數(shù)如果是集合日志框架默認(rèn)會(huì)調(diào) toString對(duì)于復(fù)雜對(duì)象可能輸出一大段無(wú)意義內(nèi)容這類問(wèn)題有時(shí)候也值得提示。敏感信息類規(guī)則是我們重點(diǎn)投入的部分。它通過(guò)內(nèi)置關(guān)鍵字、正則表達(dá)式和自定義擴(kuò)展來(lái)識(shí)別可能泄露的數(shù)據(jù)比如身份證、手機(jī)號(hào)、token、密碼等。最有價(jià)值的是它還能識(shí)別“變量名暗示敏感信息”的情況比如變量叫userPassword哪怕值是脫敏后的字符串也會(huì)被標(biāo)記為可疑讓開(kāi)發(fā)者確認(rèn)后再提交。這個(gè)思路對(duì)有安全合規(guī)要求的服務(wù)特別有用。級(jí)別類規(guī)則主要檢查兩件事第一日志有沒(méi)有顯式指定級(jí)別避免裸調(diào)用第二級(jí)別和內(nèi)容是否匹配比如把每次心跳請(qǐng)求都打成一個(gè) error 日志這明顯不合理。上下文類規(guī)則則檢查日志里是否包含了必要的關(guān)聯(lián)字段比如 traceId、requestId、userId沒(méi)有這些關(guān)聯(lián)信息分布式排障會(huì)非常痛苦。3.2 正則規(guī)則與自定義規(guī)則的落地方式內(nèi)置規(guī)則覆蓋的是通用場(chǎng)景但不同團(tuán)隊(duì)的日志規(guī)范差異很大所以 impeccable 支持通過(guò)配置文件新增自定義規(guī)則。自定義規(guī)則本質(zhì)上就是一個(gè)作用在日志語(yǔ)句上的正則匹配器命中就報(bào)對(duì)應(yīng)級(jí)別的違規(guī)。比如某個(gè)團(tuán)隊(duì)要求所有日志必須包含module前綴否則不予通過(guò)。那就可以在配置里加一條rules: module-prefix-required: enabled: true level: error pattern: logger\\.[a-z]\\([^)]*\\bmodule\\b看這條規(guī)則時(shí)你需要理解它匹配的是logger.之后的小寫(xiě)方法名后面括號(hào)內(nèi)必須出現(xiàn)module關(guān)鍵字。如果沒(méi)匹配到就說(shuō)明這條日志缺了module。正則規(guī)則的好處是輕量、不依賴語(yǔ)言環(huán)境但壞處也很明顯正則容易匹配錯(cuò)而且日志語(yǔ)句一旦跨行或者里面有復(fù)雜的引號(hào)正則會(huì)漏報(bào)甚至誤報(bào)。因此當(dāng)規(guī)則復(fù)雜到一定程度時(shí)我們推薦使用插件方式。impeccable 允許以 Python 文件的形式注冊(cè)自定義檢查函數(shù)每個(gè)函數(shù)接收日志語(yǔ)句的 AST 節(jié)點(diǎn)返回違規(guī)列表。這比純正則可靠得多代價(jià)是要寫(xiě)代碼。我們內(nèi)部的“占位符數(shù)量和參數(shù)數(shù)量匹配”這條規(guī)則最初就是用正則寫(xiě)的跨行時(shí)總出問(wèn)題后來(lái)改成 AST 分析才徹底解決。3.3 錯(cuò)誤級(jí)別、基線文件與存量違規(guī)處理錯(cuò)誤級(jí)別的設(shè)計(jì)直接決定工具在 CI 里是“建議”還是“強(qiáng)制”。impeccable 支持三個(gè)級(jí)別error表示必須修復(fù)會(huì)直接導(dǎo)致構(gòu)建失敗warning表示建議修復(fù)但不會(huì)阻塞info表示提示通常用于記錄數(shù)據(jù)或生成報(bào)告。存量違規(guī)的處理是推廣過(guò)程中最棘手的一環(huán)。如果直接把所有舊日志都修好再上線往往要占用大量排期但直接放開(kāi) error 又會(huì)讓新代碼繼續(xù)踩坑。我們的解法是引入基線文件機(jī)制。第一次全量掃描時(shí)把歷史違規(guī)記錄存成 baseline 文件之后每次檢查只報(bào)告“新增的”違規(guī)。這樣存量問(wèn)題不會(huì)一直刷屏新人寫(xiě)的新日志又必須合規(guī)團(tuán)隊(duì)可以按優(yōu)先級(jí)慢慢消化舊債。實(shí)際使用中基線文件必須提交到版本管理里并且建議在 Code Review 時(shí)一起審查。因?yàn)榛€文件本質(zhì)上是“歷史遺留問(wèn)題清單”如果某次改動(dòng)悄悄刪掉了一條歷史違規(guī)記錄那和“文物保護(hù)”沒(méi)什么區(qū)別反而掩蓋了問(wèn)題。我們團(tuán)隊(duì)的做法是每個(gè)月安排一次“降債”專項(xiàng)把 baseline 里的條目一條條清掉清掉后從基線文件里刪掉CI 里如果再次出現(xiàn)同樣的違規(guī)就會(huì)直接報(bào) error。4. 接入CI流水線把檢查變成發(fā)布前置關(guān)卡4.1 本地提交前的預(yù)檢查pre-commit 配置把 impeccable 接進(jìn) CI 之前建議先在本地提交前跑一遍。這樣開(kāi)發(fā)者不用等流水線跑完才知道代碼不合格體驗(yàn)會(huì)好很多。我們用 pre-commit 鉤子做本地檢查配置很簡(jiǎn)單- id: impeccable name: impeccable-log-check entry: impeccable scan ./src --config ./impeccable.yml --level error language: system types: [python, java, javascript]這里有兩個(gè)細(xì)節(jié)值得注意。第一是--level error含義是本地只攔截 error 級(jí)別的問(wèn)題warning 留到 CI 階段再看。如果本地連 warning 都攔開(kāi)發(fā)節(jié)奏會(huì)被打亂鉤子反而容易被跳過(guò)。第二是 types 字段它決定哪些文件類型變更時(shí)觸發(fā)檢查不要把它設(shè)成空或 all否則每次提交哪怕只改了一個(gè) README 都要跑一次掃描。實(shí)際跑下來(lái)pre-commit 鉤子最大的價(jià)值不是“攔住了多少問(wèn)題”而是“讓開(kāi)發(fā)者建立了日志意識(shí)”。一個(gè)開(kāi)發(fā)者第一次被鉤子攔住時(shí)可能會(huì)覺(jué)得煩但看到報(bào)錯(cuò)信息里明確指出“這條日志缺了 traceId”之后下次寫(xiě)日志就會(huì)下意識(shí)帶上上下文。我經(jīng)常說(shuō)工具短期是門禁長(zhǎng)期是教練就是這個(gè)道理。4.2 流水線檢查任務(wù)與阻塞策略CI 里的接入方式建議作為流水線的一個(gè)獨(dú)立檢查任務(wù)在單元測(cè)試前后都可以。我傾向于放在單元測(cè)試之前原因很簡(jiǎn)單檢查速度快如果日志格式有問(wèn)題可以盡早失敗避免浪費(fèi)后面測(cè)試的算力。任務(wù)是腳本式的#!/bin/bash set -e impeccable scan ./src \ --config ./impeccable.yml \ --level error \ --baseline ./impeccable-baseline.json \ --output ./reports/impeccable.json這里加了--baseline參數(shù)用于指定存量違規(guī)基線文件。實(shí)際跑的時(shí)候有兩種模式可以選阻塞模式和非阻塞模式。阻塞模式就是檢查到 error 直接讓流水線失敗非阻塞模式只生成報(bào)告所有問(wèn)題匯總后發(fā)通知由團(tuán)隊(duì)決定何時(shí)修復(fù)。我們團(tuán)隊(duì)用了兩個(gè)月的非阻塞模式效果并不理想。因?yàn)榉亲枞J较麻_(kāi)發(fā)者很容易忽視報(bào)告最終還是要靠人工去盯。后來(lái)我們改成error 級(jí)別阻塞warning 級(jí)別不阻塞但必須在合并前處理完。這個(gè)策略比較平衡既守住了最關(guān)鍵的問(wèn)題又沒(méi)有把開(kāi)發(fā)流程變得過(guò)于僵硬。另一個(gè)容易踩的坑是CI 里的工作區(qū)可能是干凈的 checkout沒(méi)有 git 歷史上下文這時(shí)候增量模式會(huì)失效必須用全量掃描。所以 CI 任務(wù)里不要默認(rèn)開(kāi)incremental否則可能會(huì)漏掉本應(yīng)該被檢查的改動(dòng)。我們內(nèi)部的處理方式是CI 階段始終全量掃描本地提交預(yù)檢才開(kāi)啟增量。全量掃描耗時(shí)也就多幾十秒換來(lái)的確定性是值得的。4.3 報(bào)告輸出與違規(guī)定位的完整鏈路impeccable 支持多種報(bào)告格式純文本、JSON、HTML 都有。我們?cè)?CI 里主要用 JSON因?yàn)楹罄m(xù)可以對(duì)接內(nèi)部平臺(tái)做趨勢(shì)分析和告警。JSON 報(bào)告里每條違規(guī)包含文件路徑、行號(hào)、規(guī)則名、違規(guī)級(jí)別、原始日志片段和修復(fù)建議定位起來(lái)非常方便。有一次項(xiàng)目組里有人反饋說(shuō)“流水線報(bào)錯(cuò)了但我不知道改哪里”。我讓他把 CI 日志展開(kāi)看其實(shí) impeccable 已經(jīng)把具體行號(hào)打在報(bào)告里了。問(wèn)題是默認(rèn)輸出格式是密密麻麻的一長(zhǎng)串 JSON人眼根本看不下去。后來(lái)我們?cè)?CI 腳本里加了一步把 JSON 轉(zhuǎn)成人讀的摘要impeccable report --format md --input ./reports/impeccable.json --output ./reports/impeccable.md然后在流水線頁(yè)面直接展示 Markdown 摘要每個(gè)違規(guī)變成了類似下面這樣的條目文件src/main/java/com/example/OrderService.java 第 42 行 規(guī)則sensitive-info 級(jí)別error 說(shuō)明日志中檢測(cè)到疑似敏感字段 userPassword請(qǐng)確認(rèn)是否需要脫敏這個(gè)改動(dòng)之后開(kāi)發(fā)者的反饋從“不知道錯(cuò)在哪”變成“照著改就行”。工具的最終體驗(yàn)很大程度取決于報(bào)告好不好讀這一點(diǎn)常常被忽略。5. 實(shí)戰(zhàn)踩坑錄誤報(bào)、性能與繞過(guò)規(guī)則的真實(shí)排查過(guò)程5.1 多行日志引發(fā)的誤報(bào)與規(guī)則修正用正則做日志檢查最先碰到的就是多行問(wèn)題。很多人寫(xiě)日志喜歡格式化一條日志寫(xiě)成三行l(wèi)og.info(order created, orderId{}, amount{}, userId, amount);如果規(guī)則里的正則非常簡(jiǎn)單比如只匹配單行內(nèi)的模式這種寫(xiě)法會(huì)直接被漏掉導(dǎo)致日志里的拼接問(wèn)題逃過(guò)檢查。我們一開(kāi)始也這樣后來(lái)發(fā)現(xiàn)倉(cāng)庫(kù)里大量“貌似規(guī)范”的日志其實(shí)都是跨行拼接出來(lái)的。處理辦法是讓 impeccable 在掃描時(shí)對(duì)日志語(yǔ)句做合并后再匹配把括號(hào)內(nèi)直到閉合的代碼塊作為一個(gè)整體分析。這需要對(duì)代碼做輕量級(jí)詞法分析不能只靠正則。我們實(shí)現(xiàn)了“括號(hào)配對(duì)”邏輯之后多行誤報(bào)基本消失了但新的問(wèn)題又出現(xiàn)了字符串里包含閉合括號(hào)時(shí)配對(duì)會(huì)找錯(cuò)位置一度把正常的代碼誤報(bào)成違規(guī)。那次排查花了不少時(shí)間。最后我把所有誤報(bào)案例匯總發(fā)現(xiàn)共同點(diǎn)是日志語(yǔ)句里嵌入了 JSON 字符串比如log.info(payload: {}, getPayload())getPayload 返回的內(nèi)容里有大量花括號(hào)。如果只做括號(hào)配對(duì)就會(huì)把 getPayload() 內(nèi)部的 JSON 花括號(hào)當(dāng)成語(yǔ)句結(jié)束。最終我們調(diào)整了策略合并日志語(yǔ)句時(shí)跳過(guò)字符串內(nèi)的花括號(hào)。從那以后誤報(bào)率才真正降到可接受范圍。5.2 大倉(cāng)庫(kù)掃描慢的根因分析與優(yōu)化性能問(wèn)題是在一個(gè)較大規(guī)模倉(cāng)庫(kù)里暴露出來(lái)的。那個(gè)倉(cāng)庫(kù)代碼量不小加上構(gòu)建產(chǎn)物和緩存文件一次性全量掃描要跑接近四分鐘CI 排隊(duì)嚴(yán)重時(shí)能拖垮整個(gè)發(fā)布流程。最開(kāi)始我以為是正則匹配太慢后來(lái)通過(guò) profile 發(fā)現(xiàn)大量時(shí)間花在文件讀取和 glob 匹配上。每次掃描都會(huì)把配置文件里的 include 模式重新解析一遍然后遍歷整個(gè)目錄樹(shù)做匹配而目錄里三分之二的文件根本不需要掃描。優(yōu)化思路分三步走。第一步是優(yōu)化 exclude 配置把構(gòu)建目錄、緩存目錄、依賴目錄全部排除掉。這一步就減掉了絕大部分無(wú)效文件。第二步是啟用基于 git 的文件過(guò)濾只掃描被跟蹤的代碼文件而不是目錄樹(shù)里的所有文件。第三步是把 glob 匹配編譯后的結(jié)果緩存起來(lái)避免每次都重復(fù)解析。三步做完全量掃描時(shí)間從四分鐘降到了五十秒左右。這個(gè)優(yōu)化再次說(shuō)明工具的瓶頸往往不在規(guī)則本身而在文件系統(tǒng)層面的笨重操作。5.3 轉(zhuǎn)義技巧與Unicode繞過(guò)怎么見(jiàn)招拆招有意思的是規(guī)則的約束越嚴(yán)就越有人試圖繞過(guò)它。我們?cè)?jīng)遇到過(guò)兩個(gè)比較典型的繞過(guò)手法。第一種是轉(zhuǎn)義拼接比如檢查器不允許日志字符串里出現(xiàn)有人就把加號(hào)拼進(jìn)字符串里寫(xiě)成log.info(a b)但因?yàn)樽址锾崆傲袅丝崭窕蛞?hào)導(dǎo)致正則沒(méi)匹配上第二種是使用 Unicode 全角字符替代半角標(biāo)點(diǎn)比如把:換成全角冒號(hào)規(guī)則里只匹配了半角冒號(hào)于是一整段“看著像正常日志”的語(yǔ)句就繞過(guò)了檢查。不能說(shuō)這些手法是惡意的更多是因?yàn)橥掠X(jué)得規(guī)則太煩、想快點(diǎn)提交代碼。但從檢查工具的角度看這就是一場(chǎng)持續(xù)的攻防戰(zhàn)。我們的應(yīng)對(duì)方式是分層規(guī)則第一層用正則做快速篩查第二層用詞法分析識(shí)別字符串拼接語(yǔ)義第三層用信息熵算法識(shí)別“可疑的 Unicode 偽裝”把全角標(biāo)點(diǎn)統(tǒng)一降維成半角后再做一次匹配。三層規(guī)則疊加之后繞過(guò)難度高了非常多?,F(xiàn)在項(xiàng)目里很少再有人為了繞過(guò)規(guī)則去搞這些花活因?yàn)楸话l(fā)現(xiàn)后要改回來(lái)時(shí)間成本遠(yuǎn)比老實(shí)寫(xiě)日志高得多。5.4 一次發(fā)布阻塞的完整排錯(cuò)復(fù)盤(pán)有一次版本發(fā)布前CI 突然紅了報(bào)錯(cuò)的規(guī)則叫placeholder-args-matched指向某服務(wù)的一行日志。報(bào)錯(cuò)內(nèi)容是占位符有 3 個(gè)但參數(shù)只傳了 2 個(gè)。我當(dāng)時(shí)第一反應(yīng)是有人在改動(dòng)里改漏了參數(shù)改回去重試就行。但奇怪的是回滾到上上次通過(guò)檢查的提交流水線依然報(bào)同樣的錯(cuò)這就說(shuō)明問(wèn)題不在代碼改動(dòng)而是規(guī)則本身出了問(wèn)題。我開(kāi)始手動(dòng)復(fù)現(xiàn)。在本地跑同樣的命令同樣的文件結(jié)果沒(méi)有報(bào)錯(cuò)。這就更蹊蹺了同一個(gè)配置文件、同一份代碼為什么本地不報(bào)、CI 報(bào)最后花了大半個(gè)小時(shí)排查才確認(rèn)根因CI 上那臺(tái)機(jī)器初始化環(huán)境時(shí)把 impeccable 升級(jí)到了新版本而新版本對(duì)占位符規(guī)則的處理邏輯發(fā)生了變化。舊版本只匹配{}形式的占位符新版本把日志框架內(nèi)置的{}、%s、%d全部算作占位符于是原本合法的代碼變成了“參數(shù)數(shù)量不匹配”。這次經(jīng)歷之后我們立刻在 CI 腳本里鎖定了版本號(hào)同時(shí)把本地環(huán)境、CI 環(huán)境整理了對(duì)比確認(rèn)兩邊跑的是同一個(gè)版本。工具版本漂移帶來(lái)的問(wèn)題比規(guī)則本身的問(wèn)題隱蔽得多。如果你也在 CI 里接類似工具務(wù)必在配置里固定版本并且定期做一次升級(jí)評(píng)估而不是讓 CI 環(huán)境自動(dòng)拉到 latest。6. 上線后的效果與進(jìn)階擴(kuò)展讓規(guī)范從“工具”變成“共識(shí)”6.1 量化數(shù)據(jù)與團(tuán)隊(duì)感受impeccable 在我們內(nèi)部跑了大半年從數(shù)據(jù)上看效果非常明顯。第一次全量掃描時(shí)存量日志的違規(guī)數(shù)量是四位數(shù)其中占比最大的是占位符參數(shù)不匹配和字符串拼接。到后來(lái)新提交代碼里的 error 級(jí)違規(guī)數(shù)量已經(jīng)降到了個(gè)位數(shù)緩存下來(lái)的基線文件也從最初的幾百條縮減到幾十條。更直觀的改善在排查效率上。以前線上出問(wèn)題查看日志要來(lái)回猜格式、猜字段現(xiàn)在日志格式統(tǒng)一、字段名固定檢索鏈路的時(shí)間大幅縮短。這種收益很難用一個(gè)數(shù)字精確描述但經(jīng)歷過(guò)“日志一查就有”和“日志查了半天”的人都能感受到差異到底有多大。團(tuán)隊(duì)層面的感受變化也很有意思。一開(kāi)始大家對(duì)檢查工具普遍抵觸覺(jué)得是“找麻煩”到后來(lái)新同事入職第一天Code Review 時(shí)被機(jī)器人自動(dòng)提醒“日志缺了 requestId”反而覺(jué)得這套機(jī)制很專業(yè)。工具帶來(lái)的規(guī)范會(huì)逐漸沉淀成團(tuán)隊(duì)默認(rèn)的做事方式。6.2 規(guī)則調(diào)優(yōu)節(jié)奏與團(tuán)隊(duì)協(xié)作機(jī)制規(guī)則體系不是一成不變的。我們每季度都會(huì)做一次規(guī)則評(píng)審收集開(kāi)發(fā)者的反饋看哪些規(guī)則是誤報(bào)重災(zāi)區(qū)、哪些規(guī)則價(jià)值不大、哪些場(chǎng)景完全沒(méi)有覆蓋。評(píng)審后規(guī)則變更先以 warning 級(jí)別灰度一兩個(gè)迭代確認(rèn)誤報(bào)率和體驗(yàn)沒(méi)問(wèn)題后再升成 error 級(jí)?;叶葯C(jī)制非常重要。我們?cè)?jīng)跳過(guò)灰度直接上線一條新規(guī)則結(jié)果因?yàn)檫m配沒(méi)做全大量合法代碼被誤報(bào)開(kāi)發(fā)者的口碑一下子跌到谷底。后來(lái)凡是新規(guī)則一律先跑兩周 warning收集報(bào)告里的命中情況人工抽檢命中是否合理再?zèng)Q定提升級(jí)別。這個(gè)流程會(huì)讓規(guī)則本身也進(jìn)入“持續(xù)集成”而不是一次性拍腦袋定死。除了規(guī)則評(píng)審我們還建立了兩個(gè)配套機(jī)制。第一是“日志案例庫(kù)”把線上因?yàn)槿罩静灰?guī)范導(dǎo)致的真實(shí)事故整理成案例發(fā)給團(tuán)隊(duì)學(xué)習(xí)第二是“最佳實(shí)踐模板”把 impeccable 推薦的日志寫(xiě)法做成標(biāo)準(zhǔn)模板放進(jìn)項(xiàng)目腳手架里。工具管住了底線模板和案例管住了上限。6.3 后續(xù)可以繼續(xù)做的幾個(gè)方向impeccable 目前已經(jīng)能覆蓋大多數(shù)日常場(chǎng)景但我們也看到了幾個(gè)值得繼續(xù)探索的方向。第一個(gè)方向是增強(qiáng) AST 分析能力。現(xiàn)在很多規(guī)則已經(jīng)基于 AST但遇到動(dòng)態(tài)方法調(diào)用、反射等寫(xiě)法時(shí)仍然只能靠正則兜底準(zhǔn)確率有瓶頸。如果能把常見(jiàn)日志框架的 API 調(diào)用鏈建模得更完整就能識(shí)別更多隱性問(wèn)題。第二個(gè)方向是增加對(duì)日志采集端的聯(lián)動(dòng)。日志規(guī)范最終是為了讓采集端能解析那不如直接把規(guī)范輸出成采集端的解析配置讓“怎么打日志”和“怎么解析日志”保持同步從源頭消掉對(duì)接成本。第三個(gè)方向是結(jié)合大模型做更智能的判斷。比如判斷“這條日志的內(nèi)容是否冗余”“級(jí)別是否合理”“上下文是否足夠”這些語(yǔ)義性很強(qiáng)的檢查目前靠規(guī)則很難覆蓋。我們已經(jīng)在做一些小范圍的嘗試讓模型對(duì)疑似問(wèn)題做二次排序把最有價(jià)值的幾條提醒放到最前面。最后再分享一個(gè)小技巧如果你也想在團(tuán)隊(duì)里推日志規(guī)范我建議別急著鋪開(kāi)所有規(guī)則。先挑兩三條最痛的點(diǎn)比如字符串拼接和敏感信息開(kāi)成 error跑一段時(shí)間讓大家養(yǎng)成習(xí)慣再逐步增加規(guī)則。我見(jiàn)過(guò)不少團(tuán)隊(duì)一上來(lái)就希望“一步到位”結(jié)果規(guī)則列表越來(lái)越長(zhǎng)誤報(bào)越來(lái)越多工具最后被默默卸載。我在實(shí)際使用中最后一個(gè)心得是把 impeccable 的版本和基線文件都固定好。版本固定保證行為可預(yù)期基線文件保證存量梳理可控。這兩件事做好了工具才能真正在團(tuán)隊(duì)里長(zhǎng)期跑下去而不是熱鬧一兩個(gè)星期就沉寂。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
人妻天天爽夜夜爽爽| 乱欲一区二区| 国产人妻一区二区三区欧美毛片| 日韩人妻有码免费视频| 国产国产亚洲一二三久久| www.av在线观看| 99热精品国产| 亚洲大色堂| 日本免费人成视频播放120秒| 91色s| 一区二区三区国产精产| 中文字幕二区日韩天堂| 殴美在线AⅤ| 高清无码人妻久久久一区二区三区aⅴ| 俺去也婷婷| 欧美亚洲一级在线观看| 超碰色97| 精品999一区二区| 亚州春色| 亚洲性综合| 后X久久| 欧美在线观看综合国产| 四虎影视永久在线免费| 岛国激情视频在线观看| 97视频在线免费观看| 91无码西班牙视频在线| 天堂在线一区二区| 久久精品老司| 桃色人妻在线视频| 操曰本熟女| 亚洲污污网站| AV天堂电影网| 免费的黄片有限公司| 国产精品农村妇女| 亚洲欧美伦综合| 操淫穴亚洲五月丁香| 欧美激情片一区二区| 96AV精品| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 99热国产| 人妻丝袜一区二区三区在线| 啊啊啊好想要| 91亚洲色人| 岛国黄片网站| 女人妻一区| 日韩97视频!在线| 久久久久13| 欧美狠狠弄| 国产乱弄免费在线视频。| 78p欧美| 麻豆福利视频导航| 伊人性在线视频| 最近二区三区视频大全| 日韩熟女乱伦中出| 丁香五月色情| 人妻无码久久一区二区三区免费| 欧美激情视频一区二区| 美女裸体无遮挡永久免费观看网站| 97无码视频在线播放| 久久精品中文字幕观看| 99久久这里只有精品| 超碰97最新人妻| 中文字幕乱妇免费视频| 国产男女边吃边摸视频网站| 狠狠狠狠狠狠| 日本精品一区二区三| 日本不卡一区| 男人的天堂不卡一区二区| 久久做97| 国内偷自视频区视频综合| 9久久精品| 亚洲精品国产精品乱码不卡| 9久热这里只有精品| 影视综合无码少妇| 欧美国产有色电影| 91色黑人少妇| 婷婷五月天网| 欧美成人综合| 2026国产精品视频| 国产野战露脸在线播放| 大香蕉国产中文自拍| 人人妻人人澡人人爽人人精品浪潮| 黄色香蕉视频网站一区| 91 国产丝袜在线放观看| 久久久一二三四区| 亚洲成人碰碰| 国产亚洲深夜激情| 就去色综合| 欧美精品久久久久久久丰满| 亚洲情色1区| 澳门黄片一香蕉视频| 在现视频女上位好爽| 超碰欧美| 另类 综合 日韩 欧美 亚洲| 99久久精品无码一区二区| 新97国产超碰| 中文字幕在线高清男人的天堂| 中文熟女五十乱码在线| 欧美麻豆成人同性GⅤ在线| 加勒比五月天| 韩日精品四区| 青娱乐欧美激情一区二区| 超碰人妻中文在线| 强免费黄色网址| 四虎884| 久久久工口| 亚洲国产精品成人综合| 91久热| 99热亚洲天堂| 丁香六月婷| 香蕉久久AⅤ...| 久草婷婷| 亚洲欧美色图片| 人人妻人人色| 尤物av网站| 五月大香蕉| 精品成人无码| 极品尤物自安慰| 国产精品69久久久久久久| 夜色五月天| 天天干人妇| 1级午夜影院费免区| 国产精品农村妇女精品| 亚洲国产中文字幕| 少妇色综合| 在线观看A啊啊啊| 67914亚洲精品| 最近的最新的中文字幕视频| 岛国色情视频在线观看| 人人么人人操| 91欧洲国产成人久久精品网站| 久久久精品视频欧州站| 亚州精品人妻一二三区| 久久久免费视频18| 天躁夜夜躁2021| 97就爱干| 骚货操死你| 免费国产| 97神马久久| 天美传媒AV在线| 男女啊啊啊| 久久久夜夜夜| 伊人丁香五月婷婷| blacked精品一区国产| 搡老女人老妇女AAA一VU麻豆| 97综合日韩| 熟女网站最新| 免费看黄视频亚洲网站| 欧美日韩性爱无码| 曰本熟女视频| 老熟妇综合| 热热色色综合| 91综合网站| 黄片免费日韩| 伊人久久大香大香线蕉中文 | 欧美99热| 天堂伊人久久| 男人天堂网站| 黑人精品成人一区二区三区| 久草综合京东| 嫩草91| 国产捆绑一区| 探花激情视频| A一级色女| 欧美图片偷拍| 婷婷探花久久精品一区| 黑人免费福利视频| 男人的天堂2010| 91久久久久久久| 亚洲97在线观看| 久久久国产亚洲精品系列| 日韩精品一区的| 久操操| 欧美日韩亚洲天堂| 九月婷婷| 神马麻豆福利院| 亚洲 国产 精品一区| 九热大香蕉| 日日躁夜夜躁狠狠躁超爽| 久久久久亚洲?V片无码V| 久久久人妻| 日韩图区 偷拍| AV在线资源| 日本五十路熟女一区二区| 在线观看日韩av不卡| 综合久欧洲| 欧美后入| 人妻社区男人天堂| 岛国艾薇凹凸视频天堂| 97 国产一区| 日韩黄片影院| 搡老熟女国产1000部| 天天色黄色影院天天操| 久操影视| 综合影院亚洲| 91c色| 日韩精品三级片长长久久| 高潮毛片无遮挡高清免费| 91高跟美女在线播放| 可以免费看黄片的视频| 美女网站黄页| 亚洲欧美激情另类色图| 亚洲国产一级黄色视频| 我爱搞逼综合网| www.人人cao| 久久免费少妇| 中文字幕精品一区二| 久操网址| 日韩特级毛片免费观看全集| 久久伊人影院| 欧美日韩资源| 久久青青草在线视频| 男人天堂毛片| 国产免费黄色一级大片| 日韩成人性日韩成人性爱视频在线免费观看 | 伊人大香蕉在线| 极品五月天噜噜| 欧美亚州手机在线| 亚洲日韩av一区二区三区百合| 99久久婷婷国产综合精品草原| 亚洲激情网一二三四区| 理论久久婷婷网 8| 久久999久| 亚州男人的天堂| 另类专区加勒比| 啊啊啊啊,啊啊好多水 | 超碰免费在线| 欧美在线官网| 9999九九九久久久| 亚洲欧洲日韩中文字幕一区| 国产乱子伦一区二区三区在线观看| 一本色道久久综合精品婷婷| 伊人天天久久动态图| 国产精品精品系列在线观看| 婷婷丁香九月| 色婷婷综合网站| 91在线页| 亚洲十八禁止| 国产精品视屏| 手机在线视频国内精品| 男人的天堂2010| 日韩三级网址| 福利天天都操| 亚洲精品国产精品成人| 免费精品中文字幕| 国产av尤物| 好好的日:com久久九九| 91丝袜| 欧美一级AAAAAAA| 亚洲成人av电影在线| 国产精品三级视频网站| 顶级少妇BT天堂| 长久操视频| 天天干嫩逼网| 可以在线观看AV的网站| 欧美制服另类丝袜| 天操天操夜操夜月操月年年操操| 麻豆久久一区二区三区| 亚洲精品日日夜夜52| 成人老鸭窝人人在线视频| 日韩专区久久久| 69一区二区三区 | 深田咏美亚洲精品福利社| 超碰亚洲欧美日韩无| 久久一本大香蕉| 9丨久久九九九| 欧美激情中文字幕另类小说| 久久精品亚洲东京热色播| 加勒比综合a∨| 高清有码一区二区| 丰满翘臀美女影院视频| 婷婷丁香人妻| 免费av大片| 亚欧中文字幕在线视频| 久草午夜| 嗯嗯啊中文字幕| 草B在线| 精品国产丝袜一区二区三区乱码| 内射日韩大臀美女| 91九色丨风韵犹存| 六月婷婷激情| 97欧美资源| 亚洲 日韩 丝袜 熟女 变态| 精品人妻一区二区三区在| 亚洲九月丁香| 亚91网| 91粉嫩萝控精品福利网站_精品影音先锋国| 91夜色chaopeng| 日日超碰亚洲| 亚洲熟妇图片| 国产免费一区2区3区| 午夜天堂精品久久久久91| 精品乱码在线观看| 激情看片网站| 男人的天堂99| 天堂蜜桃无码视频一区二区| 欧美日韩在线小说 | 性色国产东北露脸精品视频| 久久久性| 97超碰免费人人性爱| 日韩兔费看黄片| 伊人天堂在线| 操逼网站网站| 成人一级二级| 99免费在线视频| 大香蕉淫人网| 亚洲人在线成线成人| 国产强奸AV在线| 爱干爱射网啊啊啊| 国产精品无码久久久久2028| 九九人妻| http://qxhbdz.com| 美女网站91| 99热免费| 上海一级黄片| 日韩综合97p| 色老汉玖玖爱| 高清国产性猛交xxxx乱大交| 中国熟女91| 人妻嗯啊啊在线播放| 亚州综合网| 久久欧洲| 五月婷婷激情网| 国产精品九九九| 国产农村妇女精品一二区| 亚洲国产欧美一区二区潘金莲| 久久m| 欧美疯狂做爰xxxx| 99无码| 亚州久久9| 日韩不卡毛片Av免费高清| 伊人91| 久久久久久久久九九久孕交| 国产亚洲日本精品在线| 九七超碰| 校园春色美腿丝袜 | 黄页网站免费高清在线观看| 噜噜噜噜久久久精品免费| 亚洲一二三精品久久网| 日韩中文字幕视频在线观看| 久久国产在线一区二区| 97超碰伊人| 色爱综合网欧美| 天天色综亚洲91污| 日韩无码视频黄色| 人妻第一页| 无码久久国产| 久久欧美激情| 夜夜国自区| 亚射在线| 人人手机欧洲亚洲国产人妻| 欧美一级A片在线看视频性色| 国产一区二区三区高清视频| 丝袜足交视频| 欧美日日人人天天| 91色伦综合| 午夜激情床戏激情| 色99在线| 精品-91人妻子系列| 欧美黄色手机在线观看| 性91| 黄色交缠性感爆操91国产精品免费一区二区三区 | 中 文字幕一区二区三四 五 区日 日 骚 | 天天躁日日躁AAA片李宗瑞| 五月丁香激情四射| 超碰色综合| 97K超碰在线| 日韩中文字幕宗合在线| 欧美在线视频播放| 91天堂视频| 偷拍 精品另类 凸凹了四区| 久久婷五月| 色官网在线| xxx0国产在线播放| 男人a天堂手机在线版| 亚洲人妻中文在线视频| 精品蜜乳AV免费观看| 久久春色| 97精品久久| 极品销魂美女一区二区| 一个色导综合| 樱花蜜乳av| 在线播放免费av福利片| 久操凹凸视频| 国产高清MV操逼视频| 狠日操| 国产高清成人mv在线观看| 九月丁香婷婷色| 国产女人高潮嗷嗷嗷叫小说| 1024人妻熟女一区二区三区| 亚洲 一区二区 自拍| 久久久亚洲高清不打码| 屁屁影院一区二区三区国产 | 午夜后入| 97超碰中文字幕| 日本免费一区二区不卡| 97色欧洲| 久久啊啊啊| 插入逼91| 99国产在线 精品 视频| 秋霞视频一区二区| 亚州色图第三区| 天天干一区二区| 躁躁日曰躁2020| 2019午夜福利视频| 久久久久久九九九| 日韩精品资源专区二区| 天天操天天干一区二区| 97er欧美性| 人人操人人射人人干| 天天日美女的B| 9久9久9久9久视频网站| 久久男人的天堂| 美国黄片aaa| 99在线无码精品秘 入口黑人| 十八禁啪啦拍视频无遮挡| 日本福利社| 激情图片亚洲色图| 久9综合在线| 一区二区中文| 亚洲精品亚洲人成在线麻豆| 花野真衣| 麻豆色约约| 日韩有码 一区二区三区| 十八岁啪啪视频免费看| 欧亚综合一卡二卡中文字幕| 久久久国产精品亚洲精品| 婷婷丁香人妻| 影音先锋视频在线| 射丝袜高跟鞋99| 综合天天。| 中日韩免费看男女操逼大全| 激情干在线| 嗯嗯嗯啊啊啊操的我好爽| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 亚洲三级网址久久最新| 五月天久久人妻| 日本性爱欧美性爱| 日韩美一区| 茄子社区国产精品| 一个国产在线综合网站| 六月丁香网| 国产麻豆一区二三区| 精品一区二区三区国产| 亚洲av强奸乱伦| 久久鲁夜| 精品国模无码| 欧美色偷拍 | 欧美极品| 久久综合五月天| 亚州Av天美传媒| 亚洲日本激情| 亚洲AO在线| 精品久久久久久久| 思思99热| 欧成人精品一区二区三区| 亚欧性爱ab| 国产性爱欧美性爱在线| 国产91会所女技师在线观看| 九九久久久久久爱| 日韩无码极品| 伊人影院在线理论播放| 日韩欧美福利视频看看| 日韩情色视频| 粉嫩av在线| 伊人AAA| 五月天伊人网| 国产乱码久久| 亚洲福利影院一区久久| 国产欧美一区二区| 思思热国产高清| 欧美另类色图片| 不卡在线观看视频| 黄色成年| 婷婷色婷婷| 亚洲精品国产拍免费91在线| 国产亚洲色婷婷久久99精品91| 天天干1区2区在线| 色欲久久综合| 天天日天天干少妇日| av大香蕉| 日韩性爱小视频| 超碰在线人妻不卡| 国精精品无码一二三区水多多| 综合久久99亚洲人妻中文在线| 中文字幕国产| 无码精品啪啪啪一区二区三区三州| 国岛片视频| aV中文麻| 久极品在线观看| 美女视频尤物网在线看| 情色五月天就去干| 啊…啊…操我用力操我| 成人精品在线免费视频| 丝袜狠狠草尤物 91| 欧美精品久久久久久久久88| 国产9l 大屁股| 97操97色| 综合久久六月久久婷婷| 91女日逼| 91中文精品日韩欧美在线 | 天天日日日射| 日韩黄色一区二区三区| 色五月AV| 日日玩天天干| 有码免费观看| 亚洲欧洲国产综合av| 精品一区二区三区麻豆| 日韩激情视频| 操人无码| 少妇无码av专区线| 天天躁日日躁狠狠狠躁| 97视频在线观看高清资源| 亚洲美女自拍偷拍视频| 97在线看| 精品熟妇视频一区二区| 中文字幕少妇色| 伊人五月天| 懂色中文一区二区三区| 特污精品女优骚货黄色视频在线免费观看| 超碰97最新人妻| 国产亚洲色婷婷久久99精品91| J?P?NESEHD熟女熟妇伦| 92大香蕉| 超碰97在线色男人??| 久久香蕉国产传媒一区剧情天美| 日本一区二区三区四区免费观看| 国产一区二区二区按摩精品啪视频| 好爽免费视频,| a男人的天堂| 超碰在线看| h无码动漫在线观看| 亚洲中字幕日本一区二区三区| 欧美色图亚洲色,麻豆| 国产天天看| 精品久久久av| 黄污污污污| 亚洲色欲天天人妻无码系列专区| 欧美日韩不卡a片| aaa亚无码专区| 鸥美中出| 中国少妇啪啪视频| 美女91网址| 精品9999| 免费精品AB| 欧洲自拍色图gif在线| 嗯嗯啊啊啊好舒服| 国产视频一区二区在线| 成 人 影视 一区 二区 三区 四区| 国产97色在线| 天天天天天干夜夜夜夜夜操| 性做久久久久久免费观看软件| 久操网无码在线| 嫩呦国产一区二区三区AV| www熟女乱伦com| 翔田千里A片一区二区| 操东北女人| 亚洲欧美不卡线| 校园春色 欧美| 中文字幕蜜乳av| 日本不卡一区| 操逼视频国产无套| 超碰免费人妻人人| 日韩无码三级影院| 在线综合色| 日韩一级欧美一级在线观看| a在线观看| 伊人五月天| 九九毛片这里只有精品| 三级片大波波| 久热久| 色婷婷一区二区三区久久午夜| 久草成人影片| 国产精品熟女一区二区三区| 性无码专区2020| 国产精品爱欲| 一起草精品人妻| 天天射影院| 一二三啪啪专区| 欧洲亚洲人妻无码中字久久三区四区 | 午夜久久久| 超碰97久| 国产精品久久久吖| 国产区性爱在线视频秋霞豆| 亚洲操逼网| 亚州成人A√| www. 男人天堂成人在线| 97久久久久久久久久| 天天射夜夜骑| 精品日韩中文在线| 色五月婷婷色| 91麻豆天美国产| 激情婷婷丁香网| 热99这里有精品综合久久 | 亚洲色图8| 人人爱人人乐人人操| 3d成人精品一区二区| 91久久久久久| 国产白丝在线| 搡老女人老熟女91老熟女综合网| 欧美日韩性爱电影在线| 岛国精品视频在线观看| 亚洲丝袜B诱惑| 33044男人的天堂深夜备| 国产无码三级视频在线观看| 精品在线观看视频在线| 玖玖蜜臀资源网| 99久在线精品99re8蜜桃| 欧美精品久久久久久久丰满| 日本好吊色视频| 97视频免费播放| 国产高清在线观看欧美| 9久久9综合| 婷婷人妻激情| 男人高清无码一区二区| 91新在线欧美| 亚洲色图欧美| 五月天综合| 国产精品久久久久久9999| 欧美一级在线观看成人| 婷婷五月天基地| 丰满人妻一区| 色色色色日本| 啊啊啊啊啊啊啊好爽不要| 亚洲毛片久久| 破苞ⅩXXX性无码动漫无码| 久久999久| 精品蜜乳AV免费观看| 一区二区偷拍拍视频| 伊人久大| 亚洲欧美国产其他二区| 熟女精品一区二区在线观看| 久操操AV电影| 亚洲综合888| 日本成人在线不卡一区二区三区| 五月激情小说| 操熟女91| 亚洲综合小说另类图欧美视频激情小说色五月天| 中文字幕久久亚州无码| 日韩无码黄色片| 日本99一区二区| 欧美一二三级精品在线| 好看的91视频| 日韩av免费一级电影| 黄色二级片网站| 欧美日韩成人在线| 18禁的网站在线| 亚洲天天操| 青青草在线视频美女| 久日91在线| 9999久久久久| 国产天美欧美| 天天综合-91入口| 又大又白奶子| 国产老女人久久毛| 九色 人妻 大香蕉| 懂色Av| 国产欧美一区二区| 成人a v在线播放免费| 综合影院亚洲| 日韩免费av片高清无码| 好好的日:com久久九九| 约操熟妇| 欧美激情 一区| 91oumei| 丰满美女一级毛片在线播放| 欧美色日本| 午夜寂寞欧美| 日韩猛交| 日本啊啊啊啊啊视频| 日韩一级特黄av毛片| 夜夜做夜夜爽精品视频| 色九九综合| 亚洲综合电影| 精品一区二区三区四区外站| 性爱av网站| 欧美综合亚洲综合| 欧美日韩一干二干| 亚洲欧美国产其他二区| 丰满人妻-区二区三区| 78p欧美| 国产高清精品福利| 东北女人操逼| 丝袜av一区二区三区| 去干网最新版| 国产黄色视频久久| 久久九九热| 久久久久久久九九九九九九| 一区二区三区 日韩欧美| 久久久久熟女| 日韩一级二级三级免费看完整版| 操学生天天| 超碰免费在线| 欧美丰满少妇xx高潮| 97超碰精品图片| 亚州人妻| 日韩亚洲美女一区久久| 亚洲成?V人片在线观看福利| 婷婷五月天激情四射| 麻豆国产成人精品| 97精品国产97久久久久久| 黄色AAAAA欧美| 青青色在线观看| 亚洲中亚日激情视频| 9久久9综合| 91九色精品熟女内射| 精品国产一区二区三区在线播出| 国产精品欧美在线观看 | 国产免费内射视频| 欧美日韩国产人人| 欧美日本久久精品一区| 天天做天天爽| 蜜乳AV色欲AVAV无码| 色黄污美女啪啪啪免费网站| 欧美宗合色| 人妻喷水| 女上位精品在线| 天天α片| 国产农村妇女精品一二区| www色色com| 日本色色色视频| 日本狂喷奶水在线播放212| 亚洲学生妹高清av| 96麻豆精品一区二区三区| 欧美人妻另类在线| 久久一本大香蕉| 久久欧洲| 男插女青青影院| 蜜桃传媒一区二区亚洲| 人妻激情另类| 91粉芽高清在线一区二区| 一区二区三区精品久久| AV污污污污| 最新中文字幕精品在线| 欧美一区二区三区另类精品| 久久久久久久伊人精品| 天天射天天| A级在线视频| 国产午夜精品理论片一二三区区 | 91人妻人人妻| 天美av在线观看| 久久久影院| 亚洲色图在线视频| 1024亚洲中文字幕久在线看片你懂的| 玖玖视频在线资源一区二区三区| 99热这里只有精品9| 九九RE视频在线精品| 午夜男人一级A片7777| 色婷亚洲五月在线观看| 色噜噜婷婷| 亚洲五月丁香花狠狠干一区二区三区 | 精品人妻一区二区三区在线视频不卡| 美女91在线| 91久久久亚洲| 日韩黄片视频试看| 色婷婷九月天天综合| www.色操逼| 97人人干| 91丝袜美女| 99色骚| 人伦四五区| 超碰九7| 国产精品爱欲| 岛国艾薇凹凸视频天堂| 超碰在线看| 人妻夜夜爽天天爽麻豆三区网站 | 日韩国产品视频中文字| 久久爽爽精品| 97伊人超碰| 91香蕉国产尤物视频| 亚洲密乳AV| 91精品伊人久久久大香线蕉91| 狠狠干婷婷| 99综合自拍| 影音资源男人日韩| 久久青青草在线视频| www.婷婷五月天| 天天操av懂色| 人妻超碰青青草98| 人妻丝袜一区二区三区在线| 日韩熟女操逼| 操逼日韩无码| 欧洲一区二区三区免费| 亚洲,欧美,综合网| a男人的天堂久久一级A毛片| 无码抄逼网| 伊人青青一区成人视频在线观看区| 91nbbbbbb| 大香蕉中文在线| 久干9操| 99re6久热只有精品6在线直播| 青木玲在线不卡| 欧美97在线欧| 国产又操| 91黑丝美女| 日韩9区| www成人啪啪18秘 免费| 五月天色电影| 激情欧美97| 欧日a| 日韩传媒在线| 一区二区高清视频| 性爱av网站| 日韩欧美水蜜桃人妻| 高潮精品| 另类小说五月天| 91欧美巨乳| 亚洲成aⅴ人片不卡无码| 超碰79人人乐| 97国产|免费| 久久‘黄片视频| 一直超碰| 91一区二区三区蜜桃| 亚洲人妻一区二区三区| 999久久芭蕾| 国产精品无码久久久久2025| 亚州成人A√| 啪啪自拍九九综合| 少妇滛荡视频| 激情内射| 乱伦系列一区二区| 日韩不卡一二三四| xxxx网站亚洲精品| 97视频620| 翔田千里无码中出中文字幕| 特级大荫道BBwBBwBBW| 色噜噜狠狠色综无码久久合欧美| 天天爽人人综合免费7799| 看看日B真人视频| 日韩精品1区2区中文字幕| 91/欧美| 午夜视频好爽啊| 国产精品视频播放| 久久性爱精品一区| 高潮嗯啊性感美女久久久| 国产精品一二三区18| 香一区二区三区| 啪啪视频免费在线观看| 久久最新免费视频23| 性天堂| 欧美黄色图片| 久久亚州精品成人Av无| 老熟妇综合| 最好看的中文字幕在线2018| 91国产在线精品| 欧美三级中文字幕hd| 人人操人人精品影片| 一区在线国产播放| 欧美激情在线观看视频| 亚洲丝袜色| 亚洲无码偷拍| 精品九九九九九九九九九| 中文字幕aⅴ在线视频| 国产精品粉嫩福利在线| 色色婷婷丁香| 亚洲天堂久久久久久粉红视频| 三级片大波波| 激情无码日韩| 久久蜜桃一区二区| www.97在线| 国产一区二区三区久久久精品| 97超碰总站| 激情综合五月婷婷| 极品综合| 亚洲AV不卡在线观看| 五月丁香啪| 91在线精品一区二区三区| 精品中文日韩字幕视频| 久久婷婷色| 欧美v日韩v亚洲v最新在线| 久久精9| 国产精品老师| 思思热一热婷婷热一热| 资源新线在线天堂| 日韩精品第3页| 国产日韩欧美三级片| 免费在线看黄片av| 吊色| 欧美男女午夜啪啪| 高清成年美女黄网站免费大全| 久久激情视频| 麻豆久久久久久久久丝袜 | 色色色热| 成全在线观看免费观看| 日本幼女18+| 闷骚老熟女15P| 成人黑料社久久| 欧美性生活男人的天堂| 久久99久久99精品天美传媒棢·纸:.| 精品99999久久久久久| 啪啪啪精品视频| 国产精品午夜AV完会免费 | 欧洲黄色网| 久久9精品| 综合97亚洲| 亚洲天堂东京热| 在线观看黄色电话| 黄色人人| 91天天| 精品夜夜澡人妻无码AV| 操亚州| 动漫片子网站3黄| 亚洲1区| 国产色精品午夜大片| 97无码视频在线播放| 清纯唯美第一页| 欧美91久久久久| 嗯阿好爽好紧| 丝袜美腿欧美| 日日操天天操| 久久这里只精品99re66图 | 精品9999| 后入式在线免费观看60秒| 天天综合~91入口| 人人透人人操| 夜嗨影院| 国产亚洲日韩在线三区黑人| 五月天婷婷在线看| 欧美色网| 91麻豆天美| 蜜臀久久99精品久久久久久婷婷| 久久成人东京热人妻| 久久6热精品99视频| 美日韩在线不卡人妻| 欧美大香蕉在线观看| 伊人天堂在线| 成人欧美一区二区三区黑人一| 留下AⅤ黄色片| 日操粉逼逼| 日韩人妻播放| 亚洲αv一区二区三区| 国产东北女人在线视频| 成人性爱av| 欧美aa一级片| 成人a级高清视频在线观看| 午夜人人操| 国产精品无码成人精品| 大香蕉免费3| 国产又猛又粗又爽又黄| 亚洲av综合伊人久久| 家庭乱伦国产精品| 国产一区二区在线播放量| 日韩黄色片子| 十八岁啪啪视频免费看| 亚洲日韩美国人妻| 人妻中文字幕日韩电影| 天天精品| 久久女婷| 香一区二区三区| 久草色悠悠在线视频| 青青操在线亚洲视频观看欧美在线| 伊人一区二区三区| 日韩不卡一二三四| 91日韩网站| 东京热天堂网| 亚欧毛片基地国产毛片基地| 三级色综合| 竹菊影视国产一区二区| 国产精品色| 青青草吊丝| 青青草成人视频在线观看二区| 少妇色综合| 99在线精品观看视频中文| JuliaAnn丝袜熟女系列| 91狠狠综| 3d成人精品一区二区| 亚洲色综合| 女同性恋一区二区三区精品视频| 操逼内射干逼白丝91| 精品无码产区一区二| 亚洲精品欧洲色| а√天堂资源官网在线资源| 秋霞无码av鲁丝片一区| 91狠狠综合久久| 亚洲AV资源| 久男人久久| 国产一级高清免费观看| 成人麻豆av电影网站| 天天插天天操| 78久久久| 国产91 丝袜在线播放| 在线播放成人高清免费视频| 人人摸人人摸人人干| 日韩人妻少妇 一区二区三区| 91嫩草欧美| 农村少妇久久久久久久| 人人贴人人摸| 婷婷成人五月天| 国产精品久久久久久久久久久久久久久 | 欧美视频一| 国模精品娜娜一二三区| 激情图片亚洲色图| 青青草依人大香蕉| xxxx网站亚洲精品| 青青网三级视频| 国产人人干| 91被操| 五月天综合网| 久久妇| 一级人妻性爱视频| 九九内射在线| 天天综合网亚洲综合网| 日韩极品无码B| 九九热超碰| 超碰到97情色| 久久受www免费人成| 久久极品一区二区| 久久久免费视频18| 为用户提供免费看黄网址在线观看| 激情小说五月天| 久久视频,这里只有精品| 岛国黄片网站| 超碰超碰欧美| 日日摸日日碰夜夜爽视频| 亚洲天堂7777| 一直超碰| 亚洲精品免费中文字幕| 最新加勒比丝袜在线| 亚洲无码一区成人免费午夜| 日韩黄色一区二区三区| 97超碰免费人人性爱| 天天看精品动漫视频一区| 欧美黑人XXXⅩ高潮交| 色淫网站优优视频| 亚洲中文一区二区三区视频| 欲女人妻性色av| 乱伦图av| 狠色婷婷久久一区二区三区_| 国产美女口爆吞精视频| 超碰在线974| 精品人妻免费观看| 国产馆极品诱惑| 色99999| 亚洲 中文 女同| 精品欧美老熟女一二区| 蜜桃色色网站视频三区| 91国模| 懂色AV一区二区三区| 九九热三级片| 亚洲AV无码天美传媒一区| 亚洲色阁| 97超碰国产精品| 新亚洲无码| 国产老熟女| 黄片qw| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 婷婷超| 久久人人爽爽爽人久久久| 国产精品久久久吖| 综合 青草 伊久久 影院 综合| 美女天天干| 青青青青草av在线观看| 在线观看成人性爱免费小视频| 国产1727欧美| 亚洲国产一区二区三区四区国产| 伊人宅男大香蕉| 女同在线视频一区| 18禁看网站一区| 青青草色插素人| 另类小色呦| 加勒比海人人操超碰在线| 伊人综合色网| 人人做天天爱| 五月天亚洲网| 狠狠干婷婷| 看日韩黄片| 欧美日韩亚洲电影| 在线不卡视频| 色综合一本| 日本免费一区二区不卡| 婷婷色婷婷| 91精品无码久久久久久久| 精品一久久久| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 日日做夜狠狠爱欧美黑人| 男人的天堂一区三区| 国产乱子伦一区二区三区在线观看| 冬京热男人的天堂| 91成人久久 | 尤物网站91| 色偷综合| 狠狠欧美| 操逼不卡中文字幕| 九九热三级片| 日日黄色三级网站| www.91久久| 国产美女口爆吞精视频| 亚洲乱熟女一区二区| 嗯嗯嗯不要不要免费视频| 美女国产一区二区久久| 91精品老女人| 精品人妻一二三四区视频| 亚洲av夫妻操穴网| 欧亚乱色熟女一区二区| 中文字幕一区二区三区50路| 久久草视频污视频| 狼天天狼天天大香蕉| 亚洲一级特黄大片在线播放91| 亚州男人天堂| 日韩精品一区,二区 九九...老司机| 免费观看欧美日韩操逼视频 | 超碰9 7女人| 国产传媒1234区| 激情六月天| 国产一区二区av综合| 妇女性内射冈站HDWWWCOM| 久久宗合97| 日本大香蕉| 四虎影库国产精品免费| 婷婷色播婷婷| 亚欧日韩成人| 亚洲成人黄色在线观看| 人人妻人人澡人人爽人人精品浪潮| 欧美国产操逼| 久久久婷| 国产精品 亚洲情色| 五月天色色色| 日韩亚洲Av人人夜夜澡人人爽| 岛国A V在线免费看| 欧美亚洲小说| 97日亚洲欧美| 亚洲图片视频小说| 美女网站黄页| 日韩一级二级三级免费看完整版国语版 | 91在线美女| 97五月天| 国产成人网| 日本精品成人无码| 亚洲蜜桃V妇女| 九色在线熟女国产黑人| 亚洲图片日本AⅤ欧美在线| 人妻一区二区三区四区视频| 蜜桃久久一区二区| 国产精选视频| 国产精品久久久久久无码红治院| av网站国产主播在线| 干超碰碰熟女| 999综合网| 九九九九免费| 欧美色狠| 人妻一区二区三区四区视频| 人妻丝袜美腿中文字幕| 91老熟女视频| 久久精品一区二区三区四区五区| 搡老女人老91二区| 夜夜爽夜夜高潮夜夜爽| 高精欧美色| 亚洲欧美伦综合| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 超碰97人妻免费在线| 台湾一区国产高清在线| 男女做爰猛烈动高潮A片免费应用| 日韩福利电影网| 午夜a成v人电影| 色在线亚洲视频www| 黄色一区二区秘书性感| 青娱乐国产精品| 新版天堂中文资源8在线| 亚洲激情综合| 91久热这里只有精品|