该广告由百度联盟提供,不代表本站立场。

今天主要是来说一下怎么可视化来监控你的爬虫的状态。

相信大家在跑爬虫的过程中,也会好奇自己养的爬虫一分钟可以爬多少页面,多大的数据量,当然查询的方式多种多样。今天我来讲一种可视化的方法。

话不多说直接上图

1.成品图

这个是监控服务器网速的最后成果,显示的是下载与上传的网速,单位为M。爬虫的原理都是一样的,只不过将数据存到InfluxDB的方式不一样而已, 如下图。

可以实现对爬虫数量,增量,大小,大小增量的实时监控。

2. 环境

  • InfluxDb,是目前比较流行的时间序列数据库;

  • Grafana,一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源

  • Ubuntu

  • influxdb(pip install influxdb)

  • Python 2.7

3. 原理

获取要展示的数据,包含当前的时间数据,存到InfluxDb里面,然后再到Grafana里面进行相应的配置即可展示;

4. 安装

      4.1 Grafana安装

              官方安装指导 https://grafana.com/docs/grafana/latest/installation/debian/

安装好以后,打开本地的3000端口,即可进入管理界面,用户名与密码都是admin。

      4.2 InfulxDb安装

这个安装就网上自己找吧,有很多的配置我都没有配置,就不在这里误人子弟了。

5. InfluxDb简单操作

碰到了数据库,肯定要把增删改查学会了啊, 和sql几乎一样,只有一丝丝的区别,具体操作,大家可以参考官方的文档。

  • influx 进入命令行

  • CREATE DATABASE test 创建数据库

  • show databases 查看数据库

  • use test 使用数据库

  • show series 看表

  • select * from table_test 选择数据

  • DROP MEASUREMENT table_test 删表



6. 存数据

InfluxDb数据库的数据有一定的格式,因为我都是利用python库进行相关操作,所以下面将在python中的格式展示一下:

json_body = [
    {
        "measurement": "crawler",
        "time": current_time,
        "tags": {
            "spider_name": collection_name
        },
        "fields": {
            "count": current_count,
            "increase_count": increase_amount,
            "size": co_size,
            "increase_size": increase_co_size

        }
    }
]

其中:

  • measurement, 表名

  • time,时间

  • tags,标签

  • fields,字段

可以看到,就是个列表里面,嵌套了一个字典。其中,对于时间字段,有特殊要求,可以参考这里, 下面是python实现方法:

from datetime import datetime
current_time = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ')
# 将爬虫的相关属性存进去, 以MongoDB为例

mongodb_client = pymongo.MongoClient(uri)
    for db_name, collection_name in dbs_and_cos.iteritems():
        # 数据库操作
        db = mongodb_client[db_name]
        co = db[collection_name]
        # 集合大小
        co_size = round(float(db.command("collstats", collection_name).get('size')) / 1024 / 1024, 2)
        # 集合内数据条数
        current_count = co.count()

        # 初始化,当程序刚执行时,初始量就设置为第一次执行时获取的数据
        init_count = _count_dict.get(collection_name, current_count)
        # 初始化,当程序刚执行时,初始量就设置为第一次执行时获取的数据大小
        init_size = _size_dict.get(collection_name, co_size)

        # 条数增长量
        increase_amount = current_count - init_count
        # 集合大小增长量
        increase_co_size = co_size - init_size

        current_time = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ')

        # 赋值
        _size_dict[collection_name] = co_size
        _count_dict[collection_name] = current_count

        json_body = [
            {
                "measurement": "crawler",
                "time": current_time,
                "tags": {
                    "spider_name": collection_name
                },
                "fields": {
                    "count": current_count,
                    "increase_count": increase_amount,
                    "size": co_size,
                    "increase_size": increase_co_size

                }
            }
        ]
        print json_body
        client.write_points(json_body)

那么现在我们已经往数据里存了数据了,那么接下来要做的就是把存的数据展示出来。

