級日志分級與監(jiān)控告警實戰(zhàn):從青銅到王者的蛻變之路)
一、為什么你的爬蟲總是半夜崩潰?很多爬蟲開發(fā)者都經(jīng)歷過這樣的至暗時刻:凌晨3點,目標(biāo)網(wǎng)站改版,XPath失效,爬蟲瘋狂拋出AttributeError,但你還在睡夢中,直到早上才發(fā)現(xiàn)數(shù)據(jù)表一片空白。爬蟲跑了一周,突然被封IP,日志里只有一堆ConnectionError,你完全不知道是從哪個時刻開始出問題的。老板問:“昨天爬了多少條?成功率多少?”你只能打開Excel手動數(shù)日志行數(shù)。問題的根源:絕大多數(shù)爬蟲項目只用了print()或者最簡單的logging.basicConfig(),把不同嚴(yán)重級別的信息混在一起,沒有結(jié)構(gòu)化,沒有統(tǒng)計,更沒有告警。生產(chǎn)級爬蟲的日志系統(tǒng)必須做到:分級清晰– DEBUG用于開發(fā)調(diào)試,INFO記錄關(guān)鍵業(yè)務(wù)節(jié)點,WARNING提醒潛在風(fēng)險,ERROR記錄致命錯誤。結(jié)構(gòu)化– 每條日志都是鍵值對(JSON格式),便于接入ELK、Splunk或云原生日志服務(wù)??捎^測性– 實時統(tǒng)計請求量、成功率、耗時分布,通過Dashboard或告警通知暴露。主動告警– 當(dāng)錯誤率突增、耗時過長或請求中斷時,第一時間通過釘釘、郵件、飛書等渠道通知。本文將帶你從零構(gòu)建一套完整的爬蟲日志與監(jiān)控體系,全程使用Python 3.11+、loguru、prometheus-client、fastapi(用于暴露指標(biāo))以及httpx異步HTTP客戶端,并給出可直接運行的代碼。目錄一、為什么你的爬蟲總是半夜崩潰?二、日志分級:別把所有雞蛋放在一個籃子里2.1 Python logging模塊的局限與loguru的崛起2.2 定義日志分級標(biāo)準(zhǔn)(結(jié)合爬蟲場景)2.3 使用loguru實現(xiàn)結(jié)構(gòu)化日志(鍵值對形式)三、監(jiān)控中間件:實時統(tǒng)計每分鐘的請求數(shù)、成功數(shù)、失敗數(shù)、平均耗時3.1 設(shè)計指標(biāo)數(shù)據(jù)結(jié)構(gòu)3.2 使用prometheus-client定義指標(biāo)3.3 實現(xiàn)請求統(tǒng)計中間件(異步爬蟲版)3.4 窗口統(tǒng)計:每分鐘重置的簡易版(如果不用Prometheus的rate)四、告警引擎:當(dāng)指標(biāo)越過紅線,讓通知飛起來4.1 定義告警規(guī)則4.2 集成釘釘機(jī)器人告警4.3 告警觸發(fā)器:結(jié)合窗口統(tǒng)計與日志4.4 基于日志的告警:使用loguru的sink五、整合到爬蟲主流程:一個完整的異步爬蟲示例5.1 項目結(jié)構(gòu)5.2 配置管理(使用pydantic-settings)5.3 主爬蟲邏輯5.4 暴露Prometheus指標(biāo)(單獨啟動一個線程)六、進(jìn)階:日志采樣與Trace ID串聯(lián)七、部署與運維建議八、實戰(zhàn)運行與效果展示九、常見問題與解決方案Q1:日志量太大,IO成為瓶頸?Q2:Prometheus指標(biāo)不是實時的?