Elastic StackとDocker Composeを使いはじめる:パート1

blog-thumb-charts-laptop.png

Elastic Stackが長年にわたって成長を続けるのに伴って機能セットも増え、それによりローカルでの利用の開始や概念実証(POC)の実施も複雑になってきました。Elastic Cloudは現在でもElasticを使い始めるうえで最もスピーディで簡単な方法ですが、ローカルで開発とテストを行いたいというニーズはまだまだ広く存在しています。私たちは開発者として、迅速にセットアップし、開発期間を短縮し、労力を抑えつつ成果を達成することに魅力を感じます。Dockerほど迅速なセットアップとPOCを実現できるものはありません。このシリーズでは、ローカルで使用できるようにElastic Stack全体の構築を始めるうえで、Dockerに焦点を当てます。 

この2部構成シリーズのパート1では、Elasticsearch、Logstash、Kibana、Beats(総称:ELK-B)で構成される標準的なElastic Stackのコンポーネントの構成方法について詳しく説明します。これをベースにすれば、すぐに開発を開始できます。

パート2では、基本構成を強化し、APM、エージェント、Fleet、統合機能群、エンタープライズサーチなど、スタックの進化を実現するさまざまな機能を追加します。また、開発やPOCの目的で、これらを新しいローカル環境にインストルメントする方法も確認します。

これまでに、いずれかを使用した経験がある方は、本記事を読む代わりに、リポジトリにアクセスして、ファイルを入手することもできます。

前提条件として、Docker DesktopまたはDocker EngineDocker Composeをインストールして設定する必要があります。このチュートリアルでは、Docker Desktopを使用します。

本記事で焦点を当てるDockerコンテナーは、主にElasticsearchとKibanaです。ただし、クラスターに関するインサイトを取得するためにMetricbeatを利用し、インジェストの基本を確認するためにFilebeatとLogstashも利用します。

ファイル構造

まずは、ファイル構造の概要を定義することから始めましょう。

├── .env

├── docker-compose.yml

├── filebeat.yml

├── logstash.conf

└── metricbeat.yml

最初はシンプルな構造から始めます。ElasticsearchとKibanaはdocker-composeファイルから起動できますが、Filebeat、Metricbeat、Logstashはいずれもymlファイルから追加設定が必要になります。 

環境ファイル

次に、.envファイルでdocker-composeに渡す変数を定義します。これらのパラメータは、ポート、メモリーの制限、コンポーネントのバージョンなどを確立するのに役立ちます。

.env

# Project namespace (defaults to the current folder name if not set)
#COMPOSE_PROJECT_NAME=myproject


# Password for the 'elastic' user (at least 6 characters)
ELASTIC_PASSWORD=changeme


# Password for the 'kibana_system' user (at least 6 characters)
KIBANA_PASSWORD=changeme


# Version of Elastic products
STACK_VERSION=8.7.1


# Set the cluster name
CLUSTER_NAME=docker-cluster


# Set to 'basic' or 'trial' to automatically start the 30-day trial
LICENSE=basic
#LICENSE=trial


# Port to expose Elasticsearch HTTP API to the host
ES_PORT=9200


# Port to expose Kibana to the host
KIBANA_PORT=5601


# Increase or decrease based on the available host memory (in bytes)
ES_MEM_LIMIT=1073741824
KB_MEM_LIMIT=1073741824
LS_MEM_LIMIT=1073741824


# SAMPLE Predefined Key only to be used in POC environments
ENCRYPTION_KEY=c34d38b3a14956121ff2170e5030b471551370178f43e5626eec58b04a30fae2

すべてのパスワードのプレースホルダー「changeme」とサンプルキーは、デモンストレーションのみを目的として使用されていることに注意してください。これらは、ローカルでのPOCのニーズに合わせて変更する必要があります。 

上記でわかるとおり、ElasticsearchとKibanaにそれぞれポート9200と5601を指定しています。ここで、追加機能をテストできるように、ライセンスタイプを「basic」から「trial」に変更することもできます。

上記では、docker-compose.ymlファイルの各サービス(コンテナー)に渡すために、「STACK_VERSION」環境変数を使用しています。Dockerを使用する場合、:latestタグなどを使用せずにバージョン番号をハードコーディングすることは、環境を積極的に制御するうえで有用な方法です。Elastic Stackのコンポーネントでは、:latestタグがサポートされていないため、イメージをプルするためにバージョン番号が必要になります。

