当前位置: 首页 > news >正文

微信清粉网站开发企业网络营销的意义

微信清粉网站开发,企业网络营销的意义,宁德市住房和城乡建设局新网站,网站策划总结最近因为爬虫程序太多,想要为Python爬虫设计一个监控程序,主要功能包括一下几种: 1、监控爬虫的运行状态(是否在运行、运行时间等) 2、监控爬虫的性能(如请求频率、响应时间、错误率等) 3、资…

最近因为爬虫程序太多,想要为Python爬虫设计一个监控程序,主要功能包括一下几种:

1、监控爬虫的运行状态(是否在运行、运行时间等)

2、监控爬虫的性能(如请求频率、响应时间、错误率等)

3、资源使用情况(CPU、内存、网络等)

4、异常捕获与告警(当爬虫出现异常时能够及时通知)

在这里插入图片描述

要为Python爬虫创建一个监控程序,根据上面思路我们可以按照以下步骤实现,涵盖运行状态、性能指标、异常告警和可视化:

核心监控功能设计

  1. 运行状态监控

    • 心跳检测:定期记录爬虫存活状态
    • 进程检查:验证爬虫进程是否运行中
  2. 性能指标监控

    • 请求统计:成功/失败请求计数
    • 数据处理:已抓取/解析的项目数
    • 资源使用:CPU/内存占用
    • 时效指标:请求响应时间、运行时长
  3. 异常告警

    • 错误捕获:网络异常、解析失败等
    • 阈值告警:连续失败/资源超限
    • 通知渠道:邮件/Slack/钉钉
  4. 数据持久化

    • 存储日志:运行日志和错误日志
    • 记录指标:时间序列数据库存储

实现方案代码示例

1. 基础监控类 (monitor.py)
import time
import logging
import psutil
from prometheus_client import start_http_server, Counter, Gauge, Histogramclass SpiderMonitor:def __init__(self, spider_name):self.spider_name = spider_nameself.start_time = time.time()# 初始化监控指标self.requests_total = Counter(f'{spider_name}_requests_total', 'Total requests')self.requests_failed = Counter(f'{spider_name}_requests_failed', 'Failed requests')self.items_scraped = Counter(f'{spider_name}_items_scraped', 'Items scraped')self.memory_usage = Gauge(f'{spider_name}_memory_usage', 'Memory usage (MB)')self.request_latency = Histogram(f'{spider_name}_request_latency', 'Request latency (seconds)')# 启动指标服务器start_http_server(8000)logging.basicConfig(filename=f'{spider_name}.log', level=logging.INFO)def record_request(self, success=True, latency=0):self.requests_total.inc()if not success:self.requests_failed.inc()if latency > 0:self.request_latency.observe(latency)def record_item(self, count=1):self.items_scraped.inc(count)def update_resources(self):process = psutil.Process()self.memory_usage.set(process.memory_info().rss / 1024 / 1024)  # MBdef log_error(self, error):logging.error(f"[{time.ctime()}] ERROR: {error}")def uptime(self):return time.time() - self.start_time
2. 爬虫集成示例 (my_spider.py)
import requests
from monitor import SpiderMonitorclass MySpider:def __init__(self):self.monitor = SpiderMonitor("my_spider")self.session = requests.Session()def crawl(self, url):start = time.time()try:response = self.session.get(url, timeout=10)response.raise_for_status()# 处理数据items = self.parse(response)self.monitor.record_item(len(items))self.monitor.record_request(success=True, latency=time.time()-start)return itemsexcept Exception as e:self.monitor.record_request(success=False)self.monitor.log_error(f"URL: {url} - Error: {str(e)}")return []def parse(self, response):# 解析逻辑return [{"data": "sample"}]def run(self):while True:self.crawl("https://example.com/data")self.monitor.update_resources()time.sleep(5)if __name__ == "__main__":spider = MySpider()spider.run()
3. 独立监控进程 (monitor_daemon.py)
import time
import subprocess
import smtplib
from email.mime.text import MIMETextdef check_heartbeat(spider_name):"""检查最近15分钟是否有活动日志"""try:with open(f"{spider_name}.log") as f:logs = f.readlines()[-100:]return any(time.time() - get_log_time(line) < 900 for line in logs)except FileNotFoundError:return Falsedef get_log_time(log_line):# 从日志行提取时间戳timestamp_str = log_line.split("]")[0][1:]return time.mktime(time.strptime(timestamp_str))def send_alert(subject, message):"""发送邮件告警"""msg = MIMEText(message)msg['Subject'] = f"[SPIDER ALERT] {subject}"msg['From'] = 'monitor@example.com'msg['To'] = 'admin@example.com'with smtplib.SMTP('smtp.example.com') as server:server.send_message(msg)def monitor_daemon():spider_name = "my_spider"consecutive_failures = 0while True:if not check_heartbeat(spider_name):consecutive_failures += 1if consecutive_failures >= 3:send_alert("Spider Down", f"{spider_name} has been inactive for 45+ minutes")else:consecutive_failures = 0time.sleep(300)  # 每5分钟检查一次if __name__ == "__main__":monitor_daemon()

