1. 程式人生 > >如何學習視覺化監控你的爬蟲!爬蟲一個不小心就會犯法的!

如何學習視覺化監控你的爬蟲!爬蟲一個不小心就會犯法的!

好,開始今天的文章。

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

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

關於爬蟲資料在mongodb裡的版本我寫了一個可以熱更新配置的版本,即添加了新的爬蟲配置以後,不用重啟程式,即可獲取剛剛新增的爬蟲的狀態資料,大家可以通過關注我的公眾號以後, 回覆“ 視覺化” 即可獲取指令碼地址 。

1.成品圖

如何學習視覺化監控你的爬蟲!爬蟲一個不小心就會犯法的!

 

進群:548377875  即可獲取小編精心準備的大禮包一份哦!

這個是監控伺服器網速的最後成果,顯示的是下載與上傳的網速,單位為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中的格式展示一下:

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進行更深入的瞭解,製作出更加好看的視覺化作品來。