Mysql + Grafana 監(jiān)控爬蟲(chóng)程序

在使用爬蟲(chóng)爬取大量數(shù)據(jù)的時(shí)候客叉,一般我們都會(huì)把程序掛在服務(wù)器上運(yùn)行诵竭,然后就可以去干別的事情了景描。但是,我們還是有必要定時(shí)看一下程序運(yùn)行情況的秀撇。雖然我們可以通過(guò) log 信息來(lái)監(jiān)控程序運(yùn)行情況超棺,但這往往不夠直觀。所以呵燕,今天我就講講如何使用 Mysql 和 Grafana 監(jiān)控爬蟲(chóng)程序的運(yùn)行狀況棠绘,并可視化


1. Grafana 簡(jiǎn)介

Grafana 是一個(gè)數(shù)據(jù)可視化工具再扭,它并不收集數(shù)據(jù)氧苍,但是可以從數(shù)據(jù)源(例如 Graphite、Mysql泛范、InfluxDB等)中獲取數(shù)據(jù)并可視化让虐。


2. 運(yùn)行 Grafana

Grafana 安裝教程可以去網(wǎng)上搜,不多說(shuō)罢荡。這里說(shuō)的是另一種替代方法:使用已經(jīng)安裝好 Grafana 的 Docker 鏡像(效果也是一樣的)赡突。如果不了解 Docker 的話,可以看下教程 Docker — 從入門(mén)到實(shí)踐

在這里区赵,我們需要先安裝好 Docker惭缰,并學(xué)會(huì)一些 Docker 基本命令,例如拉取鏡像笼才,容器的創(chuàng)建漱受,容器的運(yùn)行停止,鏡像和容器的刪除等等骡送。

安裝并運(yùn)行 Docker 之后:

  1. Docker hub 搜索一下包含 Grafana 的鏡像昂羡,還是出現(xiàn)挺多個(gè)的。這里我選擇了 kamon/grafana_graphite

  2. 在服務(wù)器上拉取鏡像

docker pull kamon/grafana_graphite
  1. 使用該鏡像創(chuàng)建容器摔踱,并在后臺(tái)運(yùn)行
docker run \
  -d \
  -p 80:80 \
  -p 81:81 \
  -p 2003:2003 \
  -p 8125:8125/udp\
  -p 8126:8126\
  --name=grafana_graphite \
  kamon/grafana_graphite 

到這里虐先,我們就得到了一個(gè)已經(jīng)安裝了 Grafana 的容器,根本就不用我們手動(dòng)安裝了O(∩_∩)O 哈哈~

  1. 在瀏覽器中打開(kāi) http://your_server_ip:80/昌渤,登錄(初始用戶名和密碼都是 admin)赴穗,我們就可以看到 Grafana 的控制臺(tái)了憔四,還是挺酷炫的膀息!


3. 編寫(xiě)爬蟲(chóng)程序并運(yùn)行

略。(在這里了赵,要將爬取到的 item 儲(chǔ)存起來(lái)潜支,例如插入 mysql 數(shù)據(jù)庫(kù))


4. 編寫(xiě)監(jiān)控的腳本并運(yùn)行

這里,我們要每隔一定時(shí)間查詢爬取總量柿汛,并計(jì)算爬取速度冗酿。下面是一個(gè)例子:
代碼分為兩部分埠对,首先是在我們存放 item 的數(shù)據(jù)庫(kù)建立兩個(gè)表,每個(gè)表有兩個(gè)字段裁替,一個(gè)是查詢時(shí)間项玛,另一個(gè)是 item_total / item_min

import pymysql as mdb
import time

# 存放爬取數(shù)據(jù)的數(shù)據(jù)庫(kù)(這里我把統(tǒng)計(jì)的數(shù)據(jù)弱判,存入了爬取數(shù)據(jù)所在的數(shù)據(jù)庫(kù))
DB_NAME = 'db_name'
TABLE_NAME1 = 'item_per_min'
TABLE_NAME2 = 'item_total'
host = 'your_server_ip'
user = 'your_user_name'
passwd = 'your_pwd'

# 爬取的 item 存放的表
item_table = 'item_table'

def create_table():
    use_db_str = 'use ' + DB_NAME
    create_table_str1 = "CREATE TABLE if not exists " + TABLE_NAME1 + """(
      `time` datetime NOT NULL,
      `speed` int NOT NULL DEFAULT '0'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"""

    create_table_str2 = "CREATE TABLE if not exists " + TABLE_NAME2 + """(
        `time` datetime NOT NULL,
        `total` int NOT NULL DEFAULT '0'   
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"""

    # 數(shù)據(jù)庫(kù)連接
    conn = mdb.connect(host, user, passwd)
    cursor = conn.cursor()
    try:
        cursor.execute(use_db_str)
        cursor.execute(create_table_str1)
        cursor.execute(create_table_str2)
        conn.commit()
    except Exception as e:
        print(e)

