MENU

Dockerを活用したGrafanaとElasticsearchの構築チュートリアル

本チュートリアルでは、Dockerを介してセットアップし、Elasticsearchに格納されたデータをGrafanaでどのように閲覧するかを初学者に向けてステップバイステップで説明します。

このチュートリアルを通じて、読者は以下を学ぶことができるでしょう:

  • DockerとDocker Composeを使用してGrafanaとElasticsearchを稼働させる方法
  • Elasticsearchにサンプルデータを投入してインデックスを作成する方法
  • GrafanaでElasticsearchをデータソースとして設定し、データをクエリする方法
  • カスタマイズ可能なダッシュボードを作成し、データを視覚化する方法

チュートリアルを開始する前に、以下の前提条件を満たしていることを確認してください:

  • Dockerがインストールされ、基本的な操作に慣れていること
  • 基本的なコマンドライン操作に慣れていること
  • JSON形式とHTTPリクエストの基本的な知識があること

このチュートリアルが終わる頃には、読者は自身のデータをGrafanaで視覚化するための基礎を固めることができるでしょう。それでは、Dockerでの環境構築から始めてみましょう。

著者環境

  • Apple M2 Pro
  • macOS 14.1
  • Docker 24.0.6 ed22dbc
  • Docker Compose v2.23.0-desktop.1
目次

セクション1: 環境セットアップ

成功的なデータ視覚化プロジェクトを始めるためには、まず堅固な基盤を築くことが必要です。このセクションでは、GrafanaとElasticsearchを動かすためのDocker環境のセットアップ方法について説明します。

Dockerは、アプリケーションをコンテナとしてパッケージ化し、あらゆる環境で一貫した動作を保証するためのプラットフォームです。まだDockerをお使いでない場合は、Dockerの公式ウェブサイトからインストーラーをダウンロードし、ご使用のオペレーティングシステム(Windows、macOS、Linux)に合わせたインストール手順に従ってください。

Dockerをインストールしたら、ターミナルまたはコマンドプロンプトを開き、以下のコマンドでバージョン情報を確認してDockerが正しくインストールされていることを確認してください。

docker --version

Docker Composeは、複数のコンテナを定義し、実行するためのツールです。これにより、GrafanaとElasticsearchのような複数のサービスを組み合わせて動かすことが容易になります。Docker Desktopをインストールすると、通常はDocker Composeも一緒にインストールされます。バージョンを確認するには次のコマンドを実行します。

docker-compose --version

GrafanaとElasticsearchをセットアップするためには、docker-compose.yml というYAMLファイルを作成し、サービスの設定を記述します。このファイルでは、使用するDockerイメージ、公開するポート、永続化するデータのボリュームなどを定義します。

ファイル構造は通常以下のようになります:

.
├── docker-compose.yml
└── data/
    ├── grafana/
    └── elasticsearch/
  • docker-compose.yml:サービスの設定が記述されたメインのYAMLファイルです。
  • data/:データを永続化するためのディレクトリで、サブディレクトリにはGrafanaとElasticsearchのデータが格納されます。

セクション2: Docker Composeを使用したElasticsearchのセットアップ

データストレージとして機能するElasticsearchは、ログやメトリクスなどの様々なデータを集約して検索可能にする強力なツールです。このセクションでは、ElasticsearchをDocker Composeでセットアップする方法を説明します。

Elasticsearchの公式DockerイメージはDocker Hubから入手できます。最新版または特定のバージョンを選択して使用することができます。通常、最新版を使用することをお勧めしますが、互換性の都合上、特定のバージョンを使用する必要がある場合もあります。

プロジェクトのルートディレクトリにdocker-compose.ymlファイルを作成し、以下のような内容を記述します。

version: '3.8'

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.15
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
    volumes:
      - ./data/elasticsearch:/usr/share/elasticsearch/data
    ports:
      - "9200:9200"
    networks:
      - esnet

networks:
  esnet:
    driver: bridge

