bucket-sort logo bucket-sort

プログラミングとインフラエンジニアリングの覚え書き

  • Posts
  • About
  • Contact
  1. Home
  2. All Posts
  3. InfluxDBとGrafanaを使って自前のメトリクスサーバーを立ち上げる (2) ローカルサーバーを立ち上げる

InfluxDBとGrafanaを使って自前のメトリクスサーバーを立ち上げる (2) ローカルサーバーを立ち上げる

Mar 6, 2026 インフラ bucket-sort

前回の記事では InfluxDB と Grafana の概要を整理しました。 今回は実際に WSL 上の Ubuntu で Docker を使って InfluxDB + Grafana をローカルに立ち上げて、 Line Protocol でデータを書き込み → Grafana でグラフ表示 するところまで一気にやります。

  1. InfluxDBとGrafanaの概要
  2. ローカルサーバーを立ち上げる(WSL上のUbuntuでDockerを使って動かす)(この記事)
  3. パブリックサーバーを立ち上げる(VPS上のAlmaLinuxでDockerを使って動かす)

前提チェック

Docker Desktop を起動した状態で、Docker と Docker Compose が使えることを確認します。

$ docker --version
Docker version 27.3.1, build ce12230

$ docker compose version
Docker Compose version v2.30.3-desktop.1

OK です。

docker-compose.yml を作る

作業ディレクトリを作ってそこに docker-compose.yml を配置します。

$ cd ~/dev
$ mkdir keys-server
$ cd keys-server
services:
  influxdb:
    image: influxdb:2
    container_name: keys-influxdb
    ports:
      - "8086:8086"
    volumes:
      - influxdb-data:/var/lib/influxdb2
    restart: unless-stopped

  grafana:
    image: grafana/grafana:latest
    container_name: keys-grafana
    ports:
      - "3100:3000"
    volumes:
      - grafana-data:/var/lib/grafana
    restart: unless-stopped

volumes:
  influxdb-data: {}
  grafana-data: {}

ポイント:

  • InfluxDB は 8086(デフォルト)をそのまま公開
  • Grafana はデフォルトの 3000 ではなく 3100 にマッピング(他で 3000 を使ってるため)
  • データは named volume にしているのでコンテナを消してもデータは残る

起動します。

$ docker compose up -d

ちゃんと 2 コンテナとも起動しているか確認。

$ docker compose ps
NAME            IMAGE                    COMMAND                  SERVICE    CREATED         STATUS         PORTS
keys-grafana    grafana/grafana:latest   "/run.sh"                grafana    8 seconds ago   Up 7 seconds   3000/tcp, 0.0.0.0:3100->3100/tcp
keys-influxdb   influxdb:2               "/entrypoint.sh infl…"   influxdb   8 seconds ago   Up 7 seconds   0.0.0.0:8086->8086/tcp

OK です。両方 Up になっています。

InfluxDB の初期セットアップ

ブラウザで http://localhost:8086 にアクセスすると InfluxDB の初期セットアップ画面が出ます。

[Get Started] をクリックして、初期ユーザーを作成します。

項目 値
Username (任意のユーザー名)
Password (任意のパスワード)
Initial Organization Name keys
Initial Bucket Name keys

[Continue] をクリック。

You are ready to go! Make sure to copy your operator API token now. This token enables superuser privileges like creating users, orgs, etc. You won’t be able to see it again!

ここで表示される Operator API Token は後で InfluxDB への書き込みや Grafana の接続に使うので、必ず控えておきます。

curl で書き込みテスト

InfluxDB にデータが書き込めるかどうか、まず curl で確かめます。 InfluxDB の書き込みエンドポイントは以下のとおり。

POST /api/v2/write?org=<ORG>&bucket=<BUCKET>&precision=ns

テスト用のシェルスクリプトを書きます。

ORG="keys"
BUCKET="keys"
TOKEN="<ここに控えておいた API Token を貼る>"

HOST="DESKTOP-TEST"
COUNT=12345
TS_NS=$(python3 - <<'PY'
import time
print(int(time.time() * 1_000_000_000))
PY
)

LINE="keystrokes,host=${HOST} daily_count=${COUNT} ${TS_NS}"

