概要
- インターネット回線速度が時間によってどの程度になっているのかを測定し、mackerelでグラフ化します。
- 回線速度を測定するスクリプトはこちらに置きました。
- speedtestコマンドはOOKLAが公式に出しているコマンドです。aptにデフォルトで入っているspeedtestではないです。
#!/bin/env ruby require 'json' # command # % speedtest --server-id=15047 -f json --progress=no # # output # {"type":"result","timestamp":"2020-06-16T01:07:49Z","ping":{"jitter":120.10299999999999,"latency":27.356000000000002},"download":{"bandwidth":878001,"bytes":10077578,"elapsed":13815},"upload":{"bandwidth":4004130,"bytes":35680876,"elapsed":9131},"packetLoss":0,"isp":"So-net","interface":{"internalIp":"192.168.1.18","name":"wlx0013eff32167","macAddr":"00:13:EF:F3:21:67","isVpn":false,"externalIp":"223.132.34.53"},"server":{"id":15047,"name":"OPEN Project (via 20G SINET)","location":"Tokyo","country":"Japan","host":"speed.open.ad.jp","port":8080,"ip":"202.222.12.78"},"result":{"id":"3aca24d3-cde5-44cb-95e8-6c94bed68b93","url":"https://www.speedtest.net/result/c/3aca24d3-cde5-44cb-95e8-6c94bed68b93"}} output=`speedtest --server-id=15047 -f json --progress=no` json = JSON.parse(output) time = Time.now.to_i puts sprintf("speed.bandwidth.download\t%d\t%d", json["download"]["bandwidth"], time) puts sprintf("speed.bandwidth.upload\t%d\t%d", json["upload"]["bandwidth"], time)
/etc/mackerel-agent/mackerel-agent.conf に以下を追加します。
[plugin.metrics.speedtest] command = "sudo -u matsu ruby /home/matsu/speedtest-for-mackerel/test.rb" interval = 15
まる1日動かしたときのグラフです。表示はByte/secondです。8倍すればbits/secondです。
IPv4でしか計測できないのが難点です。
応用
回線のlatencyとjitterを計測したグラフ
回線のpacket loss数をカウントしたグラフ。IPv6 tunnelにしてからはとても安定しています。
2020/7/16
mackerelだと粒度が粗いのでGrafanaに移行した。
Comments