このファイルでは、シングルノードクラスタとして機能するElasticsearchインスタンスを定義しています。データを永続化するためにボリュームをマウントし、9200番ポートを公開して外部からのアクセスを可能にしています。

docker-compose.ymlファイルが用意できたら、以下のコマンドを実行してElasticsearchコンテナを起動します。

docker-compose up -d

起動後、コンテナの健全性を確認するには、ブラウザまたはcurlコマンドを使用してElasticsearchのヘルスステータスをチェックします。

curl -X GET "localhost:9200/_cluster/health"

応答にはElasticsearchクラスタのヘルスステータスが含まれており、greenyellowredのいずれかのステータスが表示されます。greenは全てが正常であることを、yellowは一部のレプリカが利用できないことを、redはクラスタが正常に機能していないことを示します。

セクション3: Docker Composeを使用したGrafanaのセットアップ

データ視覚化プラットフォームであるGrafanaは、複雑なデータセットからの洞察を提供するインタラクティブなダッシュボードを作成するのに最適です。このセクションでは、GrafanaをDocker Composeでセットアップし、データ視覚化のための基盤を構築する方法を説明します。

Grafanaの公式DockerイメージはDocker Hubから入手できます。最新版または特定のバージョンを選択して使用することができます。安定した運用を望む場合は、リリースされたばかりの最新版ではなく、広くテストされているバージョンを選択することを推奨します。

既に作成したdocker-compose.ymlファイルに、Grafanaのサービス定義を追加します。ファイルは以下のように拡張されます。

version: '3.8'

services:
  elasticsearch:
    # ... Elasticsearchの設定 ...

  grafana:
    image: grafana/grafana-enterprise
    container_name: grafana
    depends_on:
      - elasticsearch
    volumes:
      - ./data/grafana:/var/lib/grafana
    ports:
      - "3000:3000"
    networks:
      - esnet

networks:
  esnet:
    driver: bridge

ここで、Grafanaの永続化のためにボリュームをマウントし、3000番ポートを公開してアクセスを可能にしています。depends_onキーを使って、GrafanaがElasticsearchに依存するように定義しているため、Elasticsearchが先に起動します。

Grafanaサービスの設定を追加したら、以下のコマンドでGrafanaコンテナを起動します。

docker-compose up -d grafana

コンテナが起動したら、ブラウザを開いて http://localhost:3000 にアクセスし、Grafanaのダッシュボードにログインします。初期ユーザー名は「admin」、パスワードはdocker-compose.ymlファイルで設定した値(この例ではyourpassword)です。

これでGrafanaの基本的なセットアップは完了です。ダッシュボードにログイン後、データソースを追加し、クエリを作成してデータを視覚化する準備が整いました。

セクション4: Elasticsearchにサンプルデータの投入

データを視覚化するためには、まずはElasticsearchにデータが存在している必要があります。このセクションでは、サンプルデータを生成し、Elasticsearchにデータを投入する方法を説明します。

サンプルデータは、実際のユースケースを模倣することができるランダムな値で構成されます。以下のようなJSON形式でデータを作成します。

{
  "timestamp": "2023-01-01T00:00:00Z",
  "value": 100
}

ここでtimestampはISO 8601形式で、valueはデータの値です。シェルスクリプトやPythonスクリプトを利用して、これらのデータを一定間隔で生成し、Elasticsearchに投入することができます。

サンプルデータをElasticsearchに投入するには、curlコマンドやPostmanなどのHTTPクライアントを使用して、HTTP POSTリクエストを行います。

curl -X POST "localhost:9200/my-index/_doc" -H "Content-Type: application/json" -d'
  {
    "timestamp": "2023-12-03T12:00:00Z",
    "value": 100
  }'

このコマンドは、現在のUTC時刻とランダムなvalue値を持つJSONデータをmy-indexインデックスに投入します。

データがElasticsearchに正しく投入されたことを確認するには、以下のようなクエリを実行します。