curl -i \
  -X POST "http://localhost:8086/api/v2/write?org=${ORG}&bucket=${BUCKET}&precision=ns" \
  -H "Authorization: Token ${TOKEN}" \
  -H "Content-Type: text/plain; charset=utf-8" \
  --data-binary "${LINE}"

やっていることの解説:

  • keystrokes が measurement(テーブル名のようなもの)
  • host=DESKTOP-TEST が tag(インデックス付きラベル)
  • daily_count=12345 が field(実際の値)
  • 末尾のナノ秒タイムスタンプは Python でその場で生成している

これが 前回の記事で説明した Line Protocol のフォーマットです。

実行してみます。

$ sh -x test.sh
+ ORG=keys
+ BUCKET=keys
+ TOKEN=****
+ HOST=DESKTOP-TEST
+ COUNT=12345
+ python3 -
+ TS_NS=1772262845522068992
+ LINE=keystrokes,host=DESKTOP-TEST daily_count=12345 1772262845522068992
+ curl -i -X POST 'http://localhost:8086/api/v2/write?org=keys&bucket=keys&precision=ns' ...
HTTP/1.1 204 No Content
X-Influxdb-Build: OSS
X-Influxdb-Version: v2.8.0
Date: Sat, 28 Feb 2026 07:14:05 GMT

HTTP/1.1 204 No Content が返ってくれば書き込み成功です。

204 は「正常に受け取ったけどレスポンスボディはないよ」の意味なので、InfluxDB の Write API ではこれが正解。もしトークンが間違っていれば 401 Unauthorized、バケット名が間違っていれば 404 Not Found が返ります。

InfluxDB UI でデータを確認する

書き込めたら、InfluxDB の UI でちゃんとデータが入っていることを確認します。

  1. http://localhost:8086 にアクセス
  2. 左メニューの Data Explorer を開く
  3. View Raw Data をオンにする

以下のようにデータが確認できるはずです。

項目 値
measurement keystrokes
field daily_count
value 12345
host DESKTOP-TEST
time 2026-02-28T07:14:10.000Z

データが見えたら InfluxDB 側は完了です。

InfluxDB Data Explorer

Grafana のセットアップ

初回ログイン

ブラウザで http://localhost:3100 にアクセスすると Grafana のログイン画面が出ます。

項目 値
Email or username admin
Password admin

ログインすると、パスワード変更を求められるので新しいパスワードを設定します。

データソースの追加

Grafana が InfluxDB のデータを見に行けるように、データソースを設定します。

  1. Connections > Data sources を開く
  2. [Add data source] をクリック
  3. InfluxDB を選択

設定は以下のとおり。

項目 値
Name influxdb
Query language Flux
URL http://keys-influxdb:8086
Organization keys
Token (InfluxDB の初期セットアップで控えた API Token)
Default Bucket keys

URL が localhost ではなく keys-influxdb になっていることに注意。 Grafana コンテナから InfluxDB コンテナに通信するので、Docker Compose のサービス名(= コンテナ名)で指定します。

Auth 系のオプション(Basic auth, TLS Client Auth など)はすべて Off のままで OK。

[Save & test] をクリックして datasource is working. 3 buckets found と表示されれば接続成功です。

ダッシュボードを作る

いよいよ Grafana でグラフを表示します。

  1. Dashboards を開く
  2. [Create dashboard] → [Add visualization] をクリック
  3. Data source に influxdb を選択

パネル①:累積値の折れ線グラフ

まずは打鍵数の累積値をそのまま折れ線で表示します。

from(bucket: "keys")
  |> range(start: -24h)
  |> filter(fn: (r) => r._measurement == "keystrokes")
  |> filter(fn: (r) => r._field == "daily_count")

直近 24 時間の daily_count の値がそのまま折れ線で出ます。

パネル②:10分あたりの打鍵数(差分)

累積値だと「いつ集中的に打鍵していたか」がわかりにくいので、difference() で差分を取ります。

from(bucket: "keys")
  |> range(start: -24h)
  |> filter(fn: (r) => r._measurement == "keystrokes")
  |> filter(fn: (r) => r._field == "daily_count")
  |> difference()

これで各データポイント間の差分(= その区間で増えた打鍵数)が折れ線で表示されます。

