個人的な実験として、常用している Windows マシンで自分が1日にどれくらいキーボードを打鍵しているかの統計を取ってみることにしました。
まず Windows で動作する打鍵カウントソフトを自作して、打鍵数をローカルの JSON ファイルに記録するところまでは完成。 ただ、ローカル保存だとデータをロストするリスクがあるし、複数マシンの打鍵数をまとめて見たり、他の人と参照し合ったりすることもできません。
ネット上にデータを蓄積して、グラフで可視化できる仕組みが欲しい ── イメージとしては AWS の CloudWatch Metrics みたいな感じです。 そのために自前でメトリックサーバーを立ち上げてみることにします。
メトリクスサーバーを構築するにあたって、 データの保存先に InfluxDB、可視化に Grafana を採用することにしました。
この記事ではまず、それぞれのソフトウェアが何なのかを概要レベルで整理します。
- InfluxDBとGrafanaの概要(この記事)
- ローカルサーバーを立ち上げる(WSL上のUbuntuでDockerを使って動かす)
- パブリックサーバーを立ち上げる(VPS上のAlmaLinuxでDockerを使って動かす)
InfluxDB — 時系列データ専用のデータベース
InfluxDB とは
InfluxDB は、時刻付きの数値データを高速に保存・集計するための 時系列データベース(Time-Series Database) です。
- 2013年 に登場。最初に広く普及した時系列DBの一つ
- Errplane社(後の InfluxData 社)によって OSS プロジェクトとして開発開始
- 開発言語は Go
- ライセンスは MIT License(OSS版)/ 商用版あり
- DB-Engines Ranking の Time Series DBMS カテゴリで 長年1位 を維持している代表的な時系列DB
何のためのDB?
InfluxDB は 「時間と一緒に増えていく数値」 の保存に特化しています。
- CPU使用率(毎秒)
- 温度センサーの値(毎分)
- アクセス数(毎5分)
- ネットワークトラフィック(毎秒)
今回やりたい「打鍵数を10分おきに送信して蓄積する」というのも、まさにこのパターンです。 時刻と一緒に増えていく数値を延々と書き込み続け、あとからグラフで眺める ── InfluxDB が得意とするど真ん中の用途です。
こうした用途において RDB(MySQL・PostgreSQLなど)には苦手な点があります:
| 課題 | RDB | InfluxDB |
|---|---|---|
| データが爆速で増える | インデックス肥大化で書き込みが遅くなる | 時系列に最適化された書き込み性能 |
| 集計(直近1時間の平均など)が多い | 都度フルスキャンや重いクエリになりがち | 時間範囲での集計関数を標準搭載 |
| 古いデータの自動圧縮・削除 | 自前でバッチ処理が必要 | リテンションポリシーで自動管理 |
| 書き込み性能 | 行の整合性(ACID)を維持するためオーバーヘッドが大きい | 整合性より速度を優先した設計 |
InfluxDB の主な特徴
- 高速な書き込み — 数十万ポイント/秒の書き込みが可能
- 時間範囲クエリの高速性 — 時刻順に並ぶ前提の専用ストレージエンジン(TSM / TSI)
- データ圧縮 — 同じ measurement のデータをまとめて高効率に圧縮
- リテンションポリシー — 「30日より古いデータは自動削除」のような設定が可能
- ダウンサンプリング — 古いデータを「1秒ごと → 1時間ごと」に自動集約して保持量を削減
- Flux / InfluxQL — 専用のクエリ言語を搭載(SQL ライクな InfluxQL と、より高機能な Flux)
- HTTP API — REST API 経由で読み書きが可能。各種言語のクライアントライブラリも充実
- プラグインエコシステム — Telegraf(データ収集エージェント)との連携で多様なデータソースに対応
データモデル(RDBとは全然違う)
InfluxDB のデータモデルは RDB のテーブル構造とは異なり、以下の4要素で構成されます:
measurement(測定名): keystrokes
tags(ラベル): host=DESKTOP-ABC
fields(値): daily_count=12874
timestamp(時刻): 2026-02-25T19:40:00Z
| 要素 | 役割 | RDB での近い概念 |
|---|---|---|
| measurement | データの種類 | テーブル名 |
| tags | インデックスされるメタデータ(文字列) | インデックス付きカラム |
| fields | 実際の計測値(数値・文字列など) | 通常カラム |
| timestamp | データの時刻(必須) | datetime カラム |
今回の打鍵カウンターで考えると、こう対応します:
- measurement =
keystrokes(「打鍵数の計測データ」という種類名) - tags =
host=DESKTOP-ABC(どのマシンからの送信か。将来マシンが増えてもタグで区別できる) - fields =
daily_count=12874(その時点の累積打鍵数) - timestamp = 送信時刻(10分おきに自動送信するので、10分刻みのデータ点が並ぶ)
RDB なら「テーブル定義 → カラム設計 → INSERT 文」と準備が要りますが、InfluxDB では上記のフォーマット(Line Protocol と呼びます)でデータを HTTP POST するだけで書き込みが完了します。スキーマの事前定義は不要です。
内部では時刻順に並ぶ前提で、同じ measurement のデータをまとめて圧縮する専用フォーマットで保存されるため、時間範囲での検索が非常に高速です。
Grafana — メトリクス可視化専用のダッシュボードツール
Grafana とは
Grafana は、さまざまなデータソースの数値データを Web ブラウザ上でグラフやダッシュボードとして可視化する ための OSS です。
- 2014年 に登場
- 開発元はスウェーデンの Grafana Labs 社
- 開発言語は Go(バックエンド)+ TypeScript(フロントエンド)
- ライセンスは AGPL-3.0(OSS版)/ 商用版(Grafana Cloud / Enterprise)あり
- GitHub Stars 66,000+ の大規模 OSS プロジェクト
- モニタリング・オブザーバビリティ分野で デファクトスタンダード のダッシュボードツール
何ができる?
数値データをさまざまなビジュアルで表示できます。特に時系列データの可視化に強みがあります。
- 折れ線グラフ — CPU使用率の推移など
- 棒グラフ — 時間帯別のアクセス数など
- ヒートマップ — リクエストレイテンシの分布など
- ゲージ — 現在のディスク使用率など(スピードメーター風)
- Stat パネル — 今日の合計値やカウントなど
- テーブル — 生データの一覧表示
- アラート — 閾値を超えたら Slack・メール等に通知
Grafana の主な特徴
- マルチデータソース — 1つのダッシュボードに複数のデータソースを混在可能
- 豊富なプラグイン — コミュニティ製パネルやデータソースプラグインが多数
- テンプレート変数 — ドロップダウンでホスト名やリージョンを切り替えられるインタラクティブなダッシュボード
- アラート機能 — 閾値ベースのアラートルールと通知チャネル(Slack, PagerDuty, Webhook 等)を内蔵
- ユーザー管理・権限制御 — 組織・チーム単位のアクセス制御、閲覧専用ユーザーの設定が可能
- ダッシュボードの共有・エクスポート — JSON でのインポート/エクスポート、URL 共有、スナップショット機能
- Provisioning — ダッシュボードやデータソースの設定をコード(YAML)で管理可能
対応データソース
Grafana はデータソースを選ばない「何でもグラフにできる Web フロントエンド」です:
| カテゴリ | 主なデータソース |
|---|---|
| 時系列DB | InfluxDB, Prometheus, Graphite |
| RDB | MySQL, PostgreSQL |
| ログ・検索 | Elasticsearch, Loki |
| クラウド | AWS CloudWatch, Azure Monitor, Google Cloud Monitoring |
| トレース | Tempo, Jaeger, Zipkin |
| その他 | JSON API, CSV, Google Sheets など |
まとめ
| InfluxDB | Grafana | |
|---|---|---|
| 役割 | 時系列データの保存・集計 | データの可視化・ダッシュボード |
| 一言で | メトリクス専用DB | 何でもグラフにできるWebフロントエンド |
| 登場年 | 2013年 | 2014年 |
| 開発元 | InfluxData(米国) | Grafana Labs(スウェーデン) |
| 開発言語 | Go | Go + TypeScript |
| ライセンス | MIT(OSS版) | AGPL-3.0(OSS版) |
| 代表的な用途 | サーバー監視, IoT, APM | モニタリングダッシュボード, アラート |
InfluxDB でデータを貯めて、Grafana で見る ── これがオープンソースのメトリクス基盤の定番構成です。
次回は、Docker を使ってローカル環境にこの構成を実際に立ち上げていきます。