1. 程式人生 > >快來學習怎麽可視化監控你的爬蟲

快來學習怎麽可視化監控你的爬蟲

host 相關操作 進行 mea 現在 增刪改查 eth tab 回復

大家好,我是四毛,下面是我的個人公眾號,歡迎關註。有問題的可以私信我,看到就會回復。

技術分享圖片

更新 2018年08月03日14:39:32

其實可以利用scrapy的擴展展示更多的數據,立個flag,後面更新上來

好,開始今天的文章。

今天主要是來說一下怎麽可視化來監控你的爬蟲的狀態。

相信大家在跑爬蟲的過程中,也會好奇自己養的爬蟲一分鐘可以爬多少頁面,多大的數據量,當然查詢的方式多種多樣。今天我來講一種可視化的方法。

關於爬蟲數據在mongodb裏的版本我寫了一個可以熱更新配置的版本,即添加了新的爬蟲配置以後,不用重啟程序,即可獲取剛剛添加的爬蟲的狀態數據,大家可以通過關註我的公眾號以後, 回復“可視化”即可獲取腳本地址。

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安裝

官方安裝指導

安裝好以後,打開本地的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中的格式展示一下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 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實現方法:

1 2 from datetime import datetime current_time = datetime.utcnow().strftime(‘%Y-%m-%dT%H:%M:%SZ‘)

所以,到這裏,如何將爬蟲的相關屬性存進去呢?以MongoDB為例

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 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進行更深入的了解,制作出更加好看的可視化作品來。

最後,關註公眾號,回復“可視化” 即可獲取本文代碼哦

快來學習怎麽可視化監控你的爬蟲