代碼第二部分是主函數(shù)襟沮,每隔一分鐘查詢 items 數(shù),并計(jì)算爬取速度昌腰,將得到的數(shù)據(jù)儲(chǔ)存起來(lái):

if __name__ == '__main__':
    # 創(chuàng)建表
    create_table()
    conn = mdb.connect(host, user, passwd, DB_NAME)
    cursor = conn.cursor()

    before_item = 0
    while True:
        try:
            cursor.execute('SELECT count(*) FROM %s', item_table )
            result = cursor.fetchone()
            current_item = result[0]
            print(current_item)

            # 過(guò)去一分鐘爬取量
            cursor.execute('insert into %s values (now(), %s)' % (TABLE_NAME1, current_item - before_item))
            # 爬取總量
            cursor.execute('insert into %s values (now(), %s)' % (TABLE_NAME2, current_item))

            conn.commit()
            before_item = current_item
        except Exception as e:
            print(e)

        time.sleep(60)

監(jiān)控腳本寫(xiě)完后开伏,就可以掛在服務(wù)器后臺(tái)運(yùn)行了


5. Grafana 配置

  1. 配置數(shù)據(jù)源,這里命名為 monitor_crawler


  1. 新建 Dashboard,然后點(diǎn)擊 Graph 圖標(biāo)創(chuàng)建圖,接著點(diǎn)擊 Panel Title -> Edit


  1. 選擇我們剛才創(chuàng)建的數(shù)據(jù)源 monitor_crawler


  1. 按照 Grafana 提供的模板填寫(xiě) sql 語(yǔ)句胧辽,這里查詢了 item_per_min
SELECT
  UNIX_TIMESTAMP(time) as time_sec,
  speed as value,
  'items_min' as metric
FROM item_per_min

(注意我們選擇的是 Time series


  1. 可以選擇繪圖模式房资,一般是選 Lines


6. 成果展示

(其實(shí) Grafana 還有很多很酷炫的設(shè)置,大家有興趣可以去探索一下J哒恪)

總結(jié)

在安裝好各種環(huán)境之后,Mysql + Grafana 監(jiān)控爬蟲(chóng)程序的步驟:

  1. 編寫(xiě)爬蟲(chóng)程序
  2. 編寫(xiě)監(jiān)控腳本,將爬取速度和爬取總量定時(shí)存進(jìn) Mysql 數(shù)據(jù)庫(kù)
  3. Grafana 新建數(shù)據(jù)源大审,連接對(duì)應(yīng)的 Mysql 數(shù)據(jù)庫(kù)
  4. 創(chuàng)建新的 Dashboard,并在里面創(chuàng)建圖表座哩,圖表數(shù)據(jù)源選擇我們上一步新建的數(shù)據(jù)源
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末徒扶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子根穷,更是在濱河造成了極大的恐慌姜骡,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屿良,死亡現(xiàn)場(chǎng)離奇詭異圈澈,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)尘惧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)康栈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人喷橙,你說(shuō)我怎么就攤上這事啥么。” “怎么了贰逾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵悬荣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我疙剑,道長(zhǎng)氯迂,這世上最難降的妖魔是什么践叠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮嚼蚀,結(jié)果婚禮上禁灼,老公的妹妹穿的比我還像新娘。我一直安慰自己轿曙,他們只是感情好匾二,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著拳芙,像睡著了一般察藐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上舟扎,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天分飞,我揣著相機(jī)與錄音,去河邊找鬼睹限。 笑死譬猫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的羡疗。 我是一名探鬼主播染服,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼叨恨!你這毒婦竟也來(lái)了柳刮?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤痒钝,失蹤者是張志新(化名)和其女友劉穎秉颗,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體送矩,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚕甥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了栋荸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菇怀。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晌块,靈堂內(nèi)的尸體忽然破棺而出爱沟,到底是詐尸還是另有隱情,我是刑警寧澤摸袁,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布钥顽,位于F島的核電站义屏,受9級(jí)特大地震影響靠汁,放射性物質(zhì)發(fā)生泄漏蜂大。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一蝶怔、第九天 我趴在偏房一處隱蔽的房頂上張望奶浦。 院中可真熱鬧,春花似錦踢星、人聲如沸澳叉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)成洗。三九已至,卻和暖如春藏否,著一層夾襖步出監(jiān)牢的瞬間瓶殃,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工副签, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留遥椿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓淆储,卻偏偏與公主長(zhǎng)得像冠场,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子本砰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容