{"id":1527,"date":"2021-08-18T09:47:44","date_gmt":"2021-08-18T09:47:44","guid":{"rendered":"https:\/\/www.ipcpu.com\/?p=1527"},"modified":"2021-09-10T09:49:40","modified_gmt":"2021-09-10T09:49:40","slug":"matplot-draw-prometheus-trend","status":"publish","type":"post","link":"https:\/\/c.ipcpu.com\/2021\/08\/matplot-draw-prometheus-trend\/","title":{"rendered":"\u4f7f\u7528matplot\u7ed8\u5236Prometheus\u7684\u76d1\u63a7\u8d8b\u52bf\u56fe"},"content":{"rendered":"

\u7b2c\u4e00\u90e8\u5206\u3001\u8bfb\u53d6Prometheus\u76d1\u63a7\u6570\u636e<\/h4>\n
\n
import pandas as pd\nimport requests\nfrom urllib import parse\nimport json\n\n\n# \u83b7\u53d6CDN\u5e26\u5bbd\u6570\u636e\ndef getBillBand(vendor):\n    querystring = 'sum(CDNBandwidth{vendor=\"' + vendor + '\"}) '\n    query = 'https:\/\/prometheus.ipcpu.com\/api\/v1\/query_range?query=' + parse.quote_plus(querystring) + '&step=5m&start=1629129600&end=1629216000'\n    response = requests.get(query)\n    response.encoding = 'utf-8'\n    result = json.loads(response.text)\n    if len(result['data']['result']) == 0:\n        return []\n    else:\n        return result['data']['result'][0]['values']\n\n\n# \u8bfb\u53d6\u76d1\u63a7\u6570\u636e\nbaishandata = pd.DataFrame(getBillBand('baishan'), columns=['Time', 'baishan'])\nksyundata = pd.DataFrame(getBillBand('kingsoft'), columns=['Time1', 'kingsoft'])\nuclouddata = pd.DataFrame(getBillBand('ucloud'), columns=['Time3', 'ucloud'])\n\n#\u5408\u5e76\u6570\u636e\nmydata = pd.concat([baishandata, ksyundata,  uclouddata], axis=1)\nprint(mydata[['Time', 'baishan', 'kingsoft', 'ucloud']])<\/code><\/pre>\n<\/div>\n

\u6211\u4eec\u5f97\u5230\u4e86\u5982\u4e0b\u7684DataFrame\u6570\u636e<\/p>\n

\n
           Time             baishan   kingsoft      ucloud\n0    1629129600  13109176942.450005  482991727  282104786\n1    1629129900  12795432805.510002  304650879  198525687 \n2    1629130200      11825871531.54  364369260  223562448 <\/code><\/pre>\n<\/div>\n

\u7b2c\u4e8c\u90e8\u5206\u3001\u5f00\u59cb\u7ed8\u56fe<\/h4>\n
\n
import matplotlib.pyplot as plt\nimport matplotlib.ticker as tick\n\n\n\n# Y\u8f74\u663e\u793a\u5355\u4f4d\u81ea\u5339\u914d\ndef y_fmt(tick_val, pos):\n    if tick_val > 1000000000:\n        val = int(tick_val\/1000000000)\n        return '{:d} G'.format(val)\n    elif tick_val > 1000000:\n        val = int(tick_val\/1000000)\n        return '{:d} M'.format(val)\n    elif tick_val > 1000:\n        val = int(tick_val\/1000)\n        return '{:d} k'.format(val)\n    else:\n        return int(tick_val)\n\n\n\n# \u5c06\u65f6\u95f4\u6233\u8f6c\u6362\u4e3a\u65f6\u95f4\nmydata['Time'] = pd.to_datetime(mydata['Time'], unit='s')\n# \u5c06\u65f6\u95f4\u5217\u8bbe\u7f6e\u4e3aindex\nmydata.set_index('Time', inplace=True)\n# \u8bbe\u5b9a\u65f6\u533a\n#\u8fd9\u4e2a\u5730\u65b9\u6ce8\u610f\uff0ctz_localize\u6ca1\u6709inplace=True\uff0c\u6240\u4ee5\u6211\u8fd9\u8fb9\u65b0\u5efa\u4e00\u4e2adataFrame\nnewdata = mydata.tz_localize('UTC').tz_convert('Asia\/Shanghai')\n\n#\u8bbe\u5b9a\u6570\u636e\u5217\nnewdata['baishan'].astype('float').plot(color='green')\nnewdata['kingsoft'].astype('float').plot(color='red')\nnewdata['ucloud'].astype('float').plot(color='blue')\n\nplt.rcParams['font.sans-serif'] = 'SimHei' #\u8bbe\u7f6e\u4e2d\u6587\u5b57\u4f53\uff0c\u5426\u5219\u4e71\u7801\nplt.rcParams['axes.unicode_minus'] = False ## \u8bbe\u7f6e\u6b63\u5e38\u663e\u793a\u7b26\u53f7\n\n# \u4f7f\u7528\u81ea\u5b9a\u4e49\u51fd\u6570\u63a7\u5236Y\u8f74\u663e\u793a\u5355\u4f4d\nplt.gca().yaxis.set_major_formatter(tick.FuncFormatter(y_fmt))\nplt.autoscale(enable=True, axis='both')\nplt.ylabel('\u5e26\u5bbd')\nplt.xlabel('\u65f6\u95f4')\nplt.legend(loc='best')\n\n#\u7ed8\u56fe\nplt.savefig('cdn.png')\nplt.show()\n#plt.show()\u653e\u5728plt.savefig()\u4e4b\u524d\u4f1a\u5bfc\u81f4plt.savefig()\u51fa\u73b0\u7684\u662f\u7a7a\u767d\u56fe\u3002\u53cd\u8fc7\u6765\u5c31\u4e0d\u4f1a\u3002<\/code><\/pre>\n<\/div>\n

\u6700\u7ec8\u56fe\u50cf<\/h4>\n

<\/p>\n

\u8f6c\u8f7d\u8bf7\u6ce8\u660e\uff1aIPCPU-\u7f51\u7edc\u4e4b\u8def<\/a> » \u4f7f\u7528matplot\u7ed8\u5236Prometheus\u7684\u76d1\u63a7\u8d8b\u52bf\u56fe<\/a><\/p>","protected":false},"excerpt":{"rendered":"

\u7b2c\u4e00\u90e8\u5206\u3001\u8bfb\u53d6Prometheus\u76d1\u63a7\u6570\u636e import pandas as pd import requests from urllib import parse import json # \u83b7\u53d6CDN\u5e26\u5bbd\u6570\u636e def getBillBand(vendor): querystring = ‘sum(CDNBandwidth{vendor=”‘ + vendor + ‘”}) ‘ query = ‘https:\/\/prometheus.ipcpu.com\/api\/v1\/query_range?query=’ + parse.quote_plus(querystring) + ‘&step=5m&start=1629129600&end=1629216000’ response = requests.get(query) response.encoding = ‘utf-8’ result = json.loads(response.text) if len(result[‘data’][‘result’]) == 0: return [] else: return result[‘data’][‘result’][0][‘values’] # \u8bfb\u53d6\u76d1\u63a7\u6570\u636e baishandata = pd.DataFrame(getBillBand(‘baishan’), […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[221,190,59],"_links":{"self":[{"href":"https:\/\/c.ipcpu.com\/wp-json\/wp\/v2\/posts\/1527"}],"collection":[{"href":"https:\/\/c.ipcpu.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/c.ipcpu.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/c.ipcpu.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/c.ipcpu.com\/wp-json\/wp\/v2\/comments?post=1527"}],"version-history":[{"count":1,"href":"https:\/\/c.ipcpu.com\/wp-json\/wp\/v2\/posts\/1527\/revisions"}],"predecessor-version":[{"id":1528,"href":"https:\/\/c.ipcpu.com\/wp-json\/wp\/v2\/posts\/1527\/revisions\/1528"}],"wp:attachment":[{"href":"https:\/\/c.ipcpu.com\/wp-json\/wp\/v2\/media?parent=1527"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/c.ipcpu.com\/wp-json\/wp\/v2\/categories?post=1527"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/c.ipcpu.com\/wp-json\/wp\/v2\/tags?post=1527"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}