7.展示数据

7.1 配置数据源

以admin登录到Grafana的后台后,我们首先需要配置一下数据源。点击左边栏的最下面的按钮,然后点击DATA SOURCES,这样就可以进入下面的页面:

点击ADD DATA SOURCE,进行配置即可,如下图:

其中,name自行设定;Type 选择InfluxDB;url为默认的http://localhost:8086, 其他的因为我前面没有进行配置,所以默认的即可。然后在InfluxDB Details里的填入Database名,最后点击测试,如果没有报错的话,则可以进入下一步的展示数据了;

7.2 展示数据

点击左边栏的+号,然后点击GRAPH

接着点击下图中的edit进入编辑页面:


从上图中可以发现:

  • 中间板块是最后的数据展示

  • 下面是数据的设置项

  • 右上角是展示时间的设置板块,在这里可以选择要展示多久的数据

7.2.1 配置数据

        1、在Data Source中选择刚刚在配置数据源的时候配置的NAME字段,而不是database名。

        2、接着在下面选择要展示的数据。看着就很熟悉是不是,完全是sql语句的可视化。同时,当我们的数据放到相关的字段上的时候,双击,就会把可以选择的项展示出来了,我们要做的就是直接选择即可;

        3、设置右上角的时间,则可以让数据实时进行更新与展示

因为下面的配置实质就是sql查询语句,所以大家按照自己的需求,进行选择配置即可,当配置完以后,就可以在中间的面板里面看到数据了。

8. 总结

到这里,本篇文章就结束了。其中,对于Grafana的操作我没有介绍的很详细,因为本篇主要讲的是怎么利用这几个工具完成我们的任务。

同时,里面的功能确实很多,还有可以安装的插件。我自己目前还是仅仅对于用到的部分比较了解,所以大家可以查询官方的或者别的教程资料来对Grafana进行更深入的了解,制作出更加好看的可视化作品来。

该广告由百度联盟提供,不代表本站立场。
64位Linux系统 API数据分析 Android应用市场 Android开发 Android电视盒子 Android签名证书生成 Apk上架应用商店 Aplayer报错解决方案 Aplayer播放器 App Store CDN DSDT Django Excel FM发射器 Git GitHub GitHub page Github Git用户名邮箱修改 Google Analytics Google Play Google/Baidu search Google插件 H5与CSS3 HBuilder HBuilder打包APP HBuilder打包ipa Hexo Hexo-neat插件 Homebrew Cask JavaScript学习笔记 Linux常见命令 MySQL数据库 Python Python爬虫 SEO优化 Videoscribe Vue Vue电商 Windows10 api接口搭建 console css特效 git clone 速度过慢 hexo hexo-admin插件 hexo-sakura主题 hexo-tag-aplayer插件 hexo主题 hexo博客美化 homebrew iOS iOS开发 js用法、范例 koolshare live2d看板动画 node.js npm 安装踩过的坑 oc引导 openwrt软路由系统 python qlv视频下载 robots.txt valine评论 win10 wx-server-sdk 个人主页 个人开发者 中国移动魔百盒 中文免费版 中文破解版 云函数 优化访问速度 傻瓜EXE 全球加速 博客 又拍云 反编译 和风天气 国内CODing托管 图床 域名加速 学习笔记 宝塔 实践项目 小技巧 小程序开发 开源小游戏 微信公众号 微信小程序 微信小程序开发 微擎 必应每日一图 抖音小程序 教程 数据可视化 本地打包iOS包 机械革命 树莓派 树莓派4b 爱奇艺下载器 电池补丁 百度云cdn 百度地图api 百度搜索 百度收录 百度权重 百度统计 突发奇想 站点地图 笔记 腾讯广告 腾讯视频 腾讯视频下载 自制小玩意儿 访问者地图 谷歌Adsense 软路由 静态数据库 面试题 黑苹果

等待也是约会的一部分嘛