セットアップとElasticsearchノード

使い始めのときによく遭遇するトラブルの1つは、セキュリティ設定です。8.0では、セキュリティがデフォルトで有効になっています。そのため、「setup」ノードを利用して証明書を確立することで、証明書CAが正しくセットアップされるようにする必要があります。セキュリティは有効にしておくことが推奨されます。POC環境であっても、無効にしないようにしてください。

docker-compose.yml(「setup」コンテナー)

version: "3.8"


volumes:
 certs:
   driver: local
 esdata01:
   driver: local
 kibanadata:
   driver: local
 metricbeatdata01:
   driver: local
 filebeatdata01:
   driver: local
 logstashdata01:
   driver: local


networks:
 default:
   name: elastic
   external: false


services:
 setup:
   image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
   volumes:
     - certs:/usr/share/elasticsearch/config/certs
   user: "0"
   command: >
     bash -c '
       if [ x${ELASTIC_PASSWORD} == x ]; then
         echo "Set the ELASTIC_PASSWORD environment variable in the .env file";
         exit 1;
       elif [ x${KIBANA_PASSWORD} == x ]; then
         echo "Set the KIBANA_PASSWORD environment variable in the .env file";
         exit 1;
       fi;
       if [ ! -f config/certs/ca.zip ]; then
         echo "Creating CA";
         bin/elasticsearch-certutil ca --silent --pem -out config/certs/ca.zip;
         unzip config/certs/ca.zip -d config/certs;
       fi;
       if [ ! -f config/certs/certs.zip ]; then
         echo "Creating certs";
         echo -ne \
         "instances:\n"\
         "  - name: es01\n"\
         "    dns:\n"\
         "      - es01\n"\
         "      - localhost\n"\
         "    ip:\n"\
         "      - 127.0.0.1\n"\
         "  - name: kibana\n"\
         "    dns:\n"\
         "      - kibana\n"\
         "      - localhost\n"\
         "    ip:\n"\
         "      - 127.0.0.1\n"\
         > config/certs/instances.yml;
         bin/elasticsearch-certutil cert --silent --pem -out config/certs/certs.zip --in config/certs/instances.yml --ca-cert config/certs/ca/ca.crt --ca-key config/certs/ca/ca.key;
         unzip config/certs/certs.zip -d config/certs;
       fi;
       echo "Setting file permissions"
       chown -R root:root config/certs;
       find . -type d -exec chmod 750 \{\} \;;
       find . -type f -exec chmod 640 \{\} \;;
       echo "Waiting for Elasticsearch availability";
       until curl -s --cacert config/certs/ca/ca.crt https://es01:9200 | grep -q "missing authentication credentials"; do sleep 30; done;
       echo "Setting kibana_system password";
       until curl -s -X POST --cacert config/certs/ca/ca.crt -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" https://es01:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done;
       echo "All done!";
     '
   healthcheck:
     test: ["CMD-SHELL", "[ -f config/certs/es01/es01.crt ]"]
     interval: 1s
     timeout: 5s
     retries: 120

docker-compose.ymlの冒頭でComposeのバージョンを設定し、続いて各種コンポーネントで使用されるボリュームとデフォルトのネットワーク構成を設定します。

また、bashのおまじないを使用してクラスターノードを指定し、「setup」というラベルの付いたコンテナーを立ち上げていることもわかります。これにより、elasticsearch-certutilを呼び出し、yml形式でサーバー名を渡して、CA証明書とノード証明書を作成することができます。スタックに複数のElasticsearchノードを含めたい場合は、ここにサーバー名を追加して証明書の作成を許可します。

注:将来の投稿では、秘密保持のためにキーストアを使用するという推奨される方法を採用する予定ですが、現時点ではこれでクラスターを立ち上げられるようになります。

このsetupコンテナーが最初に立ち上がり、ES01コンテナーがオンラインになるのを待ってから、環境変数を使用してクラスターに必要なパスワードを設定します。また、他のすべてのコンテナーがアクセスできるように、すべての証明書を「certs」ボリュームに保存しています。

setupコンテナーはES01コンテナーに依存しているため、両方を起動できるように、次の構成を簡単に見てみましょう。