curl -X GET "http://localhost:9200/my-index/_search?pretty"

このコマンドは、my-indexインデックスに格納されたデータのサンプルを返します。prettyパラメータは、読みやすい形式で結果を表示するためのものです。

データが期待通りにElasticsearchに格納されていることを確認したら、次はGrafanaでこれらのデータを視覚化する準備が整います。

セクション5: GrafanaでのElasticsearchデータソースの設定

データがElasticsearchに投入されたので、次はGrafanaでそれを視覚化するためのデータソースを設定します。このプロセスは、Grafanaの機能を活用して、データをクエリし、分析するための基盤を作ります。

まず、Grafanaのウェブインターフェイスにアクセスします。デフォルトでは、Grafanaはポート3000で実行されますので、ブラウザで http://localhost:3000 を開きます。ログイン画面が表示されたら、初期設定で定められたユーザー名(デフォルトではadmin)とパスワード(こちらも admin で、最初に初期パスワードを設定します)を使用してログインします。

Grafanaダッシュボードの左サイドバーからメニューをクリックし、「Connections」「Data Sources」を選択します。画面の「Add data source」ボタンをクリックし、リストから「Elasticsearch」を選びます。

Elasticsearchの設定ページで、以下の情報を入力します。

  • Name: データソースの名前を入力します。
  • URL: ElasticsearchインスタンスのURLを入力します。この例では、http://elasticsearch:9200 となります(Docker Composeで定義したサービス名を使用)。
  • Index name: Elasticsearchでデータを格納したインデックス名を入力します。この例では、my-index です。
  • Time Field name: Elasticsearchのタイムスタンプフィールド名を入力します。この例では、timestamp です。

全ての情報を入力したら、「Save & Test」ボタンをクリックして、GrafanaがElasticsearchに接続できるかテストします。成功すれば、接続が確立され、データソースとして使用できるようになります。

セクション6: Grafanaでのダッシュボードとパネルの作成

Grafanaでデータソースを設定した後、次のステップはダッシュボードを作成し、Elasticsearchからのデータを視覚化するパネルを追加することです。このセクションでは、そのプロセスをステップバイステップで説明します。

Grafanaのメインメニューから「Dashboard」「Create Dashboard」「Add visualization」をクリックして新しいダッシュボードを作成します。新しいダッシュボードが開いたら、Elasticsearchをデータソースとして指定します。

パネルエディタが開いたら、次のように設定を行います:

  • データソースの選択: 前のセクションで設定したElasticsearchデータソースを選択します。
  • クエリの構築: 「Query」セクションで、Elasticsearchから取得したいデータにマッチするクエリを構築します。ここで、特定のフィールドの値や時間フィルターを指定できます。
  • 視覚化の選択: 「Visualization」タブでグラフの種類を選択します。時系列データを表示するには「Time series」が適しています。
  • パネルのカスタマイズ: 「Panel Title」に適切な名前を入力し、その他の視覚的要素(軸のラベル、色、レジェンドなど)をカスタマイズします。

時系列データを視覚化する場合、通常、データポイントがどのように時間とともに変化するかを示す折れ線グラフを使用します。以下の設定を確認し、必要に応じて調整します:

  • Metric: データソースから「value」フィールドを選択し、集計方法として「Average」や「Max」を選ぶことができます。
  • Group By: 「Date Histogram」を選択し、適切な「Interval」を設定します。
  • Time Range: ダッシュボード右上の時間範囲を設定し、表示したいデータの時間枠を選択します。

すべての設定が完了したら、画面右上にある「Save」ボタンをクリックしてダッシュボードを保存します。保存時にはダッシュボードに名前をつけ、必要に応じて詳細な説明を加えることができます。

セクション7: 大量のサンプルデータの投入と折れ線グラフの表示

データ視覚化の実践的な学習には、現実的なデータセットの使用が不可欠です。このセクションでは、大量のサンプルデータをElasticsearchに投入し、それをGrafanaで折れ線グラフとして表示する方法を説明します。

