Grafana CloudとNASで自宅のインターネット速度を計測する

この記事は Grafana Advent Calendar 2025 の 4 日目になります。

小ネタですが空いていたのでやっていきます。

自宅はマンションで回線はフレッツ光ネクスト、プロバイダも固定で管理費込みといった環境なのですが、ある頃からPPPoEで通信しているv4側が耐え難いほど遅くなり、紆余曲折を経て現在はプロバイダを追加契約し、transix IPv4接続(固定IP)を利用しています。

元の状態からするとだいぶマシになったのですが、環境や構成の変更により結局どの程度速度が変化したのかを継続的に計測したいと思い、設置しているNAS(QNAPのTS-262)を使いGrafana Cloudに定期的にメトリクスとして送ることにしました。

Internet Speed Dashboard

https://egmc.grafana.net/public-dashboards/62f903fe5b2042e98410dac48e2c5854

予測値をいれてみたり一週間前の比較を入れてざっくり傾向をみたりしてます。

設定など

QNAPのNASにはContainer Stationというコンテナマネジメントが行えるソフト1が付属しており、Docker Hubなどの任意のコンテナレジストリからコンテナをpullして実行できます。

これを使って、speedtestを実行するexporter(speedtest_exporterでいくつかバリエーションがありますがいずれも Speedtest by Ookla - The Global Broadband Speed Test を実行して結果をメトリクスで返すもの)をコンテナで起動し、スクレイプ先のportに対して、別で立ち上げたPrometheusのコンテナからスクレイプします。

configはホスト側においてマウントし、Overrideして読むように

そしてGrafana CloudのHotsted Prometheusに対してRemote Writeする設定を入れればOKです。

global:
  scrape_interval:     1m
  evaluation_interval: 30s
scrape_configs:
  - job_name: 'speettest'
    scrape_interval: 35m
    scrape_timeout: 5m
    metrics_path: "/probe"
    params:
      script: [speedtest]
    static_configs:
    - targets: ['{local ip}:9469']
    metric_relabel_configs:
    - source_labels: [__name__]
      regex: "^(promhttp_|go_|process_|prometheus_|http_).+$"
      action: drop
remote_write:
- url: https://prometheus-blocks-prod-us-central1.grafana.net/api/prom/push
  basic_auth:
    username: {user}
    password: {pass}
  queue_config:
    min_backoff: 10s
    max_backoff: 8h

設定的には抜粋するとこんな感じで、speedtestをあまり叩きすぎるのもあれなのでscrape_intervalは適度に手加減しましょう。

この構成の良いところは、メトリクスの送信がRemoteWriteによるpushになるので、外部へのポート開放などが必要ない点です。

最近ネットワーク機器を諸々入れ替えたのですが、SNMP Exporterでメトリクスを取得したりOtelでLokiにログを送信するみたいなこともできるようになってきたので、自宅のネットワーク監視も同様にやっていきたいですね。


  1. 使ったことはないのですがSynologyのNASなどにも同様の機能がありそうです