Đầu xuân đo tốc độ load web nào


  • administrators

    Khai phím đầu xuân, đi đo tốc độ load web của bà con nào :D

    Ví dụ sử dụng:
    ./webping.py -u "http://yahoo.com.vn http://vnexpress.net" -ld .

    Help:

    /webping.py -h
    usage: webping.py [-h] [-u URLS] [-ld LOG_DIR]
     
    optional arguments:
      -h, --help            show this help message and exit
      -u URLS, --urls URLS  urls to ping
      -ld LOG_DIR, --log-dir LOG_DIR
                            where to store query logs
    

    Cách thức hoạt động:
    Chương trình nhận vào 2 đối số là danh sách các url và thư mục sẽ chưa file log. Mỗi url được ping bởi một thread. Kết quả ping (khoảng thời gian để load mỗi url) được cho vào dict data. Sau khi ping hết các url, dữ liệu trong dict data được ghi ra file log. File log này được rotate/tạo mới theo giờ.

    webping.py

    #!/usr/bin/env python
     
    import requests
    import argparse
    import threading
    import time
     
    parser = argparse.ArgumentParser()
    parser.add_argument('-u', '--urls', help='urls to ping')
    parser.add_argument('-ld', '--log-dir', help='where to store query logs')
    args = parser.parse_args()
     
    logdir = ""
    if args.log_dir:
        logdir = args.log_dir
     
    data = {}
    lock = threading.Lock()
     
     
    def report(url, load_time):
        lock.acquire()
        data[url] = load_time
        lock.release()
     
     
    def ping(url):
        load_time = requests.get(url).elapsed.total_seconds() * 1000
        report(url, load_time)
        print url, load_time, "milliseconds"
     
     
    if args.urls:
        urls = args.urls.split()
     
        if len(urls) > 0:
     
            while True:
     
                t0 = time.time()
     
                threads = []
                for url in urls:
                    threads.append(threading.Thread(target=ping, kwargs={'url': url}))
               
                print "Pinging..."
               
                for t in threads:
                    t.start()
     
                for t in threads:
                    t.join()
     
                # Ghi ra file log thông số loadtime ghi được cho từng website
                # Timestamp=1424279845
                # Dimensions=Stage=Prod,Market=hn,Service=WebPing,Method=Ping,Object=http://vnexpress.net
                # Metrics=LoadTime=467.650000
                # -----
                with open('%s/webping.log.%s' % (logdir, time.strftime('%Y-%m-%d-%H', time.localtime())), 'a') as logfile:
                    for url in data:
                        ql_entry = 'Timestamp=%d\nDimensions=Stage=Prod,Market=hn,Service=WebPing,Method=Ping,Object=%s\nMetrics=LoadTime=%f\n-----\n' % (int(time.time()), url, data[url])
                        logfile.write(ql_entry)
     
                data = {}
     
                dur = time.time() - t0
                print "Duration", dur
     
                time_to_sleep = 10.0 - dur
                if time_to_sleep > 0:
                    print "Sleep for", time_to_sleep, "seconds"
                    time.sleep(time_to_sleep)
                else:
                    print "No sleep"
    

    Đo cái này để làm gì?
    Để khai phím đầu xuân :D. Ngoài ra việc đo một website up hay down, thời gian load bao lâu quan trọng cho những người phát triển và quản trị web.

    Đọc log này thật bất tiện?
    Đúng thế, bước tiếp theo để cho thú vị hơn thì phải hiện thị được dữ liệu này trên dạng đồ thị nhấp nhô theo thời gian, theo từng url.



  • Để tiếp nối bài viết ở trên, lần này chúng ta sẽ sử dụng script webping.py để đo tốc độ load của một số trang web nổi tiếng ở Việt Nam. Chúng ta không chỉ xuất các thông tin về tốc độ ra file log mà còn hiển thị ở dạng đồ thị để dễ so sánh, giống như hình bên dưới đây.

    LoadTime của một số website nổi tiếng

    Dantri được load nhanh nhất (trung bình 180 millisecond), tiếp sau đó là Zing.vn (250 millisecond), Vnexpress (270 millisecond), cuối cùng là Webtretho (750 millisecond).

    Bước 1: Dùng webping.py để ping các website

    nohup ./webping.py -u "http://www.vnexpress.net http://dantri.com.vn http://zing.vn http://www.webtretho.com" -ld . &
    

    Lệnh nohup sẽ giúp webping chạy ở background, khi bạn logout ra khỏi terminal thì webping vẫn chạy.

    Bước 2: Gửi các thông tin về tốc độ load website tới hệ thống giám sát Haymetric để vẽ đồ thị

    1. Đăng kí tài khoản trên Haymetric: http://app.haymetric.com/signup
    2. Cài đặt agent để gửi tốc độ load web về hệ thống Haymetric. bash <(curl -s http://haymetric.com/haymetric-install.sh). Tài liệu chi tiết có thể tìm thấy ở đây http://haymetric.com/docs/
    3. Config agent để agent bắt đầu giám sát webping và xử lý các thông tin về website load time.
      Tạo một file webping.json ở thư mục /opt/haymetric/stream-configs/ với nội dung sau:
    {
        "streams": [
           	{ "logfile": "<thư mục chứa webping.py>/webping.log" }
        ]
    }
    

    Vậy là xong! Mọi thông tin về tốc độ loadtime của các website bây giờ đã được agent "chăm sóc". Bước tiếp theo là vẽ đồ thị các load time của dantri, zing, webtretho, vnexpress ;)

    Bước 3: Tìm và vẽ thông tin load time của các website

    1. Đăng nhập vào Haymetric: http://app.haymetric.com/
    2. Tìm metric loadtime ở tab Đồ thị với từ khoá service=webping. Bạn sẽ thấy hình như dưới đây.

    Vẽ loadtime metrics trên Haymetric

    Bạn cũng có thể đặt cảnh báo nếu website yêu thích của bạn bị down hay load time tăng đột biến ở tab Cảnh báo ;)

    Happy monitoring!



  • @trung Xin cho mình hỏi là có tool nào tương tự http://app.haymetric.com/ mà dùng cho window ko (mình dùng window7)?


Hãy đăng nhập để trả lời
 

Có vẻ như bạn đã mất kết nối tới Cộng đồng Python Việt Nam, vui lòng đợi một lúc để chúng tôi thử kết nối lại.