监控系统部署方案

  1. 指标可视化

    • 使用Prometheus收集指标(默认端口8000)
    • 配置Grafana仪表盘展示:
      • 请求成功率 = (1 - requests_failed/requests_total) * 100
      • 内存使用趋势图
      • 最近1小时错误日志
  2. 告警配置

    # Prometheus alert.rules
    groups:
    - name: spider_alertsrules:- alert: HighFailureRateexpr: rate(my_spider_requests_failed[5m]) / rate(my_spider_requests_total[5m]) > 0.1for: 10mlabels:severity: criticalannotations:description: "超过10%的请求失败"
    
  3. 进程管理

    • 使用Supervisor管理进程:
    [program:my_spider]
    command=python /path/to/my_spider.py
    autostart=true
    autorestart=true
    stderr_logfile=/var/log/spider.err.log
    

高级功能扩展

  1. 分布式监控

    • 使用Redis共享监控数据:
    import redis
    r = redis.Redis()
    r.incr('global_requests_count')
    
  2. 网页状态面板

    # 添加Flask状态页
    from flask import Flask
    app = Flask(__name__   
    @app.route('/status')
    def status():return {"uptime": monitor.uptime(),"items": monitor.items_scraped._value.get()}
    
  3. 云服务集成

    • 错误跟踪:Sentry
    • 日志管理:ELK Stack
    • 云监控:Datadog/Prometheus Cloud

监控仪表盘示例 (Grafana)

  1. 核心面板

    • 请求成功率 (百分比)
    • 每分钟请求量
    • 内存/CPU使用曲线
    • 最近错误列表
  2. 报警阈值

    • 成功率 < 95% (警告)
    • 内存 > 500MB (警告)
    • 1小时无活动 (严重)

这种监控方案提供实时性能跟踪、自动告警和可视化展示,能有效提升爬虫的稳定性和可维护性。最终我们可根据实际需求调整监控粒度和告警阈值。如有任何疑问可以留言讨论。

http://www.dtcms.com/a/562888.html

相关文章:

  • 高校后勤报修系统|物业管理|基于SprinBoot+vue的高校后勤报修系统(源码+数据库+文档)
  • 常熟市建设工程发承包网站网址大全软件下载安装
  • 1009 Product of Polynomials
  • 宿州市建设工程质量监督站网站婚纱网站源代码
  • 电子商务网站建设的总体目标想再算命网站上登广告怎么做
  • Improved Implicit Neural Representation with Fourier Reparameterized Training
  • 苏州优化网站公司浏览器无法跳转二级页面
  • 基于环形队列与信号量的生产者-消费者模型深度解析与实现
  • 做网站诊断discuz 同步wordpress
  • 手机端网站html好看的模板企业vi设计公司定制
  • 微信网站建设企业中国建设人才平台网站
  • 网站空间 虚拟主机dede视频网站模板
  • 邮件登录之自定义邮件
  • 唐山建网站公司wordpress文章分段
  • 镇江建设银行网站网站搜索防止攻击
  • 网站运营与建设做信公众号首图的网站
  • 公司产品网站应该怎么做企业服务中心工作内容
  • 性倒错概述!
  • 汽车销售在哪些网站做推广seo关键词如何设置
  • 【Linux】Linux权限讲解 :写给文件的一封情书
  • 沈阳开发网站公司广告店
  • 南阳高端网站建设怎么制作古装视频
  • 网站建设公司长春wordpress 广州
  • 湖北 网站建设wordpress后台登陆界面
  • 电子商务网站建设调查问卷网站职业技术培训学校
  • 婚庆行业网站建设各大免费推广网站
  • 织梦网站演示苏州住房与城乡建设网站
  • 服装网站开发方案广告片制作哪家好
  • 天津建站管理系统价格湛江建站价格
  • 计算机毕业设计java和Vue的安全教育科普平台设计与实现 安全知识普及与教育平台 安全教育信息化管理平台