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

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(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)成了一個習慣接到新項目第一件事就是把Scrapy日志系統(tǒng)和生產(chǎn)環(huán)境配置從頭到尾梳理一遍。這篇博文就把我積累的這些東西完整寫出來包括日志系統(tǒng)的工作原理、settings里的各種開關(guān)、擴展機制、生產(chǎn)環(huán)境落地配置還有我踩過的坑。不管你是剛把本地爬蟲腳本改成生產(chǎn)任務還是被日志問題搞得焦頭爛額這篇內(nèi)容應該能幫你節(jié)省不少排查時間。1. 先從一次線上事故說起日志系統(tǒng)為什么值得認真對待1.1 那個把磁盤寫滿的日志文件那次事故的具體情況是這樣的項目大概每天爬取30萬條商品數(shù)據(jù)跑了一個多月沒出過問題。某個凌晨我的告警電話響了說爬蟲進程消失了systemd把它標記為failed。我登錄服務器一看磁盤使用率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)這件事本身就是部署層該負責的但在實際項目中大多數(shù)人不會單獨給爬蟲配一個logrotate任務于是日志就成了定時炸彈。后面第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等等。爬蟲在運行過程中引擎、下載器、中間件、擴展這些組件都會往對應的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的模板。搞懂這層對應關(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)整我習慣加上毫秒%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對象在第一個爬蟲啟動時被改了沒有給第二個爬蟲恢復。這種場景建議不要再改全局settings而是每個爬蟲在自己的custom_settings里定義日志配置Scrapy會在創(chuàng)建該爬蟲實例時合并這些配置。2.3 日志級別選擇的實戰(zhàn)建議一條經(jīng)驗法則開發(fā)用DEBUG預發(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)碼輸出理解了機制我們就直接實操。下面這個擴展解決的問題很典型大型爬蟲往往要跑多個站點你會非常需要知道每個站點的響應狀態(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個響應就會輸出一條包含狀態(tài)碼分布和item數(shù)量的JSON風格日志配合第4章的結(jié)構(gòu)化輸出可以直接拿去喂給日志平臺做告警。注意事項有兩個。第一response_received信號攜帶的response在中間件里不一定有site_name屬性所以我在代碼里做了兜底——取URL的域名。這在實際運行中很關(guān)鍵不然擴展剛上線就會因為AttributeError導致整個爬蟲掛掉。第二擴展里的異常處理不能省略如果_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避免重復輸出 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[:]的切片復制是為了邊遍歷邊刪除直接遍歷原列表會出問題。另外因為擴展的from_crawler在日志配置之后執(zhí)行engine_started在爬蟲引擎啟動時才觸發(fā)所以這個替換是安全的不會與Scrapy默認handler的初始化邏輯產(chǎn)生競態(tài)沖突。4.2 結(jié)構(gòu)化日志輸出讓每一條日志都能被程序解析生產(chǎn)環(huán)境的日志不應該只是給人看的還要能被采集、檢索、統(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)一的日志平臺這就有信息泄露風險。我在日志系統(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ī)模不大單機幾臺服務器我推薦輕量方案Filebeat Loki Grafana。Filebeat負責讀日志文件Loki負責存儲和索引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的復雜頁面記住一個經(jīng)驗給每次iframe上下文切換和頁面加載的關(guān)鍵節(jié)點打上spider.info級別的日志但別在請求循環(huán)里打印完整DOM。我處理過一個案例爬蟲在抓某個嵌套三層iframe的頁面時偶爾超時就是靠日志里記錄的iframe加載狀態(tài)才確認是某個廣告iframe一直在刷接口導致的這種問題靠肉眼是看不出來的。5.2 驗證與性能壓測日志系統(tǒng)的瓶頸在哪里配置完之后不要直接上生產(chǎn)先做兩件驗證日志是否按預期切分以及日志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)使用務必在spider_closed或close_spider里處理。5.3 監(jiān)控告警日志不只是用來事后排查日志的最高級用法是變成實時監(jiān)控信號。我習慣在項目里實現(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è)務告警邏輯完全收斂在爬蟲項目里運維側(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日志隔一段時間翻倍增長自定義擴展重復添加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)控擴展重復執(zhí)行了root.addHandler每注冊一次就多一個handler同一條日志被寫N遍。解決辦法是在addHandler之前先遍歷移除同類handler或者維護一個標志變量。第四個磁盤被日志撐爆就是第一章的場景。不重復了。第五個中文亂碼。Scrapy的LOG_FILE用的是系統(tǒng)默認編碼在有些服務器上是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導致日志不會冒泡到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| 99久久免费看精品国产一区| 午夜高清成人在线视频| 上床啊啊啊| 天天插天天干| aaa亚无码专区| 少妇综合网| 欧美大码在线视频| 在线观看一级α片刺激高潮视频| 狠狠操狠狠燥| 久久人妻丝袜一区二区三| 天天干人人乐| 91精品免费| 一区二区三区日韩欧美| 麻豆啪啪啪视频| 啊啊啊好舒服视频| 91激情综合| 伊人影院在线理论播放| 久久东京伊人一本到鬼色| 91N综合网在线| 伊人久久艹| 日韩性爱小视频| 亚洲天天精品| 91第一页| 国产一区二区三区不卡手机在线| 五月天久久久| 欧美日韩黄片精品在线| 一二三区精品视频| 亚洲视频精选| 人人干人人搞人人摸| 国产精品另类| 中国小夫妻勾搭露脸淫荡对白| 国产无套粉嫩白浆在| 综合伊人激情| 一级日本牲交大片好爽在线看| 97久久久久| 国产AV天美传媒一区二区三区 | 粉嫩av一区二区三区天美传媒| 加勒比伊人综合| 啪啪91| 国内精品嫩模A∨私拍小视频| 好爽要喷了| 无码操逼天堂| 青青草原成人| 老熟妇一区二区三区| 中文字幕人乱码中文字的预防方法 | 亚洲制服欧美另类内射| 国产在线精品偷| 岛国1区2区3区在线观看| 日韩操啪| 亚洲熟女中文字幕在线| 77777亚洲蜜臀精品久久综合蜜臀| 亚欧高清在线| 婷婷丁香五月天综合东京热| 自拍偷拍草一草| 九九九九九九视频免费| 91天美免费| 天天综合色图| 自怕偷自怕亚洲精品| 91丝袜| 久久精品国产亚洲粉嫩| 久久的免费性爱视频| 久艾草在线精品视频在线观看| 成人乱人伦一区二区| 欧美色干| 女同女同恋久久级三级| 亚洲成人久久美女| 91久久久视| 区一在线观看| 国产精品久久久久久久久久久久久久久久久久| 中文字幕精品人妻丝袜| 亚洲色偷偷色噜噜狠狠99网| 一二三区在线| 裸体美女久久久| 综合91网| 精品一级毛片在线观看| 成 人 A V免费视频在线观看| 亚洲人妻爽爽爽| 国产色产精品在线观看| 精品久久久无码| 校园春色 男人天堂 | 色综合一本| 国产精品久久久久亚洲av| 在线播放免费av福利片| 一区二区三区精品黑丝白丝酒店对鸡 | 北条麻妃99精品青青久久| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 无码137片内射在线影院| 青娱乐久久艹| 67914亚洲精品| 国产少妇高潮| 九九九九一区| 国产精品视频麻豆入口| 日本三级中国三级99人妇网站| 日本三级小说中文字幕| 大香久久| 天堂九九九九九九九九九| 综合网久久| 97在线视频网站| 国产AV精久久| 亚洲91大片| 国产高清成人免费视频| 在线一道啪| 色九九九| 国产51色综合久久免费| 伊人网在线观看| 精品综合久久久久久97| 亚洲无吗在线视频| 另类老少妇| 正在播放国产精品一区| 久久av色| 91伊人| 无码国产Av| 欧美一级欧美三级在线观看| 亚洲精品97| 99精品久久| 91色宗合| 翘臀vidoes| 91老熟女| 91视频成人福利网站在线一区| 综合91网| 亚洲四虎熟女精品| JuliaAnnXXX888| 在线有码中文字幕| 日本东京热大香蕉a片| 97在线观| 中文字日本乱码| 中文字幕日韩专区精品系列 | 亚洲日韩精品久久久久一区壹牛| 青娱乐大香蕉| 最新日产中文在线麻豆| 精品久久久久综合无码| 欧美在线官网| 亚洲天堂7777| 91大香蕉伊人| 日本高清电影欧美色图| 色视频蜜乳| 欧美78| 丝袜熟女一区二区三区| 亚洲美女高潮喷水视频| 激情视屏国产乱伦强奸| 久久精品操| 天天综合精品| 亚洲福利中文字幕在线| 久九色| AAA久久| 亚洲日韩国产精品| 欧美色图在线视频少妇| 五月婷婷六月色| 舔人妻中文免费视频| 岛国黄色短视频| 久久999久| 国产 v乱码一区二| 黄色片A级一区二区三区| 欧美国产有色电影| 久久久999网站| 日韩操逼HD| 综合网少妇| AV天天在线观看| 精品国产无码中文| 爱逼综合| 人人操人人操人妻人| 青青草吊丝| 欧美久久伊人| 亚洲乱色熟女一区| 青青色在线观看| 91中文精品日韩欧美在线| 亚洲国产日韩欧美熟妇在线| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 欧美一二三区四五区| 精品成人动漫一区二区| 国产精品国产精品国产| 综合色久欲| 97人人中文网| 成人夜夜爽| 国产色精品午夜大片| 97香蕉网| 91观看 国产白丝| 亚精品无码毛片一区二区三区| 五月婷婷六月色| 免费在线观看国内色片网站网址| 亚洲成aⅴ人片不卡无码| 欧成人精品一区二区三区| 超碰天天操| 丝袜制服字幕在线| 美日韩成人| 亚洲成a人在线观看久| 国产在线视频午夜精华在| 一区二区无码视频| 97超色| 啊啊啊97视频| 看黑人AV不卡| 亚射在线| 日韩熟女精品无码专区一区二区| 一区二区日韩欧美久久| 99在线精品视频| 亚洲av淫乱| 日韩卡一卡二卡三在线| 亚洲AV无码AV吞精久久久久 | ,国产乱人伦精品一区二区三区| av大香蕉| 色五月婷婷麻豆在| 蜜桃视频精品一区二区| 亚洲激情综合| 欧美毛片在线网| 99热9| 丁香九月激情| 欧美躁死她一区二区| 九九亚洲视频| 亚洲有码 欧美精品| 精品久久艹| 嗯嗯啊好大| 99999久久精| 精产国品一区二三产品| 成人草草视频| 美女尤物人人操| 女人天堂AV五区在线| 欧美亚洲日本视频久久久| 综合欧美激情网| 另类专区在线观看| 91狠婷| 精品人妻1237| 东京热大香焦| 国产熟女无套内射| 国产中文字幕在线点播| 亚洲欧美综合区自拍另类| 先锋色眉乱伦资源| 另类小说五月天| 99亚亚热| 狠狠操狠狠燥| 一二三区操逼国产91| 日韩欧美大片免费高清啪啪| 成人av影院在线观看| 顶级丝袜熟女一区二区三区 | 色综合 加勒比| 精人妻一区二区三区| 欧美亚洲综合高清在线| 先锋激情∨在线视频播放| 日本高清有码网址视频| 中文啪啪视频| 级品肉射| 91精品91久久久久77777俄罗斯老妇姓x| 黄页av| 黄色大片免费在线| 老司机午夜福利视频一区二区| 欧美性爱网97| 亚洲毛片基地专区| 久久精视频美日韩在线视频| 淫淫总合网| 超碰久久草| 夜夜欧美| 日韩欧美国产一区二区三区四区| 婷婷五月天网| 97爱啪| 精品综合久久久久久五月天| 自偷自拍的亚洲视频| JULIA人妻风俗店中出电影| 嫩草影院永久在线制服丝袜| 91丝袜在线播放| 成人aⅴ一区二区三区| 一本道综合色图| 福利在线视频一区二区| 精品亚洲| 丰满人妻一区二区三区在线| 91中文字幕在线观看| www.亚洲成人一区| 亚洲性爱高潮影院| 亚洲日本大香蕉1| AV一区观看| 欧美天天拍| 新怡红院| 狠狠激情综合狠狠操中文字幕| 成人网欧美风情| 久久久久久十| 乱伦熟女区| 一本久久精品中文字| 粉嫩av在线| 综合色色网| 中文字幕女同在线| 久久青青草原免费视频| 亚洲一区二区 麻豆传媒| 蜜臀久久99精品久久久久久-DVD| 亚洲另类在线观看| 国产9熟妇视频网站| 免费簧片在线观看| 女人天堂网| 人人操人人操草草| 91成人精品| 开心五月婷婷激情| 天天久久久久久| 中文字幕成人理论在线| 欧美激情黑人| 天天操天天舔| 欧美性色欧美| 少妇超碰在线| 91久久久久久久久18| 120分钟婬片免费看| 女人天堂网| 亚洲欧洲综合视频在线| 日韩大香蕉| 亚洲综合春色| 操逼无码操逼| 人人噜夜夜操| 97精品综合久久| 中国特猛少妇色xxx| 五月天开心网| 国产强奸乱伦无码视频| 欧美在线55555| 久久成人国产| 久久大香蕉97| 日韩紧密久久| jk白丝没脱就开始啪啪| 一区超碰一区| 91neishe| 99在线无码精品秘 入口黑人| 久9久精品视频| 在线强奷到舒服的无码视频 | 入口操逼网站| 欧姜老司机| 欧美 日韩 国产传媒| 国产对白刺激视频| 狠狠97| 长长久久88视频| 色欲天天综合久久久无码网中文| 黄色一区三区| 99国内精品| 中国AV美女| 中文字幕精品三级久久久| 亚洲 日本 一 二 三| 欧美成熟性爱精品| 黑人性欧美| 日韩紧密久久| 久久久激情| 国产午夜精品理论片一二三区区| 九草九九九| 精品久久青青草| 无码WWW免费视频网站| 欧美日本不卡在线| 欧美熟女丝袜| 欧美少妇一区二区三区| 亚洲AV永久无码一区仙野| 人妻天天爽天天爽三区| 97在线亚洲| 久草精品国产蜜臀 | 果冻传媒A片一二三区| 亚洲黑丝在线| 国模精品娜娜一二三区| 7777奇米影视久久| 天天操天天舔| 欧美97免费| 亚洲国产精品久久久男人的天堂| 99成人| 欧美精品久久久久久久久88| 美国日韩黄片| 欧美成人性活片| 超碰在线综合97| 高跟伊人julia ann| 久久久激情| 艹少妇网站| 强奸乱伦免费网站| 国产辣妈在线视频福利| 亚洲在线a| 91麻豆天美国产欧美高潮| 人人搡人人肉久久精品| 99青青草国产视频| yazhousetuoumei| 日韩亚洲美州欧洲综三区一品在线| 亚欧视频在线| 日韩图区 偷拍| 操B视频日韩无码| a男人的天堂久久一级A毛片| 天天射天天操天天干天天吃2018| 97碰| 国产欧美日本亚洲精品| 人人艹亚洲| 99老司机精品视频在线观看| 狠狠操官网| 精品亚洲成人免费在线| 天天射天天| 亚洲好看强奸乱伦| 狠狠中文字幕| 免费在线观看国内色片网站网址| 久久精品国产亚洲AV无码做| 强奸乱伦大香蕉网| 午夜大香蕉| 午夜免费视频1000| 欧亚综合一卡二卡中文字幕| 91色艳| 欧美老熟另类| 国产午夜精品理论片a大结局| 欧综合网| 日韩免费a级毛片无码a∨| 大香蕉78| 成人无码在线超碰网| 亚洲乱色熟女一区| 久久三| 国产精品青草综合久久| 久久久久免费少妇| 91熟女综合| 狠狠爱夜夜干| 午夜一区| 秋霞成人一级在线观看| 天天干夜夜一操| 激情五月婷婷综合| 九九成人精品| 中文字幕精品亚洲熟女| 超碰97欧美| 久久精品福利影院| 韩国三级理论在线| 亚洲国产综合久久久性感熟妇| 久草毛片电影怡| 97操综合| 中文字幕丰满人妻日本| 黄片免费久久久久久久| 欧美性特| 欧美一级专区免费大片| 国产一区在线看| 久热影视| 97五月天| 亚洲色图 综合| 97在线视频免费看| 国产精品视频麻豆入口| 欧美综合97www| 亚洲清纯唯美| 免费a级毛片av无码久久精品中文字幕| 国产av又色又爽又黄| 97人人操人人干| 看黑丝美女操逼青青网站| 加勒比无码毛片| 天美传媒国产原创中文字幕亚洲欧美另类 | 伊人色综合网电影| 人妻无码久久一区二区三区免费| 一区二区三区不卡视频| 韩国一级做A片免费的| 91女神在线视频| 欧美成人精品一区二区男人蜜臀| 久久久精品91八戒| 男人的天堂2019AV| 俺去啦自拍| 中文字幕一区二区三区四区在线视频| 大香蕉亚洲中文| 欧美天天在线| 91人妻最真实刺激绿帽| 久极品在线观看| 97欧美综合网| 国模少妇一区二区三区| 亚州九九九精品视频| 亚洲人成网站7777| 久99久视频精选| 成人情色综合网| 日本免费专区| 欧美日韩亚洲五月天婷婷| 91丨人妻丨国产丨丝袜| 啊…啊…操我用力操我| 欧中美三级一区二区三区| 亚洲性爱无码乱伦av| 成人五月天色网| 国产精品直播在线观看直播| 神马精品视频| 九九九九免费| 成 人 影视 一区 二区 三区 四区| 国产精品一区在线播放| 激情专区综合| 色老大| 精品国产久热在线观看| 人人爽夜夜玩视频| 久操不卡视频| AV女资源| 综合色图,成人综合网| 精品人妻一区二区三区鲁大师| 嫖老熟女A片一二三区| 俞拍自拍| 亚洲av无码成人精品国产| 青青草导航在线视频| 美女一区二区国产精品| 操逼短片| 色播五月丁香| 另类天堂| 少妇三P| 精品亚洲黄色片 国产精品导航一区二区 | 青娱乐黄色录像| 1024香蕉视频| 91看黄片| 日本精品一区二区三| 5月婷婷6月六月丁香| 操熟女91| 日韩午夜国产| 中文字幕成人理论在线| 精品国产乱码久久久久久蜜臀| 大香蕉宗合网在线| 另类小说综合网| 丰满人妻一区二区中文| 丁香激情网| 色99999| 亚洲情色一区二区三区| 日本一级黄色电影| 国产辣妈在线视频福利| 天综合网欧美| 日韩情色视频| 秋霞免费AV| 天天综合欧美| 九九国产| 亚洲老熟妇xxx| 岛国视频一二三区| 好爽视频在线观看| 中文字幕人乱码中文字的预防方法 | 91网站18在线观看| 日韩一级特黄av毛片| 色香av| 东北女人操比视频| 超碰亚洲欧美日韩无| 18禁的网站在线| 蜜臀久久99精品久久久久久-DVD | 欧美一区二区三区蜜桃| 91人人操| 91天天美女| 亚洲第一页欧美| 欧美一级色| 国产成年精品高清在线观看91| 久久午夜神马| 日本黄色XXX| 夜夜嗨av午夜成人| 伊人久久88国产女| 国产亚洲国产超碰| 久操网视频| 日韩无码极品| 超碰诱惑| 超碰天天去日穴| 碰超人人在线一区二区三区| 中文字幕精品丝袜| 日韩精品99999| 欧美顶级黄片AAAAA在线免费看 | 久久久熟女一区| 国产乱弄免费在线视频。| 天天添天天干电影| 五月天综合| 免费看一级a性色生活片久久无| 91人精品妻入口| 夜夜爽夜夜爽| 色综合91好| 日本幼女18+| 亚洲诱惑天堂| 日日干夜夜欢| 大香蕉伊然在亚洲91| 欧美性爱一区二区三区四区| 中文字幕乱碼在线| 日本女厕偷拍| 亚洲欧美九九九| 大香蕉伊利av| 久久综合精品一区二区三区| 日韩一区二区熟女| 中文字幕亚洲欧美在线不卡| 97网址www| 国内精品不卡无毒99999| 中文字幕在线24| 很很干很很操| 亚洲欧洲视频小说在线观看| 天天日老熟妇| 4141514逼喷水三级片| 7月婷婷综合| 绯色AV粉色AV蜜臀AV| 久久做97| 黄久在线| 欧美另类丝袜熟女| 国内伊人久久久久久网站视频| 青草成人免费视频一com| 久久久久久久九九九九| 国产中出内射一区二区| 亚洲码在线中文在线观看| www.亚洲黄色| 婷婷五月天激情网| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 亚洲人综合| #NAME?| 欧美黑人熟妇精品91| 亚洲色图综合| 青青操综合网| 五月天色综合| 2019天天操天天爽天天拍| 亚洲成人妻日韩在线| 97在线欧| 操碰97| 偷拍亚洲熟女视频播放| 激情久久久| 欧亚综合一卡二卡中文字幕| 91中文精品日韩欧美在线| 中文久久96| 亚洲男人天堂AV| 无码操逼视频一下| 精品超碰国产| 91国产丝袜足交精品视频| 久久久久9| 亚洲无码一区成人免费午夜| 国产主播福利| AV综合中文字幕干| 九久久九精品视频| 99re99在线视频| 国产偷拍网站| 一区在线观看中文字幕| 伊人五月天青青草婷婷| 不卡六六在线91| 91少妇| 蜜臀操逼黄色视频操的好爽| 人妻美腿丝袜制服诱惑综合天堂-| 粉嫩久久久久| 翔田千里A片一区二区| 欧亚性爱啪啪| 欧美性爱一区| 国产强奸乱伦欧美| 超碰99在线| 天天操天天日天天干| 日本一级真人黄色性爱视频| 岛国成人av在线播放网址| 超碰天天久久79| 粉嫩AV一区二区夜夜| 国产精品一二三在线看| 久久夜夜夜夜| 精品国产Av无码久久久伦古装| 黄色高清无码无码破解免费暗网| 黄色二级片网站| 热热色91| 色99在线| 成人资源中文字幕在线观看| 操逼片国产| 精品免费国产二区三区| 超碰97久久| www.狠狠操| 国产AV线| 久久香蕉国产线看观看猫咪av| 大香蕉在线视频重口味毛片在线| 一区在线精品中文字幕| 久久精品人体| 躁躁躁日日躁2020| wwwss在线观看| 婷婷8月天青娱乐| 国产亚洲禁久一区二区| 91人妻久久久久久久久久久久久| 人人妻人人爽 97人人看碰人免费公开视频| 日韩人体偷拍| 久久精品一区二区三区四区五区| 97精品国产97久久久久久| 亚洲少妇视频| 发朗少妇买婬全视频中文| 欧美色九九| 激情婷婷五月天| 国产精品乱码久久久久| 欧美日不卡| 亚洲伊人成综合成人网| 影音综合网| 无码高清少妇久久| 日韩资源网| 久久久精品视频免费观看| 人人妻天天做天天爽| 亚洲中文字母在线播放| 99热精品在线观看| 91在线页| 欧美亚洲第一页| 日日干夜夜欢| 免费黄色片子| 亚洲天堂久久久久久粉红视频| 国产原创精品| 少妇人妻太紧太深av| 福利大香蕉| 一级黄色影片| 男插女青青影院| 男人天堂 天天射| 亚洲国产欧美中文永久| 91夜夜蜜桃臀1区2区3区| 91chinese在线| 夜夜狠狠躁日日躁色视频| 欧洲亚洲人人爽爽视频| 欧美日韩大香蕉| 色网在线| 色99色| 伊人热综合| 男人的天堂久久狠| 日本色婷婷| 欧洲综合无码| 国产精品97超碰| 不卡在线一区,精品一区二区三区中| 日韩无码极品| 在线情色电影 91大 | 九热中文字幕| 国产精品不卡一区二区三区| 激情五月综合网| 岛国片在线播放| 蜜桃网熟妇| 夜夜嗨av午夜成人| 99热最新| 日日夜夜精品| 日本加勒比无码专区| 91精品婷婷国产综合久久竹菊| 国产AV久久久蜜爱影集| 青娱乐福利99| 春色91| 一区二区三区色综合| 丁香五月婷婷基地| 色色香蕉| 久久av无码| 精品人妻一区二区三区鲁大师| 欧亚日韩三区| 97超碰美国| 国产99 中文字幕日韩小视频| 久久性爱视频99| 天美麻豆一区二区三区| 老熟女中文字幕高清| 99热超碰| 婷婷色婷婷| 高清无码 国产精品| 天天射天天操天天干天天吃2018| 久久97视频| 欧洲亚洲综合| 日本精品性生活久久久| 男人下部插入女人下部| 精品一区二区三区蜜桃臀赵总| 美女一区二区国产精品| 日韩综合成人免费视频| 麻豆国产97在线| 亚洲在线91| 婷婷性网| 竹菊一区二区三区AV线| 色亚州人久干视频在线观看免费版| 熟妇最新先锋一二三区| 一道本久久棕合爱| 亚洲第一页色| 激情五月综合| 丁香久久| 欧美色图天堂在线| 这里有精品| 婷婷激情五月| 屌色在线97视频| 色五月婷婷在线| 欧美视频中文字幕区| 欧美性爱伊人| 手机看片1025| 最近的最新的中文字幕视频| 强奸乱伦动态污图免费 | 久久久影院| 91xingse| 不卡码视频| 99国产精品久久久久久久成人热 | 亚洲第一狼人丝袜美女另类 | 91欧美偷拍| 青青草视频在线观看一区二区| 色性荡荡荡荡视频| 亚洲精品欧美专业| 四季AV一区二区凹凸精品小说| 五月天久久婷婷亚洲| 九九九久久久久| 2017大香蕉国产精品久久| 精品久久九| 黑人综合色| 欧美成97爱| 蜜桃av色偷偷av老熟女| 麻豆国产97在线| 人人看欧美性爱| 思思热免费视频观看| 99无码精品| 亚洲精品蜜桃久久久一区二区三区| 91色黑人少妇| 久久精品成人一区二区三区蜜臀| 日本免费二区三区| 神马久久午夜| 日韩操逼HD| 在线播放成人网站| 久久久久久久九九九九九九| 金典av| 天天干人妻视频| 一级二级在线观看| 国产AV激情无码久久无码| 精品国产肉丝袜在线拍国语| 韩国女主播青草福利视频| 免费网站观看www在线观| 9999久久久久| 亚洲欧美首页| 国产精品免费日韩| 夜夜爽33333| 超碰1997| 婷婷综合伊人一区| 91久久精品中文字幕| 午夜精品久久久久久久男人的天堂| 草蕉影视亚洲无码| 亚洲 欧美 日韩另类 麻豆| 粉嫩av在线| 天天干天天操天天干天天操| 99久久com免费视频′| A一级色女| 国产高清亚洲日韩一区| 日韩欧美俄罗斯A片| 精品一区96| 亚洲激情在线| 欧美黄片免费在线观看视频| 激情文学网伊人| 久湿久久| 午夜福利无毒不卡| 日韩精品一区二区三区四虎影视| 97伪v| 呦呦一区| 色综合五月天| 久草成人影片| 无码丰满熟妇一区二区浪潮AV| 人妻久久久久久久久久久久久久久| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 久久大香蕉手机高清视频| 欧洲亚洲人人爽爽视频| 久草精品国产99| 五月天婷婷成人网| 夜夜做夜夜爽精品视频| 国产91av在线播放| 无码99| 97视频免费播放| 夜夜草网站| 97av,com| 3d成人精品一区二区| 精品97久久综合| 亚洲国产精品久久AV| 五月丁香影院| 大逼色网站| 亚洲一区中文字幕一区| 九99久久| 日韩乱伦视频| 超碰在线1234区| 久久久久久久国产a∨| 裸体1区| 精品高清一区二区三区三州| 青青草啪啪网| 精品毛片av一区二区| 天天享受天天看| 日本黄色精品专区网站| 宗合情欲网| 日B操| 99久久综合| 国产最新小视频在线播放下载 | 婷婷色色五月天福利| 91亚洲不卡一区| 蜜臀一区二区三区在线| 大鸡巴久久久| 亚洲**2021在线观看| www.操| 中国农村熟妇毛片视频| 日韩钢筋无码高清啾啾啾| 久久久久久99AV无码免费网站| 啊啊啊好湿国产一二| 韩国三级一线观看久| 亚洲三级网址久久最新| 大香焦A片| 四虎影视永久在线观看精品免费网站| 成人黑料社久久| 久久精品国产亚洲av水密被窝| 99成人| 国产无马在线| 91丨精品丨国产丨丝袜| 91精品久久综合熟女| 99re99| 夜夜嗨av午夜成人| 性开放中文AV高清无码免费看| 日韩丨制服丨中文|在线| AV九九| 明星性猛交ⅹxxx乱大交| AV在线资源| 日韩精品中文字幕二区| 国产后入| 99久热精品99re6热| 国产精品久久久久久 百度| 大鸡巴久久| 久久亚州高清| 亚洲砖码砖专无区2023| 9丨久久九九九| 久久精品72| 国产无套粉嫩白浆在| 免费观看日本操逼视频| 新视频sss国产| 屌色在线97视频| 久久久久久日韩| 久久久久久久9999| 夜草欧美| 91neishe| 亚洲综合中文字幕有码| 大JI巴好深好爽又大又粗视频| 日韩电影天堂视频一区二区| 99精彩视频| av网站在线观看了| 欧美亚洲今日在线| 亚洲欧美日韩电影网站一区| 猛交交| 国产精品一二三在线看| 少妇色| 一区二区播放| 成人A片男人的天堂| 亚洲综合在线视频| 金莲网址| а√天堂资源官网在线资源| 夜夜春夜夜操| 国产高清自拍视频| 麻豆黄站| 国产25页| 青娱乐av在线| 丁香五月电影| 成人性爱高清视频免费看| 国产精品国产亚洲区艳妇糸列| 中文字幕av片| 91 综合 色| 91伊人大香蕉| 北京专精特新企业招聘信息| 国产热RE99久久6国产精品首| 高潮毛片无遮挡高清免费| 亚州一区二区| 天天夜夜rb| 少好三P| 鸥美极品| 欲射影视| 日韩精品9999| 人人摸人人干| 91视频观看网站| 天天综合,91综合永久| 曰韩无码777| 日本精品高清一二区一本到| 加勒比在线观看一区二区| 午夜啪| 97干色| 综合夜夜| 欧美亚洲中文| 五十路熟女人妻一区二区在线观看| 天天影视综合色| 加勒比性爱成人在线| 91强在线播放| 91激情综合| 国产精品3| 国产后入清纯| 老熟妇一区二区三区| 国产精品粉嫩福利在线| 亚洲色图 综合| 强奸熟女一区二区三区| 九九热在线精品视频| 无码久| 97精品97久久| 久久久成人免费av电影| 伊人9| 97超级久久| 超碰2017| 国产精品懂色tv影视免费观看| 69视频入口| 欧美天天| 91看黄片| 一区二区三区探花在线观看| 免费看A片毛毛片在线播| 亚洲欧美日韩精品久| 亚洲国产成人高清在线| 国产情侣自拍在线播放| 国产又爽又黄| 操少妇很爽av| 在线黄色污污网站| 人妻少妇久久中文| 欧美性第1页| 欧美中文综合| 操逼视频色| 久久AV无码网址| 激情AV| 97色爱| 国产丸一视频| 天天爽天天操啊啊啊| 国产肏逼网站| 欧美亚洲| 天天干天天拍| 99啪啪| 久久九九热| 激情色图| 国产精品一区午夜福利| 高清无码国产亚洲| 欧美大码在线视频| 无码人妻系列少妇| 日日操天天操| 色 婷97| 熟妇高潮二区三区| 明星性猛交ⅹxxx乱大交| 黄色在线网站| 乱精品一区字幕二区| 97 国产一区| 揉揉揉夜夜| 欧洲亚洲国产综合在线| 婷婷亚洲天堂| 成人精品一区二区三区| 夜夜高潮夜夜爽夜夜爱爱一区 | 熟妇最新先锋一二三区| 色爽——AV| 天天澡天天狠天天天做| 国产浮力影院第1页| 91男女啊啊啊| wuyechaopeng| 操逼视频国产无套| 亚洲无码色| 亚洲色图 综合| 久久久新亚洲AV| 日本午夜福利影院| 美女啪欧美一区| 91熟女在线| 爱媛媛久久国产福利| 欧美色997| 亚洲精品99999| 日日碰狠狠添天天爽超| 色大师网站www永久网站视频| 亚洲男人天堂手机版| 国产人伦a片信息免费片| 国产视频三区四区| 91精品丝袜久久久久久| 玖玖资源综合在线视频| 蜜臀AV成人精品蜜臀AV久久| 久久久日本电影| 国产精品成人无码av无码免费| 国产精品午夜成人福利| 天天综合网日韩| 五月婷婷丁香六月| 色综合 加勒比| 97在线观看播放视频| 啊嗯好大视频在线观看| 天天做天天爱| 激情五月综合网| 超碰色美女| 国产精品视频白浆免费| 久久九精品| 久操com| 搞中出视频在线观看| 欧美色www亚洲国产阿娇要播| 日本天天操| 久久久久久十| 99re久久| 日韩人妻无码不卡网站| 亚洲黄色影视| 少妇高潮一区二区三区在线| 久久久精品无码亚免费| 九九九精品一区二区无码| 欧美1区二区三区公司| 97视频620| 久久精品欧美一区二区三区不卡| 亚洲色图欧美色图制服丝袜| 国产精品不卡av免费在线观看| 中文字幕二区日韩天堂| 极品白嫩美少妇在地板上位骑射淫水泛滥| 久久XX| 加勒比中文av| 亚洲色吧网| 老熟女综合| 欧美 中文字幕 一区| 人妻三级在线中文字幕| 99热精品青草在线| 国产不良强奸视频免费看| 乱老熟女一区二区三区| 亚洲国产欧美另类自拍| 鸥美极品| 亚洲欧美中文日韩视频中国语| 亚洲欧美校园| 久久久久成人蜜桃精品| 91精品国产91综合久久蜜臀| 大香蕉伊人亚洲| 天天躁日日躁成人字幕aⅴ| 久久久99999久网站| 亚洲 国产 精品一区| 91n处女在线观看| 日本三级中国三级99人妇网站| 大香蕉欧美| 1二区9| 国内三级自拍小视频在线观看| 9Ⅰ超碰| 欧美色图私拍91| 爱爱久久| 久久精品国产亚洲AV无码电影| 黑人性暴力毛片| 射丝袜高跟鞋99| 亚洲欧综合另类无码一区| 中日韩久久久免费看| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 青青操青娱乐| AV天堂国产| 天天干人妻视频| 青青草在线视频人人想人人上| 久久精品中文字幕观看| 99re99在线视频| 国产精品午夜成人福利| 深田咏美亚洲精品福利社| 97av在线观看| 夜夜操一区二区| 美女超碰978| 国产一在线观看| 亚洲天天天| 67194无码不卡| www.人人cao| 亚洲另类欧美精品| 自拍啪啪视频| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 欧美懂色综合网| 98福利在线视频| 久久欧美1卡2卡3| 黄aaaaaaaaaaaaaaaaaa色网站| 欧美乱伦专区| 欧美色图另类图片| 欧美成人色| 日本曲间由美性生活片| 69精品久久久久中文字幕| 13小男生GAY自慰脱裤子| 狠久久| 日本欧美m v精品网站加| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 日韩欧视频| 亚洲十八禁止| 国产AV天美| 日韩精品区二区三区不卡| 精品亚洲国产成人av网站| 亚洲中文字幕熟女| juliaann丝袜| 国产丁香精品露脸视频| 亚州色国| 日韩精品人妻中文字幕有码午| 九九在线精品| 亚洲无线码一区国产欧美国| 国产一区自拍欧美日韩| 少妇久久久久久久久| 9久久久久久| 九99久久| 亚洲日韩东京热一区| 大香蕉伊人在线成人AV在线观看 | 91欧美亚洲| 97美日韩视频| AV在线播放网址| 激情婷婷丁香| 亚拍在线| 欧美亚洲涩涩| 91真人天天在线| 熟啊v色欧美热| AV天堂电影网| 日韩精品.久久精品.AV女优.天美传媒| 极品色www影院| 一区三区啪啪| 中文字幕狠狠玩| 日美免费黄片| 亚洲AV无码国产精品久久久久| 欧美,日韩综合久久| av在线不卡一区二区三区| 操逼逼一区视频| 日韩操逼性鲍| 嫩呦国产一区二区三区AV| 日韩在线欧美精品一区二区| 99亚洲国产精品色一区二区三区| 欲香欲色| 伊人国产成人av网站| 天天激清| 另类亚洲一区二区三区| 92性色国产午夜福利在线661| 波多野结衣AV无码一区| 日本色色视频网站| 中文字幕一二区二三区人妻专区| 一级片在线观看高清无码| 1人人看人人摸人人操| 国产野战露脸在线播放| 日韩一级特黄av毛片| 成年人一级黄色毛片大全在线观看| 亚洲综合欧美| 区日韩亚洲乱码av电影| 精品国产网站| 亚州久久9|