サンプルデータを生成するには、スクリプトを使用して一定期間ごとにデータポイントを生成し、Elasticsearchに送信する方法が効果的です。以下は、簡単なbashスクリプトの例です。

#!/bin/bash
# ElasticsearchのURLとインデックス名
ES_URL="http://localhost:9200"
INDEX_NAME="my-index"

# 現在のUNIXタイムスタンプを取得
current_time=$(date +%s)

# 1分ごとのデータを過去24時間分生成
for i in {0..1439}; do
    timestamp=$(($current_time - ($i * 60)))
    value=$(($RANDOM % 100))
    curl -X POST "$ES_URL/$INDEX_NAME/_doc" -H "Content-Type: application/json" -d @- << EOF
{
  "timestamp": "$(date -r $timestamp +"%Y-%m-%dT%H:%M:%SZ")",
  "value": $value
}
EOF
done

このスクリプトは、現在時刻から過去24時間にわたるランダムなvalueを持つデータポイントを生成し、Elasticsearchに投入します。

Grafanaでさきほどのダッシュボードについて、設定を変更します。

  • Metric: Max、フィールドを valueにします。
  • Options: Intervalを1mにします。

以下のように時系列データの折れ線グラフを確認できます。

セクション8: 環境のクリーンアップ

チュートリアルを完了した後、Docker環境をクリーンアップすることが重要です。このセクションでは、GrafanaとElasticsearchのDockerコンテナを安全に停止し、関連するデータをクリーンアップする方法について説明します。

GrafanaとElasticsearchのコンテナを停止するには、以下のコマンドを実行します:

docker-compose down

このコマンドは、docker-compose.ymlファイルに記述されたすべてのサービスを停止し、コンテナを削除します。また、Docker Composeによって作成されたネットワークも同時に削除されます。ただし、コンテナを停止しても、Dockerボリュームに保存されたデータは保持されます。

Docker環境のクリーンアップは、システムリソースの節約や、新しいプロジェクトを始める際の準備として重要です。上記の手順に従って、不要になったコンテナ、ボリューム、ネットワークを適切に削除し、システムをクリーンな状態に保ちましょう。

続けて、「セクション9: まとめとさらなる学習へのステップ」というセクションを詳しく書き出します。


セクション9: まとめとさらなる学習へのステップ

このチュートリアルを通じて、Dockerを使ったGrafanaとElasticsearchのセットアップから、データの視覚化、ダッシュボードのカスタマイズ、環境のクリーンアップに至るまでの一連のプロセスを学びました。ここでは、このチュートリアルの主要なポイントを振り返り、さらなる学習への道を案内します。

主要な学習ポイント

  • DockerとDocker Composeの基本: GrafanaとElasticsearchを簡単にセットアップし、運用する方法を学びました。
  • データの投入とインデックス作成: Elasticsearchにサンプルデータを投入し、データが適切にインデックスされていることを確認しました。
  • データソースとダッシュボードの設定: GrafanaでElasticsearchをデータソースとして追加し、データを視覚化するためのダッシュボードを作成しました。
  • クリーンアップ: 使用した環境を適切にクリーンアップし、リソースを解放しました。

さらなる学習への推奨

  • 公式ドキュメント: GrafanaとElasticsearchの公式ドキュメントを読むことで、さらに深い知識を得ることができます。
  • コミュニティフォーラムとブログ: 両ツールのコミュニティフォーラムやブログをフォローすることで、最新のヒントやトリック、ベストプラクティスを学ぶことができます。
  • 実践プロジェクト: 実際のデータセットを使用して独自のダッシュボードを作成し、新しいスキルを実践的に適用してみましょう。

GrafanaとElasticsearchは、データ駆動型の意思決定を支援する強力なツールです。このチュートリアルが、データ視覚化の旅における貴重な一歩となることを願っています。引き続き学習を進め、データの可能性を最大限に引き出してください。

目次