docker-compose.yml(「es01」コンテナー)

 es01:
   depends_on:
     setup:
       condition: service_healthy
   image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
   labels:
     co.elastic.logs/module: elasticsearch
   volumes:
     - certs:/usr/share/elasticsearch/config/certs
     - esdata01:/usr/share/elasticsearch/data
   ports:
     - ${ES_PORT}:9200
   environment:
     - node.name=es01
     - cluster.name=${CLUSTER_NAME}
     - discovery.type=single-node
     - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
     - bootstrap.memory_lock=true
     - xpack.security.enabled=true
     - xpack.security.http.ssl.enabled=true
     - xpack.security.http.ssl.key=certs/es01/es01.key
     - xpack.security.http.ssl.certificate=certs/es01/es01.crt
     - xpack.security.http.ssl.certificate_authorities=certs/ca/ca.crt
     - xpack.security.transport.ssl.enabled=true
     - xpack.security.transport.ssl.key=certs/es01/es01.key
     - xpack.security.transport.ssl.certificate=certs/es01/es01.crt
     - xpack.security.transport.ssl.certificate_authorities=certs/ca/ca.crt
     - xpack.security.transport.ssl.verification_mode=certificate
     - xpack.license.self_generated.type=${LICENSE}
   mem_limit: ${ES_MEM_LIMIT}
   ulimits:
     memlock:
       soft: -1
       hard: -1
   healthcheck:
     test:
       [
         "CMD-SHELL",
         "curl -s --cacert config/certs/ca/ca.crt https://localhost:9200 | grep -q 'missing authentication credentials'",
       ]
     interval: 10s
     timeout: 10s
     retries: 120

これは、テストに使用するElasticsearchのシングルノードクラスターになります。

生成されたCA証明書とノード証明書を使用する点に注目してください。 

また、- esdata01:/usr/share/elasticsearch/dataを指定することで、Elasticsearchデータをコンテナーの外部のボリュームに保存している点もポイントです。その主な理由は2つ、パフォーマンスとデータ永続性です。コンテナーの内部にデータディレクトリを残しておくと、Elasticsearchノードのパフォーマンスが大幅に低下し、docker-composeファイル内のコンテナーの構成を変更する必要が生じるたびにデータが失われることになります。

両方の構成が完了したら、最初の「docker-compose up」コマンドを実行できます。

Docker Composeのヒント

Docker Composeを初めて使う方やコマンドを思い出すのが久しぶりという方のために、この冒険に向けて知っておきたい主なコマンドを簡単におさらいしておきましょう。

これらのコマンドはすべて、docker-compose.ymlファイルと同じフォルダーにあるターミナルで実行する必要があります。私のサンプルフォルダーは次のとおりです。

各コマンドを見てみましょう。

では、「docker-compose up」を実行してみましょう。

構文に誤りがなければ、この時点でDockerは、すべてのイメージのダウンロードと、docker-compose.ymlファイルにリストされている環境のビルドを開始します。インターネットの速度によっては、これに数分かかる場合があります。Docker Desktopの外部でイメージを確認したい場合は、オフィシャルのElastic Docker Hubでいつでも見つけることができます。

仮想メモリの誤設定のトラブルシューティング

Elasticsearchノードを初めて立ち上げる際に、多くのユーザーが仮想メモリの設定で行き詰まり、次のようなエラーメッセージを目にしています。

{"@timestamp":"2023-04-14T13:16:22.148Z", "log.level":"ERROR", "message":"node validation exception\n[1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.\nbootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]", "ecs.version": "1.2.0","service.name":"ES_ECS","event.dataset":"elasticsearch.server","process.thread.name":"main","log.logger":"org.elasticsearch.bootstrap.Elasticsearch","elasticsearch.node.name":"es01","elasticsearch.cluster.name":"docker-cluster"}

ここで注意すべきなのは、最大仮想メモリ領域であるvm.max_map_count [65530]が低すぎる点です。少なくとも[262144]まで増加する必要があります。

突き詰めると、コンテナーがホストされている場所でコマンドsysctl -w vm.max_map_count=262144を実行することが必要です。

Macの場合は、Docker for Mac向けのこちらの手順を確認してください。Docker Desktopについては、こちらの手順に従ってください。Linuxユーザーの場合は、こちらの手順を確認してください。Windowsユーザーの場合は、Docker Desktopについてはこちらの手順をお試しください。ただし、Docker DesktopとともにWSLv2を使用している場合は、こちらを確認してください

手順を完了したら、Docker Desktopを再起動し、docker-compose upコマンドを再試行できます。

証明書とパスワードの生成が完了すると、setupコンテナーは意図的に終了されるので、注意してください。