パネル③:今日の最新累積値(Stat パネル)

Panel type を Stat に変更して、今日の累積打鍵数をでっかい数字で表示します。

from(bucket: "keys")
  |> range(start: today())
  |> filter(fn: (r) => r._measurement == "keystrokes")
  |> filter(fn: (r) => r._field == "daily_count")
  |> last()

today() で今日の 0:00 からのデータに絞り、last() で最新の値だけを取得します。

ダッシュボードの保存

[Refresh] でグラフが表示されることを確認したら、ダッシュボードを保存します。

項目 値
Title Keys Metrics
Folder Dashboards

[Save] で完了。

Grafana Dashboard

まとめ

ここまでの手順で、ローカル環境に以下の構成ができました。

WSL (Ubuntu)
├── Docker
│   ├── keys-influxdb  (InfluxDB 2.x)  :8086
│   └── keys-grafana   (Grafana)        :3100
│
└── curl / test.sh  ──→  Line Protocol で書き込み
  • docker compose up -d で InfluxDB + Grafana が起動する
  • curl で Line Protocol を POST すると InfluxDB に書き込める
  • Grafana から Flux クエリでデータを可視化できる

まずは Apache なしで localhost:8086 に直で投げる構成で動かしています。 次回はこれを VPS 上の AlmaLinux に移して、パブリックに公開するサーバーとして構築していきます。

InfluxDB Grafana Docker WSL モニタリング
← InfluxDBとGrafanaを使って自前のメトリクスサーバーを立ち上げる (1) InfluxDBとGrafanaの概要 InfluxDBとGrafanaを使って自前のメトリクスサーバーを立ち上げる (3) パブリックサーバーを立ち上げる →

Related Posts

  • InfluxDBとGrafanaを使って自前のメトリクスサーバーを立ち上げる (3) パブリックサーバーを立ち上げる Mar 7, 2026
  • InfluxDBとGrafanaを使って自前のメトリクスサーバーを立ち上げる (1) InfluxDBとGrafanaの概要 Mar 5, 2026
  • Dockerを使ってDynamoDB LocalをWSL上のUbuntuで動かす Feb 28, 2026
  • データベースの種類まとめ:Relational / Time-Series / NoSQL / Vector / NewSQL の特徴と代表例 Mar 4, 2026

Table of Contents

  • 前提チェック
  • docker-compose.yml を作る
  • InfluxDB の初期セットアップ
  • curl で書き込みテスト
  • InfluxDB UI でデータを確認する
  • Grafana のセットアップ
    • 初回ログイン
    • データソースの追加
  • ダッシュボードを作る
    • パネル①:累積値の折れ線グラフ
    • パネル②:10分あたりの打鍵数(差分)
    • パネル③:今日の最新累積値(Stat パネル)
    • ダッシュボードの保存
  • まとめ

Recent Posts

  • Laravel の Event / Listener で Pub/Sub を実装する Apr 2, 2026
  • [C#] delegate と event の仕組みを整理する Apr 1, 2026
  • Pub/Sub パターンとは何か Mar 31, 2026
  • PHP/Laravel で値の状態を判定するヘルパ関数まとめ Mar 30, 2026
  • Filament の dehydrated メソッドとは何か Mar 29, 2026

Categories

  • AWS27
  • C#22
  • .NET20
  • Laravel16
  • Linux12
  • Apache8
  • MySQL8
  • PHP8
  • DynamoDB6
  • Nginx5
  • WordPress4
  • インフラ4
  • Hugo3
  • セキュリティ3
  • .NET Framework1
  • Aurora1
  • Filament1
  • Git1
  • SQS1

Tags

  • AWS
  • C#
  • .NET
  • Laravel
  • PHP
  • MySQL
  • セキュリティ
  • Linux
  • Apache
  • Code Snippet
  • DynamoDB
  • NoSQL
  • PHP-FPM
  • RDS
  • DoS
  • Nginx
  • Windows
  • WordPress
  • パフォーマンス
  • 監視
  • Amazon Linux 2023
  • CMS
  • Docker
  • Ipset
  • Iptables
  • OPCache
  • Webサーバー
  • 認可
  • Aurora
  • Blade
Powered by Hugo & Explore Theme.