这是SORACOM 2020年出现日历第15天的文章。
TL; DR
- 点击SORACOM API,使费用明细在Grafana中可见
- 我已经厌倦了通过用户控制台上"使用费用明细"中的"以CSV格式下载"使用excel创建数据透视表。
- 我只是在Grafana中显示了收费声明csv
你想做的事 实作 (也不要打这个人的SORACOM API来喂结node_exporter的文本收集器...或不要记得去年) 文件结构例如
(在这种情况下,您可以在上图中看到总体成本随时间而变化,而在下图中,sim的s1.fast dl(kddi)突然增加了!数据量很小……)
系统配置
1
2
3
4
5
6
7
8
9./
prometheus/
(prometheus本体とかconfとか)
node_exporter/
node_exporter(bin本体)
text_collector/
soracom_cost.prom
soracom_cost_exporter/
main.py(作ったbatch)
- 从crond开始每小时
- 点击POST /账单/最新/导出SORACOM API
- 汇总csv并在文本中输出prometheus度量
- 如果您在用户控制台上为每个SIM卡指定标签,则会将其添加到CSV中,因此请进行一些调整。
- 普罗米修斯方面只有设置可以刮除节点导出器
- node_exporter在启动选项中启用文本收集器
批号
soracom_cost_exporter / main.py
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 45 46 47 48 49 50 51 52 | import io import json import pandas as pd import requests from prometheus_client import CollectorRegistry, Gauge, write_to_textfile # get cost csv auth_response = requests.post( # get soracom access token url="https://api.soracom.io/v1/auth", headers={"Content-Type": "application/json"}, data=json.dumps( { "authKeyId": "keyId-(自分の)", "authKey": "secret-(自分の)" } ) ) export_response = requests.post( # get latest bill report url url="https://api.soracom.io/v1/bills/latest/export?export_mode=sync", headers={ "X-Soracom-API-Key": auth_response.json().get("apiKey"), "X-Soracom-Token": auth_response.json().get("token"), "Accept": "application/json", } ) cost_csv_url = export_response.json().get("url") # download cost csv cost_csv_response = requests.get(cost_csv_url) # tally a cost csv df = pd.read_csv(io.BytesIO(cost_csv_response.content)) df = pd.pivot_table( df, values="amount", index=["name", "billItemName", "group:name"], columns=[], aggfunc="sum" ) # write metrics file registry = CollectorRegistry() soracom_cost_gauge = Gauge( "soracom_cost_jpy", "soracom cost jpy", ["name", "bill_item", "group_name"], registry=registry ) for d in df.itertuples(name=None): name, bill_item_name, group_name = d[0] amount = d[1] soracom_cost_gauge.labels(name, bill_item_name, group_name).set(amount) write_to_textfile("../node_exporter/text_collector/soracom_cost.prom", registry) |
指标设计
- 为每个名称/ bill_item / group_name分配费用行csv
- 感觉每月费用一直在增加,并且会在月初重新设置
- 输出文件的内容是这样的
1 2 3 4 5 6 7 8 | $ cat node_exporter/text_collector/soracom_cost.prom # HELP soracom_cost_jpy soracom cost jpy # TYPE soracom_cost_jpy gauge soracom_cost_jpy{bill_item="basicCharge-active",group_name="default",name="docomo"} 140.0 soracom_cost_jpy{bill_item="soracomHarvestCharge",group_name="default",name="docomo"} 70.0 soracom_cost_jpy{bill_item="basicCharge-active",group_name="default",name="kddi"} 140.0 soracom_cost_jpy{bill_item="soracomHarvestCharge",group_name="default",name="kddi"} 70.0 soracom_cost_jpy{bill_item="downloadDataCharge-s1.fast-daytime",group_name="default",name="kddi"} 150.0 |
grafana设置
仪表板内容
-
在"到目前为止的总数"中,指标保持不变,
-
"小时三角洲"将三角洲作为普罗米修斯的一个查询
-
由于已设置仪表板的变量,因此请使用"全部"查看整个变量,并假设如果有许多
,则应像过滤一样使用它
- 时髦的一点是,仪表板变量由labels_values定义并自动获取,并在图形侧像name =?" $ {name:pipe}"一样扩展,以便可以单独或全部查看。
关于我得到
的指标的借口
- docomo和kddi是sim标签:名称(很难理解...)
-
数据更新的频率是一个谎言
- 我没有表格中可以显示的使用费数据,因此我正在处理个人
- 尚未积累任何数据(因为我在???????? ...之前写过一篇文章)
试试吧
- 我经常使用SORACOM,所以我必须认真考虑成本
- 因此,我希望在AWS Web控制台上使用该费用检查程序
- 但是,通过SORACOM用户控制台,可以使用仪表盘(例如,流量),但是成本屏幕很简单...
- 我想知道是否要将收费数据放入SORACOM Harvest Data中并在泻湖中查看,但是看来它有不同的用途...
- 毕竟,如果您不喜欢Grafana,就无法返回excel的透视表和眩光w。重要的是要使其易于查看
- 我敢肯定Soracom会实施一个很酷的仪表板,即使您自己没有做到!
结束