ここまでは順調ですが、テストしてみましょう。 

コマンドを使用して、es01-1コンテナーからca.crtをコピーできます。コンテナーセットの名前は、docker-compose.ymlが実行されているフォルダーに基づきます。たとえば、私のディレクトリは「elasticstack_docker」なので、上のスクリーンショットに基づくと、コマンドは次のようになります。

docker cp

elasticstack_docker-es01-1:/usr/share/elasticsearch/config/certs/ca/ca.crt /jp/tmp/.

証明書がダウンロードされたら、curlコマンドを実行してElasticsearchノードにクエリを実行します。

curl --cacert /jp/tmp/ca.crt -u elastic:changeme https://localhost:9200

うまくいきました。

localhost:9200を使用してElasticsearchにアクセスしていることに注目してください。これは、docker-compose.ymlportsセクションで指定したポートによるものです。この設定により、コンテナー上のポートがホスト上のポートにマッピングされ、トラフィックがマシンを通過して、そのポートが指定されたDockerコンテナーに到達できるようになります。

Kibana

Kibanaの構成では、前に出力した証明書を利用します。また、前述のElasticsearchノードが問題なく動作していることが確認されるまで、このノードが起動しないように指定します。

docker-compose.yml(「kibana」コンテナー)

kibana:
   depends_on:
     es01:
       condition: service_healthy
   image: docker.elastic.co/kibana/kibana:${STACK_VERSION}
   labels:
     co.elastic.logs/module: kibana
   volumes:
     - certs:/usr/share/kibana/config/certs
     - kibanadata:/usr/share/kibana/data
   ports:
     - ${KIBANA_PORT}:5601
   environment:
     - SERVERNAME=kibana
     - ELASTICSEARCH_HOSTS=https://es01:9200
     - ELASTICSEARCH_USERNAME=kibana_system
     - ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}
     - ELASTICSEARCH_SSL_CERTIFICATEAUTHORITIES=config/certs/ca/ca.crt
     - XPACK_SECURITY_ENCRYPTIONKEY=${ENCRYPTION_KEY}
     - XPACK_ENCRYPTEDSAVEDOBJECTS_ENCRYPTIONKEY=${ENCRYPTION_KEY}
     - XPACK_REPORTING_ENCRYPTIONKEY=${ENCRYPTION_KEY}
   mem_limit: ${KB_MEM_LIMIT}
   healthcheck:
     test:
       [
         "CMD-SHELL",
         "curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'",
       ]
     interval: 10s
     timeout: 10s
     retries: 120

「environment」セクションで、ELASTICSEARCH_HOSTS=https://es01:9200を指定していることに注目してください。Dockerのデフォルトのネットワークを利用しているので、ここでES01 Elasticsearchコンテナーのコンテナー名を指定できます。docker-compose.ymlファイルの冒頭で指定した「elastic」ネットワークを使用しているすべてのコンテナーが、他のコンテナー名を適切に解決し、相互に通信できるようになります。

Kibanaを読み込んで、アクセスできるかどうかを確認しましょう。

コンテナーは緑色です。これで、http://localhost:5601にアクセスできるようになりました。

指定したユーザー名とパスワードを使用して簡単にログインでき、Kibanaの新規インスタンスがすぐに作成されます。素晴らしいですね。

Metricbeat

KibanaとElasticsearchが稼働し、通信できるようになったところで、状況を監視するためにMetricbeatを構成しましょう。これには、metricbeat.ymlファイルでの構成とスタンドアロンのmetricbeat.ymlファイルでの構成の両方が必要です。

注:Logstash、Filebeat、Metricbeatでは、構成ファイルでバインドマウントを使用します。ファイルのバインドマウントにより、コンテナー内にホストシステム上と同じパーミッションと所有権が保持されます。コンテナーのユーザーがファイルを読み取り可能で、理想的には書き込みできないように、パーミッションを設定してください。でないと、コンテナー内でエラーが発生します。おそらく、ホスト上の書き込み許可を削除するだけで、これを達成できるでしょう。

