99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

Scrapy日志系統(tǒng)生產(chǎn)環(huán)境配置指南:從原理到落地

Scrapy日志系統(tǒng)生產(chǎn)環(huán)境配置指南:從原理到落地 干爬蟲這些年我接手過的項目少說也有十幾個其中九個的日志系統(tǒng)都是能跑就行的狀態(tài)。直到有一次凌晨兩點線上爬蟲突然停擺解析規(guī)則沒問題、數(shù)據(jù)庫連接正常、代理池也沒掛我硬是排查了三個小時才找到真兇——日志文件把磁盤寫滿了進程直接被系統(tǒng)干掉。從那之后我養(yǎng)成了一個習(xí)慣接到新項目第一件事就是把Scrapy日志系統(tǒng)和生產(chǎn)環(huán)境配置從頭到尾梳理一遍。這篇博文就把我積累的這些東西完整寫出來包括日志系統(tǒng)的工作原理、settings里的各種開關(guān)、擴展機制、生產(chǎn)環(huán)境落地配置還有我踩過的坑。不管你是剛把本地爬蟲腳本改成生產(chǎn)任務(wù)還是被日志問題搞得焦頭爛額這篇內(nèi)容應(yīng)該能幫你節(jié)省不少排查時間。1. 先從一次線上事故說起日志系統(tǒng)為什么值得認真對待1.1 那個把磁盤寫滿的日志文件那次事故的具體情況是這樣的項目大概每天爬取30萬條商品數(shù)據(jù)跑了一個多月沒出過問題。某個凌晨我的告警電話響了說爬蟲進程消失了systemd把它標記為failed。我登錄服務(wù)器一看磁盤使用率100%df -h顯示/目錄已經(jīng)被占滿再一看罪魁禍首是logs/scrapy.log大小已經(jīng)是18GB了。為什么會這樣因為當時圖省事直接在settings.py里配置了LOG_FILE logs/scrapy.log這是Scrapy官方提供的最簡單的文件日志方案。但這個方案的本質(zhì)就是用一個FileHandler往同一個文件里追加寫入既不切割、不壓縮、也不清理舊文件。一個每天寫入幾百MB的爬蟲項目跑一個月就是這個結(jié)果。這里需要特別說明一個新手容易忽略的點Scrapy默認是只在控制臺輸出日志的你配置了LOG_FILE之后控制臺就沒了全部寫進文件。但Scrapy不會幫你做任何輪轉(zhuǎn)log rotation。這不是Scrapy的疏漏因為日志輪轉(zhuǎn)這件事本身就是部署層該負責(zé)的但在實際項目中大多數(shù)人不會單獨給爬蟲配一個logrotate任務(wù)于是日志就成了定時炸彈。后面第4章我會給出完整的解決方案。1.2 Scrapy日志系統(tǒng)的基本工作原理要避開這些坑先得搞清楚Scrapy日志系統(tǒng)到底是怎么運轉(zhuǎn)的。簡單說Scrapy的日志建立在Python標準庫logging之上沒有自己另搞一套。它內(nèi)部維護了一組以scrapy開頭的logger實例比如scrapy.core.engine、scrapy.core.scraper、scrapy.core.downloader、scrapy.middleware、scrapy.extensions.logstats等等。爬蟲在運行過程中引擎、下載器、中間件、擴展這些組件都會往對應(yīng)的logger里寫日志事件。這些日志事件本身只是一條條帶級別和上下文的消息真正決定它們?nèi)ツ睦锏氖莚oot logger上的handler。Scrapy啟動時會調(diào)用configure_logging()做一次統(tǒng)一配置如果你設(shè)置了LOG_FILE就往root logger加一個FileHandler如果沒有就加一個StreamHandler輸出到控制臺。第三方庫比如requests、selenium、playwright打出來的日志只要是通過標準logging產(chǎn)生的也會被root logger一起捕獲。很多人在這個環(huán)節(jié)困惑的點是為什么我設(shè)置了LOG_FILE之后控制臺什么都沒有了因為默認的配置邏輯就是文件或控制臺二選一——設(shè)置了LOG_FILE就只寫文件。要讓兩者同時輸出就得自己配多個handler。這一點我在第4章的統(tǒng)一方案里會解決。理解了日志的三個關(guān)鍵角色logger誰產(chǎn)生消息、handler消息去哪里、formatter消息長什么樣子后面所有配置你都能自己推出來。Scrapy給的settings項本質(zhì)上都是對這些角色的操作LOG_LEVEL控制logger的過濾級別LOG_FILE決定handler是文件還是屏幕LOG_FORMAT和LOG_DATEFORMAT控制formatter的模板。搞懂這層對應(yīng)關(guān)系你就不會被各種配置項繞暈了。2. settings.py 里的日志開關(guān)最常用的配置方式2.1 核心配置項逐一拆解Scrapy的日志配置絕大部分都在settings.py里完成下面這幾個是必須掌握的。LOG_ENABLED默認True。這個開關(guān)控制是否啟用日志系統(tǒng)我建議永遠別關(guān)。有些人為了讓爬蟲跑得快一點會把它關(guān)掉一旦出問題連排查依據(jù)都沒有得不償失。LOG_LEVEL默認DEBUG。在生產(chǎn)環(huán)境我強烈建議改成INFO。別小看這個改動DEBUG級別的日志量通常是INFO的好幾倍具體來說scrapy.core.engine在DEBUG級別下幾乎每個請求的進出都會打兩條日志高并發(fā)爬蟲一天能多寫幾個GB。LOG_FILE默認None。不設(shè)置就是輸出到控制臺設(shè)置了就寫入文件。注意一點這個配置本身不做切割和LOG_LEVEL配合使用進生產(chǎn)環(huán)境前一定要先解決輪轉(zhuǎn)問題。LOG_FILE_MODE默認wb。這個很多人沒注意到它控制文件的寫入模式wb會覆蓋舊文件。也就是說每次啟動爬蟲同名日志文件會被清空重寫。如果你想保留歷史日志需要改成ab追加模式。但更推薦的做法還是用第4章的滾動handler。LOG_FORMAT默認字符串是%(asctime)s [%(name)s] %(levelname)s: %(message)s。這里可用的是Python logging標準字段比如%(filename)s、%(lineno)d需要時自己拼。LOG_DATEFORMAT默認%Y-%m-%d %H:%M:%S。按自己喜好調(diào)整我習(xí)慣加上毫秒%Y-%m-%d %H:%M:%S,%f排查對比兩個事件的先后順序時很有用。LOG_SHORT_NAMES默認False。如果設(shè)為True日志里的[scrapy.core.engine]會被簡寫成[engine]。我建議保持False生產(chǎn)環(huán)境日志就是要信息全多幾個字符不算什么。LOG_STDOUT默認False。如果設(shè)為TruePython的print輸出也會被重定向到日志系統(tǒng)里。這個選項適合那種代碼里殘留了很多print的老項目臨時救急很好用但新代碼還是老老實實用logger。下面用一個表格把這些匯總配置項默認值生產(chǎn)環(huán)境建議說明LOG_ENABLEDTrueTrue總開關(guān)LOG_LEVELDEBUGINFO控制日志量LOG_FILENone配合輪轉(zhuǎn)使用文件輸出LOG_FILE_MODEwbab覆蓋或追加LOG_FORMAT標準模板建議加時間毫秒日志格式LOG_DATEFORMAT日期默認建議加毫秒時間格式LOG_SHORT_NAMESFalseFalse保留完整logger名LOG_STDOUTFalse看需求print重定向2.2 命令行和代碼里的覆蓋配置配置日志不一定非要寫在settings.py里Scrapy支持多種覆蓋方式優(yōu)先級是命令行參數(shù) settings.py 代碼默認值。命令行方面scrapy crawl myspider -L WARNING可以直接覆蓋日志級別scrapy crawl myspider -s LOG_FILExxx.log可以動態(tài)指定日志文件。這個主要用于臨時排查問題比如線上日志量太大不想全量記錄可以先用-L WARNING看一下有沒有錯誤堆棧。代碼層面如果要在一個腳本里用CrawlerProcess跑多個爬蟲并分別控制日志可以通過get_project_settings()拿到settings對象后修改它的值再傳給CrawlerProcess。注意修改必須發(fā)生在CrawlerProcess實例化之前。如果是用CrawlerRunner在Twisted reactor里跑多個爬蟲同理必須在create_crawler之前改。我見過一些項目會在一個進程里連續(xù)跑多個爬蟲然后發(fā)現(xiàn)第二個爬蟲的日志級別不對就是因為settings對象在第一個爬蟲啟動時被改了沒有給第二個爬蟲恢復(fù)。這種場景建議不要再改全局settings而是每個爬蟲在自己的custom_settings里定義日志配置Scrapy會在創(chuàng)建該爬蟲實例時合并這些配置。2.3 日志級別選擇的實戰(zhàn)建議一條經(jīng)驗法則開發(fā)用DEBUG預(yù)發(fā)布用INFO核心鏈路用WARNING兜底。生產(chǎn)環(huán)境全量開DEBUG通常是不必要的。我們算一筆賬假設(shè)一個爬蟲每秒處理50個請求DEBUG級別下引擎日志和下載器日志加起來每個請求大概3~4條每秒就是200條日志。如果每條平均100字節(jié)一天就是1.7GB。而INFO級別下同樣的爬蟲一天的日志量通常在200MB以內(nèi)。差距是數(shù)量級的。但也不能只看數(shù)量。生產(chǎn)環(huán)境如果完全不開INFO很多關(guān)鍵信息會丟失。比如spider_opened和spider_closed是INFO級別item_scraped如果是通過LogStats輸出的也是INFO級別這些是你判斷爬蟲是否健康的核心依據(jù)。所以我的建議是生產(chǎn)環(huán)境默認INFO頻繁出錯的環(huán)節(jié)單獨用logger.warning或logger.error輸出既控制量又不丟關(guān)鍵信息。3. 理解Scrapy的擴展機制日志系統(tǒng)背后的推手3.1 Scrapy擴展是什么為什么日志要依賴擴展很多人在熱詞里搜scrapy中extensions是什么其實就是沒搞懂Scrapy里那套插件機制。Scrapy擴展Extension本質(zhì)上是普通的Python類通過from_crawler類方法獲得crawler實例然后借助crawler.signals.connect訂閱爬蟲生命周期中的各種信號比如spider_opened、spider_closed、item_scraped、response_received等在這些事件發(fā)生時執(zhí)行自己的邏輯。日志和統(tǒng)計數(shù)據(jù)強相關(guān)而Scrapy的統(tǒng)計數(shù)據(jù)Stats Collector本身就是一個跨組件的狀態(tài)容器所以日志功能天然適合用擴展來實現(xiàn)。最典型的例子是Scrapy內(nèi)置的LogStats擴展它會在爬蟲運行期間每隔一段時間輸出一條類似這樣的日志2024-06-18 10:30:00 [scrapy.extensions.logstats] INFO: Crawled 1200 pages (at 4 pages/min), scraped 850 items (at 3 items/min)這條日志不是引擎自動打的就是LogStats這個擴展在收到定時信號后從Stats Collector里取出數(shù)據(jù)通過logger輸出的一條INFO消息。理解這一點你在解決日志不輸出的問題時就會多一個排查方向是不是自定義擴展或默認擴展被禁用了Scrapy里有EXTENSIONS_BASE這個默認擴展集合里面包含了LogStats、CoreStats、Debugger等。你自己添加擴展可以通過EXTENSIONS配置項而禁用默認擴展也可以在這個配置里顯式設(shè)為None。3.2 手寫一個日志統(tǒng)計擴展按站點和狀態(tài)碼輸出理解了機制我們就直接實操。下面這個擴展解決的問題很典型大型爬蟲往往要跑多個站點你會非常需要知道每個站點的響應(yīng)狀態(tài)碼分布、Item產(chǎn)出速率。Scrapy標準LogStats只給總量不給細分維度所以我們自己寫一個擴展。import logging from collections import Counter, defaultdict from scrapy import signals logger logging.getLogger(crawler.site_health) class SiteStatsLogExtension: def __init__(self, crawler, log_every500): self.crawler crawler self.stats crawler.stats self.log_every log_every self.response_counter Counter() self.item_counter defaultdict(int) self.total_count 0 classmethod def from_crawler(cls, crawler): ext cls(crawler, crawler.settings.getint(SITE_STATS_LOG_EVERY, 500)) crawler.signals.connect(ext.spider_opened, signals.spider_opened) crawler.signals.connect(ext.response_received, signals.response_received) crawler.signals.connect(ext.item_scraped, signals.item_scraped) crawler.signals.connect(ext.spider_closed, signals.spider_closed) return ext def spider_opened(self, spider): logger.info(site stats module started, log every %d events, self.log_every) def response_received(self, response, **kwargs): site getattr(response, site_name, None) or response.url.split(/)[2] self.response_counter[(site, response.status)] 1 self.total_count 1 if self.total_count % self.log_every 0: self._emit_current_stats(spider_hint) def item_scraped(self, item, spider, **kwargs): site getattr(spider, site_name, None) or spider.name self.item_counter[site] 1 def _emit_current_stats(self, spider_hint): resp_summary { f{site}:{status}: cnt for (site, status), cnt in self.response_counter.items() } item_summary dict(self.item_counter) logger.info( site health snapshot responses%s items%s, resp_summary, item_summary, ) def spider_closed(self, spider, reason): self._emit_current_stats(spider_hintspider.name) logger.info(site stats module closed, total events %d, self.total_count)然后在settings.py里注冊這個擴展EXTENSIONS { myproject.extensions.SiteStatsLogExtension: 500, }數(shù)字500表示優(yōu)先級數(shù)字越小越早執(zhí)行。這樣在爬蟲跑起來后每處理500個響應(yīng)就會輸出一條包含狀態(tài)碼分布和item數(shù)量的JSON風(fēng)格日志配合第4章的結(jié)構(gòu)化輸出可以直接拿去喂給日志平臺做告警。注意事項有兩個。第一response_received信號攜帶的response在中間件里不一定有site_name屬性所以我在代碼里做了兜底——取URL的域名。這在實際運行中很關(guān)鍵不然擴展剛上線就會因為AttributeError導(dǎo)致整個爬蟲掛掉。第二擴展里的異常處理不能省略如果_emit_current_stats內(nèi)部出問題也不能讓它影響主流程可以在方法體外面套一層try/except生產(chǎn)環(huán)境的擴展代碼必須默認日志系統(tǒng)不能拖垮爬蟲主線。4. 生產(chǎn)環(huán)境日志配置結(jié)構(gòu)化、滾動與集中采集4.1 文件無限增長的坑滾動策略與handler替換回到第一章那個事故上根治辦法就是給日志加滾動。但Scrapy的LOG_FILE配置項只創(chuàng)建FileHandler并不提供滾動能力所以需要自定義handler。這里有一個關(guān)鍵的實現(xiàn)前提Scrapy的configure_logging()會在crawler創(chuàng)建時運行如果你只是在settings.py頂層直接往root logger加handler很可能被它清掉。我踩過這個坑最后采用的穩(wěn)妥方案是寫一個擴展監(jiān)聽engine_started信號在日志系統(tǒng)初始化完成后替換root logger的handlers。import logging import os from logging.handlers import TimedRotatingFileHandler from scrapy import signals class LogRotationExtension: def __init__(self, log_dir, backup_days): self.log_dir log_dir self.backup_days backup_days classmethod def from_crawler(cls, crawler): ext cls( log_dircrawler.settings.get(LOG_DIR, logs), backup_dayscrawler.settings.getint(LOG_BACKUP_DAYS, 7), ) crawler.signals.connect(ext.engine_started, signals.engine_started) return ext def engine_started(self): root logging.getLogger() # 移除Scrapy默認添加的handler避免重復(fù)輸出 for handler in root.handlers[:]: root.removeHandler(handler) os.makedirs(self.log_dir, exist_okTrue) formatter logging.Formatter( %(asctime)s [%(name)s] %(levelname)s: %(message)s, datefmt%Y-%m-%d %H:%M:%S,%f, ) file_handler TimedRotatingFileHandler( os.path.join(self.log_dir, scrapy.log), whenmidnight, backupCountself.backup_days, encodingutf-8, ) file_handler.setFormatter(formatter) root.addHandler(file_handler) console_handler logging.StreamHandler() console_handler.setFormatter(formatter) root.addHandler(console_handler)TimedRotatingFileHandler的whenmidnight表示每天零點切割backupCount7保留最近7個日志文件自動刪除更早的。如果一臺機器上日志寫入量很大也可以改用RotatingFileHandler按文件大小切割比如單文件超過500MB切一個。這兩種方案都能解決磁盤被寫滿的問題。替換handler時注意root.handlers[:]的切片復(fù)制是為了邊遍歷邊刪除直接遍歷原列表會出問題。另外因為擴展的from_crawler在日志配置之后執(zhí)行engine_started在爬蟲引擎啟動時才觸發(fā)所以這個替換是安全的不會與Scrapy默認handler的初始化邏輯產(chǎn)生競態(tài)沖突。4.2 結(jié)構(gòu)化日志輸出讓每一條日志都能被程序解析生產(chǎn)環(huán)境的日志不應(yīng)該只是給人看的還要能被采集、檢索、統(tǒng)計。最強的做法是把日志輸出成JSON格式。這樣后續(xù)接入ELK或Loki時不需要寫一堆grok解析規(guī)則直接按字段查就行。實現(xiàn)方式是用自定義Formatter。下面是我項目里在用的一個輕量實現(xiàn)不依賴第三方庫import json import logging class JsonFormatter(logging.Formatter): def format(self, record): data { timestamp: self.formatTime(record, self.datefmt), logger: record.name, level: record.levelname, message: record.getMessage(), } if record.exc_info: data[exc_info] self.formatException(record.exc_info) return json.dumps(data, ensure_asciiFalse)然后在上一節(jié)的擴展里把file_handler.setFormatter(JsonFormatter())替換掉普通Formatter??刂婆_仍然可以用人類可讀的Formatter文件用JSON這樣兼顧排查和機器采集。這里有一個細節(jié)message里如果包含對象json.dumps會被類型卡住。我在生產(chǎn)里只允許字符串、數(shù)字、字典和列表有一個簡單的兜底辦法對message做str()強制轉(zhuǎn)換但這樣嵌套結(jié)構(gòu)就不好看了。更干凈的做法是在寫入日志時統(tǒng)一用logger.info(xxx, extra{payload: {...}})然后在Formatter里拼裝??傊罩酒脚_字段越多后續(xù)監(jiān)控告警越靈活。ensure_asciiFalse必須加上不然中文全變成\u轉(zhuǎn)義序列看起來非常痛苦。這是一行必須記住的代碼。4.3 敏感信息脫敏與記錄邊界爬蟲日志經(jīng)常會把URL、Cookie、Token、請求參數(shù)一起打出來這在本地沒問題但生產(chǎn)環(huán)境的日志往往會被采集到統(tǒng)一的日志平臺這就有信息泄露風(fēng)險。我在日志系統(tǒng)中做了兩層防護。第一層在可能涉及敏感信息的日志位置不打印完整內(nèi)容。比如請求頭里的Cookie就用logger.debug(cookie: ***)或者只打前幾個字符。但代碼是很多人寫的靠自覺不可靠。第二層更穩(wěn)妥的辦法是加Filter。Filter可以在日志事件到達handler之前修改或丟棄消息。下面這個Filter會把常見敏感字段的值替換成掩碼import re class SensitiveDataFilter(logging.Filter): def __init__(self, patternsNone): super().__init__() self.patterns patterns or [ (r(cookie[:]\s*)[^;\s], r\1***), (r(token[:]\s*)[^\s], r\1***), (r(password[:]\s*)[^\s], r\1***), ] def filter(self, record): msg record.getMessage() for pattern, repl in self.patterns: msg re.sub(pattern, repl, msg, flagsre.IGNORECASE) record.msg msg record.args () return True這個Filter要添加到所有輸出到外部的handler上而不是只加在root logger上。如果你只加在一個handler上控制臺能看到原始信息、日志平臺只能看到脫敏信息這在某些場景下是有意為之的但要注意統(tǒng)一不然排查問題時會對著脫敏后的日志干瞪眼。4.4 日志分析工具選型日志采集和分析是生產(chǎn)環(huán)境繞不開的一環(huán)。如果項目規(guī)模不大單機幾臺服務(wù)器我推薦輕量方案Filebeat Loki Grafana。Filebeat負責(zé)讀日志文件Loki負責(zé)存儲和索引Grafana做可視化。這套方案比ELK輕得多對內(nèi)存的占用只有ELK的幾分之一尤其適合小團隊自己維護。如果公司已經(jīng)有ELKElasticsearch Logstash Kibana那就直接接入Filebeat把日志推到Logstash或者用Elastic Agent直接發(fā)到ES。因為日志已經(jīng)是JSON結(jié)構(gòu)化不需要再在Logstash里寫grok解析整個鏈路會很流暢。關(guān)于AI工具精準分析日志我的態(tài)度是AI適合做輔助排查、發(fā)現(xiàn)異常模式、解釋報錯堆棧但前提是日志必須結(jié)構(gòu)和采集做得好。如果日志是一堆無規(guī)則的文本任何AI工具也很難榨出有效信息。所以第一步永遠是先把日志結(jié)構(gòu)化和集中化然后再考慮讓AI幫你從海量日志里找線索。我自己用下來覺得AI在給出一段報錯、讓它猜測可能原因這個場景效率很高但在實時監(jiān)控告警上還是規(guī)則和指標更可靠。5. 生產(chǎn)環(huán)境實操一個可直接落地的完整配置5.1 完整配置包settings、擴展、啟動命令把前面幾章的東西串起來我現(xiàn)在給出一個可以直接抄的配置包。項目的目錄結(jié)構(gòu)大致是這樣myproject/ ├── scrapy.cfg ├── myproject/ │ ├── settings.py │ ├── extensions/ │ │ ├── __init__.py │ │ ├── log_rotation.py │ │ └── site_stats.py │ └── spiders/settings.py里這樣寫LOG_ENABLED True LOG_LEVEL INFO LOG_FILE_MODE ab LOG_ENCODING utf-8 LOG_SHORT_NAMES False # 自定義日志擴展 EXTENSIONS { myproject.extensions.log_rotation.LogRotationExtension: 100, myproject.extensions.site_stats.SiteStatsLogExtension: 500, } # 擴展用到的自定義配置 LOG_DIR logs LOG_BACKUP_DAYS 7 SITE_STATS_LOG_EVERY 500這里的優(yōu)先級數(shù)字要注意LogRotationExtension的優(yōu)先級是100SiteStatsLogExtension是500數(shù)字小先執(zhí)行。滾動日志的初始化在engine_started時執(zhí)行而SiteStats在spider_opened時才開始統(tǒng)計兩者不會沖突。如果你還用了playwright抓動態(tài)頁面尤其是帶iframe的復(fù)雜頁面記住一個經(jīng)驗給每次iframe上下文切換和頁面加載的關(guān)鍵節(jié)點打上spider.info級別的日志但別在請求循環(huán)里打印完整DOM。我處理過一個案例爬蟲在抓某個嵌套三層iframe的頁面時偶爾超時就是靠日志里記錄的iframe加載狀態(tài)才確認是某個廣告iframe一直在刷接口導(dǎo)致的這種問題靠肉眼是看不出來的。5.2 驗證與性能壓測日志系統(tǒng)的瓶頸在哪里配置完之后不要直接上生產(chǎn)先做兩件驗證日志是否按預(yù)期切分以及日志IO對爬蟲吞吐的影響。切分驗證很簡單手動改系統(tǒng)時間或者觸發(fā)一次midnight切割比較麻煩可以用whenS和interval3600臨時跑一小時驗證或者干脆把when設(shè)成H每小時一切在生產(chǎn)上也夠用我更喜歡按小時切割便于按小時粒度去回溯問題。驗證輸出觀察logs/scrapy.log.2024-06-18這類帶日期的歸檔文件是否生成以及scrapy.log本身是否被清空重建。性能方面我的實測經(jīng)驗是單進程500QPS以內(nèi)同步FileHandler沒有任何壓力超過1000QPS日志寫入會開始拖累主流程尤其是每個請求打多條DEBUG時更明顯。解決方案有兩個方向一是降低日志級別、減少日志事件數(shù)量二是用異步handler比如QueueHandler配合后臺線程消費。簡單可用的異步方案代碼import logging import queue from logging.handlers import QueueHandler, QueueListener log_queue queue.Queue(-1) queue_handler QueueHandler(log_queue) queue_listener QueueListener( queue_handler, file_handler, console_handler, respect_handler_levelTrue, ) queue_listener.start()把queue_listener.start()放在擴展的engine_started里然后把queue_handler作為root logger的唯一handler。這樣主線程把日志事件丟進隊列就立刻返回真正寫文件的IO在后臺線程做。壓測下來在1200QPS的場景下異步方案讓爬蟲吞吐幾乎沒有下降。但這個方案的代價是進程退出時可能丟日志所以要在爬蟲關(guān)閉時調(diào)用queue_listener.stop()確保隊列消費完。這里就不展開完整生命周期管理了生產(chǎn)使用務(wù)必在spider_closed或close_spider里處理。5.3 監(jiān)控告警日志不只是用來事后排查日志的最高級用法是變成實時監(jiān)控信號。我習(xí)慣在項目里實現(xiàn)一個爬蟲心跳日志每隔固定時間如果爬蟲還在正常產(chǎn)出item就輸出一條心跳日志如果連續(xù)多個心跳周期沒有產(chǎn)出監(jiān)控平臺就會告警。實現(xiàn)思路還是依賴Stats Collector。在上一節(jié)的SiteStats擴展基礎(chǔ)上增加一個計時邏輯import time class HeartbeatMixin: def __init__(self, crawler, heartbeat_interval300): self.crawler crawler self.heartbeat_interval heartbeat_interval self.last_item_time time.time() def item_scraped(self, item, spider, **kwargs): self.last_item_time time.time() # 原有統(tǒng)計邏輯... def _check_heartbeat(self, spider): idle_seconds time.time() - self.last_item_time if idle_seconds self.heartbeat_interval: logger.warning( heartbeat missing: spider%s idle_seconds%s, spider.name, idle_seconds, )然后在settings里用extension連接一個定時信號或者更簡單地在item_scraped里檢查時間差。因為爬蟲總是在處理item所以這個檢查不需要額外定時器。如果爬蟲卡死item_scraped本身就不會觸發(fā)但heartbeat missing日志也會消失所以需要外部監(jiān)控配合——監(jiān)控平臺如果沒有在5分鐘內(nèi)收到該爬蟲的任何日志就觸發(fā)告警。這套邏輯我在多個項目里都用屬于投資小、回報高的一類監(jiān)控。另一類告警是基于錯誤率。我會讓擴展維護一個錯誤狀態(tài)碼統(tǒng)計比如在一個窗口內(nèi)5xx比例超過20%就通過logger.error輸出一條特定前綴的告警日志由監(jiān)控平臺直接截獲轉(zhuǎn)發(fā)。這樣做的好處是業(yè)務(wù)告警邏輯完全收斂在爬蟲項目里運維側(cè)只需要配置一條匹配規(guī)則。6. 常見問題排查實錄8個真實Case速查日志系統(tǒng)出問題翻文檔往往沒用因為網(wǎng)上都是照抄配置不講為什么。下面這8個Case是我這幾年實際遇到過的整理成速查表。現(xiàn)象直接原因解決辦法設(shè)置了LOG_FILE但文件是空的LOG_ENABLED被改成False檢查settings和啟動參數(shù)控制臺突然沒有日志設(shè)置了LOG_FILE后默認只寫文件按第4章方式自定義雙handler日志隔一段時間翻倍增長自定義擴展重復(fù)添加handler先remove再add做冪等處理磁盤被日志撐爆使用了LOG_FILE沒有輪轉(zhuǎn)用TimedRotatingFileHandler日志中文亂碼FileHandler默認編碼不對LOG_ENCODINGutf-8 或創(chuàng)建handler時指定日志級別改了不生效命令行-L參數(shù)優(yōu)先級更高檢查crawl命令完整參數(shù)某些中間件的日志看不到該中間件用的是第三方logger確認root logger級別必要時單獨設(shè)level爬蟲崩了但日志里沒有堆棧異常發(fā)生在信號回調(diào)里被吞掉在擴展和信號處理里增加try/except并logger.exception逐條展開說一些寶貴經(jīng)驗。第一個設(shè)置LOG_FILE后文件為空我排查過好幾次最后發(fā)現(xiàn)是settings.py里某個環(huán)境判斷邏輯在這個環(huán)境下把LOG_ENABLED設(shè)成了False。不要覺得這個配置沒人動生產(chǎn)環(huán)境經(jīng)常有多套配置互相覆蓋。第二個控制臺沒日志很多人以為是代碼問題其實是Scrapy文件或控制臺二選一的默認邏輯。如果你既想保留控制臺輸出又想寫文件就別用LOG_FILE改用自定義handler。第三個日志翻倍增長。這個最有隱蔽性因為不是報錯只是日志從某次上線后突然暴增。最后查到是一個監(jiān)控擴展重復(fù)執(zhí)行了root.addHandler每注冊一次就多一個handler同一條日志被寫N遍。解決辦法是在addHandler之前先遍歷移除同類handler或者維護一個標志變量。第四個磁盤被日志撐爆就是第一章的場景。不重復(fù)了。第五個中文亂碼。Scrapy的LOG_FILE用的是系統(tǒng)默認編碼在有些服務(wù)器上是ASCII中文直接變成問號或拋異常。設(shè)置LOG_ENCODING utf-8即可。自定義handler時記得在FileHandler(..., encodingutf-8)里顯式指定。第六個日志級別不生效。有一回我一個爬蟲里設(shè)置custom_settings {LOG_LEVEL: DEBUG}但跑起來還是INFO。原因是我在命令行用了-L INFO命令行優(yōu)先級高于custom_settings。所以要檢查完整啟動命令別只盯著代碼。第七個第三方庫日志丟失。常見的比如selenium的webdriver_manager日志、requests的urllib3日志。Scrapy的root logger默認會捕獲它們但有些庫創(chuàng)建了獨立的logger并設(shè)置了propagate False導(dǎo)致日志不會冒泡到root。處理辦法是顯式設(shè)置該logger的級別和handler比如logging.getLogger(urllib3).setLevel(logging.WARNING)。第八個爬蟲崩了但沒堆棧。這個坑在自定義信號回調(diào)里最典型。信號回調(diào)如果拋出異常經(jīng)常會被Twisted的日志系統(tǒng)捕獲并打到一個獨立的logger里如果不仔細看你只會看到spider關(guān)閉不知道異常在哪。我在所有擴展的公共方法里都加了兜底def _safe_log(self, func, *args, **kwargs): try: func(*args, **kwargs) except Exception: logger.exception(extension method failed: %s, func.__name__)日志系統(tǒng)本身的故障不能影響爬蟲主流程這是生產(chǎn)環(huán)境的底線。最后再分享一個小技巧。排查日志問題時我通常會先在本地用scrapy crawl myspider -L DEBUG -s LOG_ENABLEDTrue跑一小段把全部日志落到一個臨時文件里然后對比生產(chǎn)環(huán)境的差異。這比直接改生產(chǎn)配置快很多。生產(chǎn)環(huán)境配置日志是個慢功夫一次配好、持續(xù)觀察、逐步優(yōu)化比出問題再救火舒服太多了。希望這篇內(nèi)容能讓你在配置Scrapy日志時少踩幾個坑。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
人妻少妇色综合| 超级碰碰视频无码| 超碰狠狠操| 日日操日日射| 丁香五月AV在线| 成人片在线免费看| 色www99| 婷婷视频网| 色综合综合网| 深爱激情久久| 啪啪啪啪五月天| 日韩激情网站| 天天综合色99| 91av无码| 久久丁香婷| 丁香婷婷深情五月亚洲| 五月天久久婷婷| 五月婷婷狠狠干| 九九综合视频在线观看| 婷婷五月天成人| 99热在线网站| 国产99久9在线| 无码激情AAAAA片-区区| 中文字幕按摩做爰| 被强行糟蹋的女人A片| 九九这里有精品| 金桔一区二区ab地址| 人妻丰满精品一区二区A片| 五月丁香无码| 色综合激情| 久久开心五月天激情| 欧美美女国产日韩一区二区久| 婷婷丁香色情| 激情五月天综合网| 91九色国产| 91丨九色丨老农村| 4399在线观看免费高清黄色视频| 五月丁香六月成人| 五月婷婷丁香综合| 99综合| 91操在线视频| 激情AV| 欧美性猛交99久久久99| 99久久99九九九99九他书对| 九九热这里只有精品7| 欧美天堂久久| 九九aV| 97丁香五月| 久久综合网桃花| 欧美超碰亚洲| 日本女人久久| 夜夜夜天天操| 亚洲无码成人性爰网| 99热国产这里只有| 开心激情播播五月天| www.亚洲激情| 桃色五月天| 五月丁香婷婷爱| 五月激情综| 洗浴中心操B视频| 日日艹思思热| 日本视频欧美观看免费| 玖玖99精品视频| 玖玖热99| 丁香五月久久| 狠狠干青青草| 99色色视频| 精品爆操| 爱射综合| 操操熟女| 婷婷五月天最新综合你懂的| 色5月婷婷| 人人噜天天上| 人妻AV在线| 亚洲AV网站| 婷婷深爱五月| 国产高清视频91九九九久久久| 另类图片五月天婷婷| 五月丁香毛片| 欧美综合激情五月丁香| 天天日夜夜曹| 人人草人人舔| 日本三级网址| 26uuu国产色| 久久只这里有精品| 婷婷综合97| 五月天激情久久| 国产一区二区三区影院| 日本天堂免费99| 99色视频在线观看最新| 色五月丁香在线| 亚洲视色| 国产精产国品一二三在观看| 99久久.www| 成人av免费观看| 俺五月| 色香欲综合| 色综合九九| 激情性爱五月天网页| 日韩 mm 不卡| www.操逼comm| 婷婷五月天社区| 97伦乱| 91九色小视频| a久久免费视频| 五月婷婷激情久久| 超碰2021| xx综合网| 午夜免费试看| 99久高清视频| 五月四色婷婷| 丁香六月啪啪| 久久资源网五月婷| 婷婷五月草| 五月婷婷五月| 亚洲成人av在线| 五月天久久成人| 4399人妻无码久久久| 专区无日本视频高清8| 亚洲视频1区| www.天天干.com| XX色综合| 久cao香蕉影院| 91色噜噜狠狠狠狠色综合| 日韩欧美四五区| www.henhenl| 丁香六月在线综合| 亚洲综合网激情小说| 色综合天天综合成人网| 九九热内射| 丁香五月婷婷深爱综合激情| 久久久久亚洲AV成人无码电影| 久久97久久99久久综合欧美| 九月丁香婷婷综合激情| 99久久99九九99九九九| 91精产品自偷自偷综合| 色综合久久88色综合天天99| 996re热精品视频| 婷五月丁香俺| 久99热| 日本婷婷在线| 六月丁香中文字幕| 婷婷丁香成人五月天| 五月丁香伊人网| 操骚货在线| 一本色道久久88加勒比—| 五月丁香亭亭天天舔| www.99热视频| 丁香五月激情宗合网| 五月婷婷丁香| 亚洲碰碰碰| 五月丁香婷爱在线| 亚洲国产网站| 可以免费观看的AV| 久草a片| 亚洲综合色色| www.久久婷婷| 91婷婷色五月| 色九九综合| 丁香五月婷婷亚洲色图| 九月丁香亭亭| 六月婷婷中文字幕| 久青青久| 丁香五月五月婷婷欧美大香蕉| jiujiu热在线视频| 中文字幕网伦射乱中文| 久久99久久99精品免视看婷婷| 99色色| 久久综合婷婷| 色婷婷五月天| 97婷婷五月| 校园春色亚洲色| 婷婷六月开心网| 噼里啪啦在线观看免费完整版视频| 激情综合网五月在线播放| 色婷天天| 色欲操| 久久精彩免费视频| 91精品国产综合久久密臀| 极品人妻VIDEOSSS人妻| 激情综合五月色丁香婷婷| 婷婷久综合| 婷婷五月色亚洲| 亚洲AV无码成人电影| 婷婷激情五月综合丁| 七月丁香婷婷 色色| 伊人狠狠干| 五月天婷婷青青草| 成人综合视频在线| 五月丁香久久网| 99热精品在线| 婷婷色丁香六月| 超碰丁香五月| 五月婷婷基地| 色情免费视频播放| 超碰资源在线| 内射爽无广熟女亚洲| 五月丁香网中文字幕| 2025神马午夜福利| 丁香婷婷九月| 天天色天天干天天插| 97啪在线观看视频| 操逼巨乳91| 久久女婷| 色色色com| 天天爱天天吃狠天天透| 五月丁香啪啪啪免费看| 五月婷婷丁香大香蕉| 丁香五月欧美激情| 五月天色婷婷图片| 五月天婷婷免费| 欧美精品999| 五月婷婷之六月丁香| 丁香五月伊人| 色五月AV| 5月婷婷激情在线| 久9视频| 少妇搡BBBB搡BBB搡毛茸茸| 五月天六月婷婷电影| 91成人看片| 久久99久久99精品免视看婷婷| 天天干天天 亚洲| www.97干视频| 色色五月婷婷狠狠| 日本丁香五月| 99热在线观看| 婷婷色网站| 99热亚洲| 9久热在线精品| 丁香激情五月天| 可以观看的AV| 5月丁香综合网| 激情丁香五月AV| 五月天伊人| 5月婷婷激情网| 超碰在线99| 久久久全国免费视频| 亚洲在线操| 五月丁香久久久| 丁香五月婷婷av| 99精品偷自拍| 99热精品中文字幕| 天天日天天操心| 久久综合热17c| 亚洲av网址| 精品一二三区久久AAA片| 色婷婷久久综合久色综| 99热这里有精品2| 婷婷五月天久久久| 婷婷色在线视频| 成人国产网站在线免费看| 99久久99久久| 亚洲激情五月| 天天爱夜夜爽| 深爱激情网噜噜色| 日韩av干| 五月婷婷亚洲综合网| 九九五月天| 激情五月天.色网| 最近中文字幕2019视频1| 色五月婷婷操逼| 天天做天天爱综合| 我爱va亚洲va52| 天天摸天天舔在线视频| 99热老网站| 九九中文字幕九| 婷婷五月欧美综合| 国产午夜精品一区二区三区四区 | 久久六月天| 开心激情网五月天| 涩涩涩五月天| 日欧大屏操| 5月丁香六月婷婷| 日本丁香五月婷婷| 天天操夜夜夜拍拍拍| 丁香五月六月久久综合| 五月六月婷婷激情网| 影音先锋色婷婷| 日本毛片内射| 99超级碰碰| 狠狠色丁香婷婷| 极品五月天| 香蕉久久五月| 99在线看片| 黄桃AV无码免费一区二区三区| 五月综合久久| 五月色情| 激情五月天色色色| 丁香五月激情综合婷综| 人人操人人爽成人AV| 日韩无码人妻一区二区| 2017狠狠干| 激情五月丁香六月综合AVXXXX| 在线亚洲综合| 伊人婷婷色| 丁香五月黄色| 亚洲在线资源| 婷婷丁香77777| 欧美日韩一a.无| 超碰久热| 无码G高清天| 六月香五月婷| 26uuu另类亚洲欧美日本一| www.色五月天.com| www.minyis.com【JT】实力收量可预付QQ2101460746 | 亚洲啪视频| 97影院一级片| 婷婷爱五月天| 99riAV成人在线视频| 九九草草逼| 色都都狠狠色都都色综合色| 色婷婷丁香综合中文字幕| 婷婷操久久| 欧美熟女99| 大功率国产在线| 欧美激情丁香五月天久久婷婷一区| 日本婷婷丁香五月| 五月天国产婷婷精品视频在线| 这里只有精品免费视频| www.久久99| 丁香五月婷婷啪啪| 在线免费观看激情视频| 婷婷五月天堂| 五月丁香在线婷婷蜜桃| 精品丁香五月天在线播放| 天天综合五月| 精品一二三区久久AAA片| 热热色色五月天婷婷| 另类图片五月天婷婷| 久久婷婷内射| www.狠狠狠.com| 五月丁香婷婷成人综合网| 色婷婷六月| 99热久| 日韩黄在免| 五月天丁香综合在线| 国产激情AV| 就爱啪啪婷婷| 9九色首页| 99热这里只有精品5| 青青草青青草五月天| 婷婷丁香综合| 久久国产性爱A V| 热成人网| 婷婷五月丁香五月| 丁香五月婷婷Av| 五月丁香久久综合| 六月丁香五月婷婷| 五月天婷婷色播综合在线| 久re热视频| 99re思思在线视频| 色情久久久| 欧美成人AAA片一区国产精品| 日韩AV中文字幕在线| 九九日本视频| 六月婷婷视频| 五月丁香婷婷激情图片| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 久久99热这里只频精品6学生| 亚洲殴洲精品Av在线| 亚洲超碰在线| 免费亚洲婷婷五月| 乱乱av| 色爱综合网| 国产精品久久7777777精品无码| 久久久久婷婷| 成人丁香五月婷| 婷婷97狠狠干| 色婷网| 日韩美一级毛卡片| 99热在线这里只有精品| 综合网亚洲| 色婷婷丁香社综合| 五月深爱激情网| 99热在线观看精品| 久久婷婷五月综合色奶水99啪| 俺去也在线官网| 婷婷五月天开心网| 噜噜噜狠狠色综| www.深爱激情| 桃色五月婷婷| 色婷婷五月天成人网| 99视频在线| 99精品视频推荐| 色小说五月婷婷| 91狠狠综合久久久久久| 99热在线爱| 狠狠色丁香婷婷久久综合| 狠狠五月婷婷| 五月丁香婷婷激情在线| 色色五月天婷婷| 色婷婷大香蕉| 五月天啪啪视频| www,色综合| 婷婷香五月综合激情| 五月天婷婷久久| 色综合com| 99这里都是精品| 停停六月 综合| 日日肏夜夜干| yw国产AV| 成人视频婷婷| 色五月色五天色情网址| 五月丁香六月婷婷国产视频| 碰久久精品w| WWW.99热| 五月丁香日逼| 99爱在线免费视频| 久久综合色情网站| 丁香五月影视| 日韩啪啪视频| 天天做天天爱天天高潮| 五月婷婷视频啪啪美女| 精品一二三区久久AAA片| 爱性综合网| 丁香五月电影| 五月天婷综合网站| 中文字幕乱码亚洲精品一区| 婷婷五月天免费| 97很鲁在线视频| 天天婷婷天天| 国产免费一区二区三州老师F1……| 1995年关宝慧版蜘蛛女| 青青草原爱爱网| 99视频精品全部观看10| 9久久久久久久久久久| 五月婷婷深深爱| 4399在线日本A片| 中文字幕在线日亚洲9| 国产精品久久久久久白浆色欲| 91色在线/日韩| 五月婷婷免费在线| 91人人人人人| 天天日夜夜拍| 午夜亚洲国产精品av一区二区| 欧美性爱五月天| 99re思思| 亚韩精品视频1区| 这里精品| 久久九九爽| 五月婷婷久久综合| 婷婷六月激情在线视频| 久久精品99久久久久久| 激情婷婷五月天| 涩五月丁香| 丁香五月激情欧美| 丁香五月偷拍| 99re最新地址| 91性高潮久久久久久久久| 97色色婷婷| 婷婷五月天a| 玖玖爱伊人| 俺去也五月天| 99r这里| www.yw色| 香蕉AV福利精品导航| 丁香色情五月综合网站| 丁香六月婷婷综合激情欧美| AV片一区在线观看| 九九99九九99九九99视频网| 五月天婷婷青青| 五月天伊人久久| 色婷婷色99国产综合精品| 综合激情五月丁香| 99色在线观看视频| 99久久国产宗和精品1上映| 99热在线成人网站| 天天做综合| AV亚洲在线| 91热在线| 99热这里只有精品官网| www.久久| 狠狠色九月| 99在线免费观看| 十月丁香九月婷婷综合| 91精品电影18T| 日韩AV免费| 日本婷婷五月天| 色五月激情五月天| 五月丁香激情综合六月涩涩爱| 色婷婷91| 婷婷五月丁香综合网| 中文AV在线播放| 爱婷婷久久视频| 99在线观看| 五月婷婷婷色| 色婷婷基地 | 久久综合影院| www.深爱激情| 亚洲五月天伊人| 五月丁香 啪啪| 在线超碰免费| 亚洲无AV在线中文字幕| 婷婷久久综合| 啪啪婷婷五月天激情| 六月丁香激情综合| 欧美激情丁香五月天久久婷婷一区| 五月激情射| 激情五月天久久| 久久激情五月| 色色操| 婷婷爱五月天| 五月丁查人人| 狠狠五月天婷婷激情网。| 成人噜噜网| 激情啪啪五月| 色播五月天婷婷老师| 久久婷青青草原| 激情久久久| 在线中文av| 色婷久久| 欧洲色| 亚洲aV写真天天综合网久久| 一级A片天天操夜夜操| 玖玖伦理电影| 免费国产VA国产免费| www.色婷婷.com| 日本在线wwww| www.91AV.COM| 5五月综合网亚洲| 在线看片h站| 99热在线观看| 日本乱子人伦在线视频| 91 九色大美女| 无码人妻精品一区二区蜜桃色欲| 五月天色色网站| 色九九综合| 国产成人av在线播放| 97碰碰视频| 婷婷99狠狠| 天天澡天天狠天天天做| 五月婷婷综合网| 色婷婷五月综合| 丁香五月六月综合激情| 干一干xxxx| 五月天成人综合| 天天做天天爱| 97在线刺激| 国产婷婷五月天| 色色五月婷婷久久| 色噜噜婷婷| 狠狠干无码| 丁香六月婷| 五月丁香啪| 另类少妇人与禽zOZZ0性伦| 色色亚洲| www。五月,com| 久久五月天丁香花| 性色婷婷| 青青草原中文字幕| 五月丁香好婷婷A片网| 色噜噜在线| 夜夜骑天天玩天天日| 五月天亭亭俺也| 综合99视频| 日本色道视频网站| 五月婷婷影院| 91丨九色丨老熟女激情| 亚洲精品在线视频| 色婷婷狠狠干| 五月色网| 六月丁香综合| 欧美性猛交XXXX乱大交极品| 午夜激情久久| 九色视频91疯狂| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 五月天天天色| 婷婷五月花| 日韩人妻在线播放| 9久国产精品| 成人天天爽| 婷婷五月天99| 婷婷娌伦网| 日韩无码专区| 91碰操| 日韩久久视频| 久久99久久99精品免视看婷婷| 婷婷五月中文在线视频| 五月丁香婷婷在线| 91九九九九| 九九偷拍网| 97在线精品| 翔田千里无码| 久久婷婷五月丁香网| 婷婷激情五月| 久久在线92| 久热这里这里有精品| 亚洲综合热| 26uuu精品国产| 香蕉影院色| 久久婷婷网| 噜噜噜噜在线| 色婷婷狠狠爱| 国产精品A片在线| 狠狠干综合| 九一99| 丁香五月天色婷婷| 888久久久| 国产在线6| 天天爽天天| 无码少妇高潮喷水A片免费| 色综合偷拍| 精品综合久久久久久五月天| 9久久久久久久久久久| 四季8848精品成人免费网站| 久久婷婷色情7777网站| 狠狠操婷婷| 99视频只有精品| 免费AV在线网址| 国产精品五月丁香| 99热日本| 婷婷五月18永久免费网站| 视频免费精品免费精品免费精品免费精品免费精品免费精品免费99 | 久久全色| 天天爽曰日爽| 少妇综合网| 六月婷基地| 天天草天天日| 亚洲人妻av伦理| 国产1区2区3区| 五月婷精品| 蜜桃成语时李时珍 免费| 噜噜操操| 天天天综合网| 91麻豆国产三级精品福利在线观看| 亚洲AV成人在线| 久久激情网| 91丁香色| 五月丁香六月婷婷色| 色五月激情婷婷| 欧美大道不卡| 色五月丁香婷婷| 色色婷婷综合| 97婷婷丁香五月| 五月婷婷性爱| 婷婷在线观看五月天在线视频| 97久久草草超级碰碰碰| 激情无码网| 久久激情五月婷婷| 中文字幕精品推荐免费在线观| 人妻videos人妻高清| 国产这里只有精品| 天天色月| 亚洲婷婷五月天| 丁香色婷婷| 亚洲啪视频| 久热AA| 色天堂A| 91精品无码久久久久久五月天| 亚洲免费婷婷| 丁香 亚洲 久久| 五月叮香啪| 亚洲第二AV| 六月丁香六月婷婷欧美| 94干大香蕉| 婷婷情爱五月天6| 丁香六月婷婷久久亚洲天堂| 天天骑天天操| 五月婷久久草| www.久久久久久久| 九九色影院| 亚洲激情网| 丁香五月天在线观看视频| 熟女激情五月天| 久久精品性爱视频,| 天天插天天爽| 亚洲综合干| 九九无码AV| 99r这里| 久久艹网| 欧美激情综合色综合啪啪五月| 伊人网碰碰| 99热婷婷| 日韩黄黄| 碰碰碰97国产| 五月丁香六月激情视频| 91人妻人人做人碰人人爽九色| 日韩视频99| 九热在线这里有精品6| 亚洲V国产V欧美V久久久久久| 色综合综合色| 99啊精典免费视频| 91狠狠综合久久| 777久久精品| 丁香五月天天久久综合小说| 5月婷婷6月六月丁香| 激情99| 五月婷婷激情网| 国产精品国产VA片国产| 中文在线成人| 国产成人+综合亚洲+天堂| 久久午夜理论| 五月间天堂综合| 六月丁香激情网| 全国最新疫情| 久久综合婷婷五月| 五月激情小说| 色色日本| 婷婷五月天中文字幕.| 婷婷六月天国产综合| 中文久久婷婷| 激情五月天啪啪| 亚洲色婷婷久久99精品91| 欧美在线干| 色情激情五月| 超碰在线视屏| 丁香婷婷五月色综合| 国产成人AV在线播放| 婷婷五月花免费视频在线| 一区二区无码视频| 人妻AV在线| 视色综合| 五月开心婷婷网| 亚洲精级| 99热| 精品99在线观看| 色播丁香五月婷婷操:屄| 18久久| 国产成人网址| 99人妻碰碰碰久久久久视| 亚洲在线激情婷婷五月| 久久免费丁香| 天久综合91综合首页| 综合久久97| 日日日影院| 五月天狠狠网站| cao视频,现在观看| 99热成人| 伊人婷婷大香蕉| 天天做 天天爱| 一起草av| 午夜成人综合| 性爱111111| 五月天色图| AV色婷婷| 色99网站| 色噜综| Se.婷婷五月天| 丁香五月激情网| 67194线路二在线观看| 婷婷操逼| 色五月成人| 丁香色五月天| 丁香婷婷色五月合集| Xx色综合| 丁香九月激情| 日本色久| www.91在线看| 婷婷黄色网| 桃色成人网| 色偷偷综合| WWW.婷婷五月天.COM| 欧美五月丁香| 日日夜夜综合| 亚洲综合婷婷| 狠狠色综合777| 五月婷婷色播视频| 中文字幕在线免费| 久久精品91视频| 人妻五月天激情开心网| 日本熟女啪啪| 午夜激情四射影院| 九热网站| 五月天婷婷青青草| 综合色在线| 五月色情| www.色五月| 嫩BBB搡BBBB榛BBBB| 久久99久久99精品免视看婷婷| 91久久婷婷| 91精品丝袜久久久久久| 无码激情| 久久婷婷精品| 99免费在线| 91九色网| 99热这里只有精品首页| 99热在线只有精品| 色噜噜狠狠一区二区三区| 九色自拍| 一起草AV| 激情av| 极品人妻VIDEOSSS人妻| 欧美大片| 96丁香婷婷九月蜜桃综合久久| 色婷婷呢狠禁久禁| 五月婷婷伊| 婷婷五月开心六月AV| 涩玖玖免费视频| 九九超碰人人| www.91在线观看| 亚洲成人AV在线播放| 99热人人| 人人干天天舔| yazhouzonghesese| 婷婷五月天资源| 狠狠狠狠狠狠狠狠| 欧美日韩成人在线网站| 啊v视频在线观看| 丁香五月天电影| 青青青在线视频国产| 艳妇野外情欲放荡HD| 欧洲综合一区| 影音先锋偷偷色男人站| 婷色五月天| 久久婷婷五月国产激情综合片| 婷婷六月丁香色| 丁香六月亚洲综合| 五月天六月色| 日本99热| 强辱丰满人妻HD中文字幕| 久久性都花花世界成人免费视频| 人人操人人看97干| 超碰人人射| 激情五月激情综合网一级丸片| 婷婷五月激情欧美大胆视频| 五月在线| 五月天伊人网| 五月婷婷影视| 九月婷婷激情| 婷婷五月天色丁香| 丁香五月在线看| 色日本综合| 99热在线观看| 色情激情五月婷婷| 天天肏夜夜肏| 色婷婷五月亚洲| 97干综合网| 亚洲人妻av伦理| 亚洲人成网站999久久久综合| 亚洲成人高清在线| 色久五月| 极品另类| 亚洲乱码日产精品BD| 9色免费网| site:pzdcoin.com| 综合激情网激情五月。| 婷婷综合在线| 五月停停99| 色啪影院| www、色色色| 婷婷网五月天| 狠狠干狠狠操狠狠爱| 日韩欧美五月丁综合| 无码色色| 亚洲精品成人| 婷婷久久图片| 久久狠狠色| 日本激情91| 婷婷五月丁香亚洲| 亚洲精品亚洲人成人网| 天天操电影院色狼性av| 色婷网| 97碰人人操| 九九热区一区二区三区| 丁香大香蕉| 色九九九综合| 九九精品这里只有| 久久狠狠干| 婷婷字幕在线| 噜综合| 123草逼网| 色就色94欧美setu| VA五月激情在线| 一本色道久久综合狠狠躁小说| 日本欧美成人片AAAA| 久久多色| 五月丁香六月婷婷欧美综合| 疯狂做受XXXX高潮A片动画| 久久婷婷色综合| 综合激情网激情五月。| 99国产精品久久久久久久久久久 | 婷婷色导航| 五月天婷婷在线观看| 精品国产乱码久久久久夜深人妻| 日韩色五月| 久热网站| 五月婷婷色欲| 激情涩涩网| 日韩啪啪视频| 超碰高清在线| 五月丁香操亭亭网| 操碰色一区就去操| 国内婷婷丁香社区在线播放| 婷婷五月天丁香花| 婷婷五月激情的图片| 人人射人人高潮| 久久五月婷综合| 思思99精品视频在线观看| 丁香五月婷婷色| 狠狠爱婷婷| 五月天婷婷在线视频| 大香蕉视频婷婷| 五月天四色房丁香| 久碰视频| 深爱激情网五月| 激情綜合W W W,激情五月天| 综合久久影院| 欧洲一区二区| 丁香五月激情综合婷综| 欧美婷婷精品激情| 亚洲视频码| 这里只有精彩亚洲视频推荐| 综合色在线| 丁香五月婷婷天激情| 三年高清大片免费观看国语| 欧美成人热| 天天日天天舔| 开心五月婷婷六月丁香| 99精品热| 激情综合网婷婷久久| 久久久com| 26uuu美女三级视频| 婷婷爱五月| 91丨九色丨熟女高潮| 五月婷婷激情网| 五月激情啪啪| 四色综合网| 性爱视频久久| aaaaaa片| 99热在线观看| 996热re视频精品视频这里| 色色色com| 丁香五月五月婷婷五月天激情四射| 久久久久9久无码视频| 99免费视频网| 停停六月 综合| 1区2区视频| 97碰久久| 五月色综合| 婷婷丁香五月天色区| seuuu婷婷| 色色网站在线| 中文字幕精品在线观看| av大香蕉| 天干干夜夜操| 亚洲无码影片| 99这里有精品| 九九久久99| 欧美三级A做爰在线观看| 26uuu欧美亚洲日韩| 亚洲色频| 激情丁香六月| 丁香六月 婷婷六月| 99视频这里有精品| 日本VA视频| 99婷婷国产最新视频| 色色色色网| 国产精品-91JQ就要激情网91JQ6.91JQ27.CASA:16888 | 久99热| 成人av观看| 99色综合| 99国产小视频| 天堂爱啪啪| 99爱在线视频| 狠狠操在线视频| www色综合亚洲92| 久久99视频| 96性爱视频| 丁香五月综合久久| 五月天综合| 99综合激情久久精品久久| 久久大香蕉视频| 五月婷婷色| 丁香五月天网友自拍啪啪啪视频| 色婷婷五月在线| 精品一二三区久久AAA片| 婷婷色五月色| 五月丁香六月色婷| 九九综合九色欧美狠狠| 激情综合啪啪| 日本va视频| 婷久久| 婷婷在线网| 最新久久网址| 色婷婷影音| 五月婷婷丁香综合| 婷婷5月久久综合网站| 亚洲无码成人| 五月婷婷免费视频| 五月天婷婷免费| 亚洲12p| 五月丁香久久久久| 五月丁香激情婷婷综合| 婷婷性爱影院| 五月丁香 狠狠爱| 婷婷狠狠干| 真实亲子乱子伦高清在线观看| 99惹在线精品免费观看| 日本久久9| 国产欧美日韩综合精品一区二区| 久久九九国产精品怡红院| 色婷婷丁香五月天在线视频| 六月婷基地| 丁香婷婷五月份| 99爱爱| 日韩1区2区| 蜘蛛女免费观看完整版高清电影| 大胆伊人久久| 99国产在线精品视频| 9l视频自拍9l九色成人| 五月丁香六月婷婷综合网站| 97丁香花五月天激情小说| 六月婷欧美| 精品自拍99| 202丰满熟女妇大| 91热在线| 99久久这里只有精品| 午夜无码精品色综合久久| 俺也去婷婷五月天第五色| 婷色视频| 岛囯综合激情网| 夜精品无码A片一区二区蜜桃| 超碰在线视屏| 色婷婷久久综合久色综| 日日射天天射| 激情小说婷婷小说| 香蕉国产2013| 久久久精品99| 婷婷五月天丁香综合网| 乱岳熟女50岁| 99综合视频| 超碰免费成人| 丁香六月综合激情| 婷婷丁香色无五月| 国产99精品免费视频| 九九热这里只有精品5| 伊人网啪啪| 日韩成人综合| 九月停停| 九九婷婷热| 国产精品成人AV在线观看春天| 狠狠的日| 97人妻碰碰碰久久香蕉| 99爱视频| 日本色五月婷婷| 五月丁花六月丁香综合| 中文字幕婷婷五月天在线观看| 激情综合网激情五月网| 欧美亚洲999| 蜜臀A∨在线水帘洞| 热的国产99热| AV堂狠狠干| 99热网站| 超碰免费人人| 五月天丁香网| 亚洲综合九九| 操人91| 激情综合区| 亚洲人妻AV| 色婷婷视频| 玖玖在线视频| 婷五月丁香俺| 欧美激情 日韩无码 婷婷 五月天| 丁香综合婷婷开心激情网| 欧美黑人大吊| 精品色情一区二区三区四区| 思思99热在线| 人妻五月天激情开心网| 丁香五月激情六月| 五月丁香色婷婷综合| 久久免费视频62| 欧美丁香婷婷五月天| 日日干天天| 强伦轩人妻一区二区电影| 婷婷在线综合| 五月丁香色| 丁香六月婷婷| 久久人妻超碰一区| 婷婷综合玖玖五月| 欧美日韩国产一区二区| 婷婷丁香亚洲色综合91| 国产成人av在线播放| 99色综合| 丁香婷婷五月天色综合| 五月天色综合服务平台| 66精品成人免费网站在线观看| 99热这里只有精品16| 亚洲秘 无码一区二区三区妃光/1| 狠狠色噜噜狠狠狠狠综合| 亚州操人在线视频| 成人无码髙潮喷水A片| 狠狠爱青青草| 九九激情视频| 五夜婷婷| 深爱激情小说五月婷婷| 亚洲丁香五月在线观看| 婷婷六月亚洲综合| 91操碰| 午夜不卡久久精品无码免费| 精品视频网| 99热亚洲| 五月丁香直播| 99色性爰网络| 久久99综合| 国产乱人偷精品人妻A片| 99热亚洲综合| 丁香六月婷婷综合| 色五月激情综合| 婷婷天天婷婷天天澡| 99热这里全是精品| 久久综合婷婷激情| 久久综合首页| 色日本丁香婷婷| 99亚州综合精品成人网| 色色丁香| 亚洲丁香五冃97色| 91碰超| 俺五月| www.99日本| 北京熟妇搡BBBB搡BBBB| 99日在线观看视频| 色五月婷婷五月丁香五月激情五月视频| 开心五月婷| 97婷婷狠狠| 国产免费性爱| 色碰碰| 婷婷激情五月综合丁| 婷婷九月综合| 日韩av变天就操逼不卡区| 五月天综合久久丁香91| 色婷婷五月基地在线| av色色国产| 天天做天天爱| 色五月欧美| 欧爱综合视频| 九热视频在线精品15| 精品一二三区久久AAA片| 老妇操B| 九九热视频免费观看| 99久在线精品| www.色欲丁香婷婷| 丁香六月婷婷综合激情欧美| 天天噜噜| 777精品久无码人妻蜜桃| 九九色院| 亚洲麻豆乱码国产2028| 五月天色色色| 丁香综合久久| 手机激情网| 久久久久er热| 欧美人人超级碰| 狠狠色激情在线| 91婷婷丁香| 99热日本精品| 极品人妻videosss人妻| 色色五月婷婷| 成人啪啪色婷婷久| 色婷五月天网站| 欧美色婷婷| 国产激情在线| 色婷婷狠狠干芒果TV| 激情丁香五月婷婷| 丁香五月欧美成人| 26uuu亚洲| 激情98色婷婷五| 丁香五月综合色婷婷| www.黄色片-久久成人国产精品在线播放-999AV| 激婷网| 婷婷日| 五月激情综合网| 大香蕉啪啪| 精品人妻伦一二三区久| 久久精品熟女亚洲AV麻豆| 五月激情婷婷开心五月| 99爱爱| 在线天堂9| 久久五月丁香| cao视频,现在观看| 丁香五月天五码婷婷| 欧美日韩99| 婷婷久热| 五月丁香成人| 67194中文字幕| 五月丁香婷婷AV| 天天婬色综合| 婷婷丁香激情| 欧美成人在线观看| 开心五月婷婷六月丁香| 热久久这里只有精品| 丁香五月婷婷啪啪啪| 色色五月婷婷久久| 九九视屏| 大婷婷色呦呦噜噜色呦呦噜噜| 激情五月天99色| 丁香六月啪| AV在线免费网站| 国产免费一区二区三区三州老师F1F1.CC| 婷婷五月激情天| 九热av| 五月婷婷久| 午夜成人av在线| 婷婷色成人| 丁香五月瑟瑟| 天天干天天射色综合| 狠狠婷婷日韩| 亚洲aV写真天天综合网久久| 色九九九综合| 五月婷天天搞视频| 99热九九九九| 婷婷深爱五月丁香| 激情婷婷综合网| 四月婷婷五月丁香| 九九热99熟女| 97在线精品视频| 亚洲天堂99| 综合激情视频| 青草性爱视频| 欧美精品中文字幕亚洲专区| 极品 少妇 内射| 色婷婷成人色网| www激情五月天| 午夜丁香 婷婷| 五月婷婷亚洲| 97色婷婷| 丁香五月激情五月| www.五月天婷婷姐姐| 亚洲超碰青涩| 亚洲另类视频| 91.com男女操| 久久精品性爱| 涩涩涩婷婷| 色色色色色色色五月| 99热只有这里有精品| 婷婷五月综合网| 激情综合网色播五月| 激情综合网激情五月网| 超碰2021| 久久视频婷婷| 天天色月| 九九9久九9国产视频| 丁香婷婷色| 九热视频在线精品15| 99久久这里只有精品| 韩国婷婷丁香五月| 精品一区二区三区三区| 黄网免费观看| 99热这是里只有精品| 色五月色开心开心五月| h在线看免费版在线看| 亚洲婷婷在线播放十月| 爱99干99| 色婷丨日丨天丨综合久久| 精品一二三区久久AAA片| 97综合在线| 婷婷激情五月天在线视频| 综合色在线| 久久婷婷五月综合啪| 五月天激情黄色小说在线观看 | 丁香五月婷婷99| 九九性视频| 久色五月婷婷综合| 夜夜久久综合网| 五月天激情网图片| 色色网站| 五月丁香爱婷婷深深| 91呦呦呦| 97人人操人人爽| 五月丁香六月停停| 日韩AV在线免费观看| 欧美成人精品A片免费一区99| 五月天激情无码| 看婷婷五月天网| 亚洲欧美日韩另类| 激情六月婷婷| 五月天亭亭俺也| 韩国情人在线电视剧免费观看高清版全集 |