docker-compose.yml(「metricbeat01」コンテナー)

 metricbeat01:
   depends_on:
     es01:
       condition: service_healthy
     kibana:
       condition: service_healthy
   image: docker.elastic.co/beats/metricbeat:${STACK_VERSION}
   user: root
   volumes:
     - certs:/usr/share/metricbeat/certs
     - metricbeatdata01:/usr/share/metricbeat/data
     - "./metricbeat.yml:/usr/share/metricbeat/metricbeat.yml:ro"
     - "/var/run/docker.sock:/var/run/docker.sock:ro"
     - "/sys/fs/cgroup:/hostfs/sys/fs/cgroup:ro"
     - "/proc:/hostfs/proc:ro"
     - "/:/hostfs:ro"
   environment:
     - ELASTIC_USER=elastic
     - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
     - ELASTIC_HOSTS=https://es01:9200
     - KIBANA_HOSTS=http://kibana:5601
     - LOGSTASH_HOSTS=http://logstash01:9600

ここでは、プロセス、ファイルシステム、Dockerデーモンに関するホスト情報を読み取り専用形式でMetricbeatコンテナーに公開しています。これにより、MetricbeatはElasticsearchに送信するデータを収集できるようになります。

metricbeat.yml

metricbeat.config.modules:
 path: ${path.config}/modules.d/*.yml
 reload.enabled: false


metricbeat.modules:
- module: elasticsearch
 xpack.enabled: true
 period: 10s
 hosts: ${ELASTIC_HOSTS}
 ssl.certificate_authorities: "certs/ca/ca.crt"
 ssl.certificate: "certs/es01/es01.crt"
 ssl.key: "certs/es01/es01.key"
 username: ${ELASTIC_USER}
 password: ${ELASTIC_PASSWORD}
 ssl.enabled: true


- module: logstash
 xpack.enabled: true
 period: 10s
 hosts: ${LOGSTASH_HOSTS}


- module: kibana
 metricsets:
   - stats
 period: 10s
 hosts: ${KIBANA_HOSTS}
 username: ${ELASTIC_USER}
 password: ${ELASTIC_PASSWORD}
 xpack.enabled: true


- module: docker
 metricsets:
   - "container"
   - "cpu"
   - "diskio"
   - "healthcheck"
   - "info"
   #- "image"
   - "memory"
   - "network"
 hosts: ["unix:///var/run/docker.sock"]
 period: 10s
 enabled: true


processors:
 - add_host_metadata: ~
 - add_docker_metadata: ~


output.elasticsearch:
 hosts: ${ELASTIC_HOSTS}
 username: ${ELASTIC_USER}
 password: ${ELASTIC_PASSWORD}
 ssl:
   certificate: "certs/es01/es01.crt"
   certificate_authorities: "certs/ca/ca.crt"
   key: "certs/es01/es01.key"

Metricbeatが開始するには、ES01ノードとKibanaノードが正常に稼働している必要があります。ここで注目すべき設定は、metricbeat.ymlファイルにあります。メトリックの収集のために、Elasticsearch、Kibana、Logstash、Dockerの4つのモジュールを有効にしています。つまり、Metricbeatが起動していることを確認したら、Kibanaの「Stack Monitoring」へ移動し、状況を確認することができます。

手軽に活用できるルールの設定もお忘れなく。

Metricbeatは、/var/run/docker.sockを通じてコン​​テナーのホストを監視するようにも構成されています。Elasticオブザーバビリティをチェックすると、ホストから受信するメトリックを確認できます。

Filebeat

クラスターが安定し、Metricbeatで監視されるようになったところで、ログのインジェストに使用するFilebeatについて見てみましょう。ここでは、Filebeatを2種類の方法で利用します。

docker-compose.yml(「filebeat01」コンテナー)

 filebeat01:
   depends_on:
     es01:
       condition: service_healthy
   image: docker.elastic.co/beats/filebeat:${STACK_VERSION}
   user: root
   volumes:
     - certs:/usr/share/filebeat/certs
     - filebeatdata01:/usr/share/filebeat/data
     - "./filebeat_ingest_data/:/usr/share/filebeat/ingest_data/"
     - "./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro"
     - "/var/lib/docker/containers:/var/lib/docker/containers:ro"
     - "/var/run/docker.sock:/var/run/docker.sock:ro"
   environment:
     - ELASTIC_USER=elastic
     - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
     - ELASTIC_HOSTS=https://es01:9200
     - KIBANA_HOSTS=http://kibana:5601
     - LOGSTASH_HOSTS=http://logstash01:9600

filebeat.yml

filebeat.inputs:
- type: filestream
 id: default-filestream
 paths:
   - ingest_data/*.log


filebeat.autodiscover:
 providers:
   - type: docker
     hints.enabled: true


processors:
- add_docker_metadata: ~


setup.kibana:
 host: ${KIBANA_HOSTS}
 username: ${ELASTIC_USER}
 password: ${ELASTIC_PASSWORD}


output.elasticsearch:
 hosts: ${ELASTIC_HOSTS}
 username: ${ELASTIC_USER}
 password: ${ELASTIC_PASSWORD}
 ssl.enabled: true
 ssl.certificate_authorities: "certs/ca/ca.crt"

まず、フォルダー「filebeat_ingest_data」をコンテナーにマッピングするバインドマウントを設定しています。このフォルダーがホスト上に存在しない場合は、コンテナーのスピンアップ時に作成されます。Elasticオブザーバビリティ内でカスタムログに対してログストリームビューアーをテストしたい場合は、拡張子が.logのファイルを/filebeat_ingest_data/にドロップするだけで、ログがデフォルトのFilebeatのデータストリームに読み込まれます。

これに加えて、/var/lib/docker/containersおよび/var/run/docker.sockにもマッピングされています。これらはfilebeat.autodiscoverセクションおよびhints-based autodiscoverと組み合わされ、それによりFilebeatですべてのコンテナーのログが取り込めるようになります。これらのログは、前述のログストリームビューアーにも表示されます。

Logstash

本記事が作成する最後のコンテナーは、いよいよLogstashです。

docker-compose.yml(「logstash01」コンテナー)

 logstash01:
   depends_on:
     es01:
       condition: service_healthy
     kibana:
       condition: service_healthy
   image: docker.elastic.co/logstash/logstash:${STACK_VERSION}
   labels:
     co.elastic.logs/module: logstash
   user: root
   volumes:
     - certs:/usr/share/logstash/certs
     - logstashdata01:/usr/share/logstash/data
     - "./logstash_ingest_data/:/usr/share/logstash/ingest_data/"
     - "./logstash.conf:/usr/share/logstash/pipeline/logstash.conf:ro"
   environment:
     - xpack.monitoring.enabled=false
     - ELASTIC_USER=elastic
     - ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
     - ELASTIC_HOSTS=https://es01:9200

logstash.conf

input {
 file {
   #https://www.elastic.co/guide/en/logstash/current/plugins-inputs-file.html
   #default is TAIL which assumes more data will come into the file.
   #change to mode => "read" if the file is a compelte file.  by default, the file will be removed once reading is complete -- backup your files if you need them.
   mode => "tail"
   path => "/usr/share/logstash/ingest_data/*"
 }
}


filter {
}


output {
 elasticsearch {
   index => "logstash-%{+YYYY.MM.dd}"
   hosts=> "${ELASTIC_HOSTS}"
   user=> "${ELASTIC_USER}"
   password=> "${ELASTIC_PASSWORD}"
   cacert=> "certs/ca/ca.crt"
 }
}

Logstash構成はFilebeat構成とよく似ています。Logstash構成でもバインドマウントを使用し、/logstash_ingest_data/というフォルダーをホストからLogstashコンテナーにマッピングしています。Logstash構成では、logstash.ymlファイルに変更を加えることで、多数あるインプットプラグインフィルタープラグインの一部をテストできます。次に、データを/logstash_ingest_data/フォルダーにドロップします。logstash.ymlファイルを変更した後、Logstashコンテナーの再起動が必要になる場合があります。

Logstashの出力インデックス名は「logstash-%{+YYYY.MM.dd}」であることに注意してください。データを表示するには、以下に示すように、「logstash-*」パターンのデータビューを作成する必要があります

FilebeatとLogstashの両方が稼働している状態で、クラスターの監視に戻ると、監視対象のLogstashと、Elasticsearchログのメトリックとリンクがいくつか表示されます。

まとめ

このシリーズのパート1では、監視とインジェストの機能を備えた、スタックの基盤としてのフルアクティブクラスターについて説明しました。これは、Elasticエコシステムの機能の一部をテストするためのローカルのプレイグラウンドになります。

さらに詳しく学びたいなら、ぜひパート2をチェックしてください!この基盤を最適化し、APMサーバー、Elasticエージェント、Elastic統合機能群、Elastic検索などの追加機能のセットアップについて詳しく説明しています。また、これらの要素の一部を使用してインストルメントできるアプリケーションもデプロイしてテストしています。

本記事で説明したファイルはすべて、FilebeatとLogstash向けにインジェストするためのサンプルデータとともにGitHubで入手できます

Elastic Stack入門ビデオを視聴する