3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[v8.7] Elasticsearch/Kibana/Fleet/Elastic Agentをdocker-composeでインストールする手順(試用用途)

Posted at

はじめに

下記の記事にてdocker-composeを使ってElasticsearchとKibanaを構成する方法を説明しました。
https://qiita.com/takeo-furukubo/items/c2f194679afadc06a4e9

今回は更に一歩進んでFleetを設定する方法を説明します。
これにより手元環境でElastic Solutionsを試すことができるようになります。

Fleetとは?

https://www.elastic.co/guide/en/fleet/current/fleet-server.html
Elastic Agentの管理プレーンです。その実体はElastic Agentです(ややこしい・・)
Elastic Agentの説明についてはこちらをご覧ください。
https://qiita.com/yukshimizu/items/abec12ac46749db46b40

Fleetを立ててそこにElastic Agentを登録するとKibanaの画面からバージョンアップや設定の変更を行うことが出来るようになります。

本手順を試した環境

  • クラウド:GCP
  • OS: Ubuntu 18.04.6 LTS
  • スペック: e2-standard-2インスタンス (2 vCPU, 8GB mem)
  • Docker version 23.0.5, build bc4487a
  • docker-compose version 1.29.2, build 5becea4c

ドキュメント

基本はこちらですが、docker-compose.yamlファイルは記載されておりません。
https://www.elastic.co/guide/en/fleet/current/fleet-server.html

設定ファイル

Gitからクローンしてください。
https://github.com/legacyworld/elasticstack

singlenodeとmultinodeの2つのディレクトリができますが、今回はsinglenodeです。
docker-compose_with_fleet.ymldocker-compose.ymlにコピーして使います。

docker-compose.yml

docker-composeファイルがかなり長くなっています。
前回から変わっているところを中心に説明していきます。

version: "2.2"

services:
  setup:
    profiles:
      - first
    image: docker.elastic.co/elasticsearch/elasticsearch:${STACK_VERSION}
...(略)
        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: fleet\n"\
          "    dns:\n"\
          "      - fleet\n"\
          "      - localhost\n"\
          "    ip:\n"\
          "      - 127.0.0.1\n"\
...(略)
  es01:
    profiles:
      - first
...(略)
  kibana:
    profiles:
      - first
...(略)
  fleet:
    profiles:
      - fleet
    image: docker.elastic.co/beats/elastic-agent:${STACK_VERSION}
    container_name: fleet
    restart: always
    user: root # note, synthetic browser monitors require this set to `elastic-agent`
    ports:
      - ${FLEET_PORT}:8220
    environment:
      - FLEET_ENROLL=0
      - FLEET_INSECURE=1
      - FLEET_URL=https://${HOST_IP}:${FLEET_PORT}
      - FLEET_SERVER_ENABLE=true
      - FLEET_SERVER_ELASTICSEARCH_HOST=https://${HOST_IP}:${ES_PORT}
      - FLEET_SERVER_POLICY=fleet-server-policy
      - FLEET_SERVER_SERVICE_TOKEN=${FLEET_SERVER_SERVICE_TOKEN}
      - ELASTICSEARCH_CA=/usr/share/fleet/config/ca/ca.crt
      - FLEET_CA=/usr/share/fleet/config/ca/ca.crt
      - CERTIFICATE_AUTHORITIES=/usr/share/fleet/config/ca/ca.crt
      - FLEET-SERVER-CERT=/usr/share/fleet/config/fleet/fleet.crt
      - FLEET-SERVER-CERT-KEY=/usr/share/fleet/config/fleet/fleet.key
      - FLEET-SERVER-ES-CA-TRUSTED-FINGERPRINT=${FLEET-SERVER-ES-CA-TRUSTED-FINGERPRINT}
    volumes:
      - certs:/usr/share/fleet/config/
  elastic-agent:
    profiles:
    - agent
    image: docker.elastic.co/beats/elastic-agent:${STACK_VERSION}
    container_name: elastic-agent
    restart: always
    user: root
    environment:
    - FLEET_ENROLLMENT_TOKEN=${FLEET_ENROLLMENT_TOKEN}
    - FLEET_ENROLL=1
    - FLEET_INSECURE=1
    - FLEET_URL=https://fleet:8220

以下の部分が変更になっています。

  • profile
    • これはdocker-composeでコンテナを立ち上げるときに、どれを立ち上げるか選択するためのものです。
    • Fleetを設定するためにはまずElasticsearchを立ち上げていくつか設定を変更する必要があります
  • fleetの証明書作成
  • fleetのEnvironment設定

.envファイル

STACK_VERSION = 8.7.0
ELASTIC_PASSWORD = elastic
KIBANA_PASSWORD = elastic
ES_PORT = 9200
CLUSTER_NAME = mac
LICENSE = trial
MEM_LIMIT = 2147483648
KIBANA_PORT = 5601
FLEET_PORT = 8220
HOST_IP = <ip address>
FLEET_SERVER_SERVICE_TOKEN = <Service Token>
FLEET-SERVER-ES-CA-TRUSTED-FINGERPRINT = <Finger Print>
FLEET_ENROLLMENT_TOKEN = <Enrollment Token>
  • HOST_IP
    • コンテナの外からElastic Agentを設定する際に必要になります
  • FLEET_SERVER_SERVICE_TOKEN
    • Fleetを登録する際に必要です
    • Kibanaで取得します
  • FLEET-SERVER-ES-CA-TRUSTED-FINGERPRINT
    • Elasticsearch Outputの設定に使用します
    • Elasticsearchコンテナでコマンドを実行して取得します
  • FLEET_ENROLLMENT_TOKEN
    • Elastic AgentをFleetに登録する際のTokenです

手順

Elasticsearch / Kibana起動

.envファイルのKIBANA_PORTより上の部分を正しく記載したら下記コマンドを実行します
docker-compose --profile first up -d
その後https://${HOST_IP}:${KIBANA_PORT}へアクセスして起動を確認します。

うまくいかなくて一度停止したい場合は
docker-compose.ymlファイルのある場所でdocker-compose down -v
volumeも一緒に消しておきます。

FingeprintとCAの取得

fleet.shファイルを実行すると下記のようになります。
この実行結果をコピペして後ほど使います。

$ ./fleet.sh 
SHA256 Fingerprint=14232D66E884346F573D82B1746D6697F171114EDA5640F7CE36BF94D7BE06D3
ssl:
 certificate_authorities:
 - |
    -----BEGIN CERTIFICATE-----
    MIIDSjCCAjKgAwIBAgIVAJH/WfHyUTMqXdBVV2itgbkWlz8JMA0GCSqGSIb3DQEB
...(略)
    BX30eBuzhpQRnq/gI7t8ejdUbcsxlvuOadFMMvQU
    -----END CERTIFICATE-----

fleet.shの2行目以降ではCAファイルを読み取って、YAML形式で出力するようになっています。

Outputの設定

Elastic Agentがどこにデータを送るかという設定です。
ElasticsearchとLogstashを設定できます。
左のメニューからManagement -> Fleetをクリックして、Settingsタブをクリックします。
スクリーンショット 2023-05-02 10.11.06.png

Outputの右端のActionsの下にある鉛筆マークをクリックして編集モードに入ります。
スクリーンショット 2023-05-01 17.52.12.png

  • Hosts
    • https://${HOST_IP}:${ES_PORT}を入力
  • Elasticsearch CA trusted fingerprint (optional)
    • 先程のfleet.shの実行結果の1行目の"="の右側
  • Advanced YAML configuration
    • 先程のfleet.shの実行結果の2行目以降をそのままコピペ

入力したら"Save andd apply settings"をクリックして保存

Fleetサーバ追加

"Add Fleet Server"をクリックします。
スクリーンショット 2023-05-01 14.44.30.png

  • Name
    • 自由に入力
  • URL
    • https://HOST_IP:FLEET_PORTを入力

上記を入力後、"Generate Fleet policy"をクリックして暫く待つと以下のような画面になります。
スクリーンショット 2023-05-02 10.57.14.png

以下の2つの値を.envに設定します。

  • --fleet-server-service-token=の右側の文字列をコピーして、.envファイルのFLEET_SERVER_SERVICE_TOKENに貼り付けます。
  • --fleet-server-es-ca-trusted-fingerprint=の右側の文字列をコピーして、.envファイルのFLEET-SERVER-ES-CA-TRUSTED-FINGERPRINTに貼り付けます

Fleetサーバ起動

以下のコマンドを実行します
docker-compose --profile fleet up -d

暫くすると以下のように登録が完了します。
スクリーンショット 2023-05-02 10.28.39.png

データの確認

左側のメニューからAnalytics -> Discoverをクリックします。
左上のDataviewが"logs-*"となっているはずです。
スクリーンショット 2023-05-02 10.31.13.png
ここで何も出てこない場合、何らか失敗している可能性があります。
左側のメニューからManagement -> Fleetをクリックすると登録されたFleetサーバが表示されます。
スクリーンショット 2023-05-02 10.33.24.png

うまく行かない場合の確認

  • コンテナの状態の確認
# docker-compose  ps
       Name                     Command                  State                             Ports                       
-----------------------------------------------------------------------------------------------------------------------
es01                 /bin/tini -- /usr/local/bi ...   Up (healthy)   0.0.0.0:9200->9200/tcp,:::9200->9200/tcp, 9300/tcp
fleet                /usr/bin/tini -- /usr/loca ...   Up             0.0.0.0:8220->8220/tcp,:::8220->8220/tcp          
kibana               /bin/tini -- /usr/local/bi ...   Up (healthy)   0.0.0.0:5601->5601/tcp,:::5601->5601/tcp          
singlenode_setup_1   /bin/tini -- /usr/local/bi ...   Exit 0 
  • コンテナログの確認
    docker-compose logs fleetでログを確認して、X509関係のエラーがないかどうか確認する

Elastic Agentの登録

Docker ContainerとしてElastic Agentを起動

Policyの作成

Management -> Fleetをクリックして、Agent Policiesタブを選んで"Create Agent policy"をクリック
スクリーンショット 2023-05-01 14.50.07.png

Nameに"agent_in_docker"(識別できればなんでも良い)を入力して、右下の"Create Agent policy"をクリックして保存
スクリーンショット 2023-05-01 14.51.28.png

今追加した"agent_in_docker"が表示されるのでそれをクリック
スクリーンショット 2023-05-01 14.55.51.png

右上にある"Add agent"をクリック
スクリーンショット 2023-05-02 10.49.08.png

"--enroll"の右側の文字列をコピーして、.envファイルのFLEET_ENROLLMENT_TOKENに設定します。
スクリーンショット 2023-05-01 14.56.23.png

Elastic Agent起動

docker-compose --profile agent up -d
Fleetに登録できれば以下のようになります。
スクリーンショット 2023-05-01 14.58.07.png
うまく行かない場合はdocker-compose psdocker-compose logs elastic-agentで確認してみましょう。

Agent一覧に追加されました。
スクリーンショット 2023-05-01 14.58.25.png

ホスト上でElastic Agentを起動

policyの作成

コンテナとして起動したときと同様にPolicyを作成します。
名前はわかるようにしておきましょう(agent_on_vmなど)

Elastic Agent起動

先程と異なるのはホスト上でインストールすることです。まずは自動的に用意されたコマンドをコピーしましょう。
"Add Agent"のダイアログウィンドウでコマンドが表示されていて、右上のアイコンを押すとコピーされます。
スクリーンショット 2023-05-02 11.10.09.png

上記でコピーしたコマンドをホストのターミナルに貼り付けるとAgentをダウンロード・解凍・ディレクトリ変更まで行われます。
最後のインストールはまだ実行しないでください(失敗します)

インストールコマンド変更

最後のコマンドの最後に--insecureを追加してから実行します。

sudo ./elastic-agent install --url=https://10.146.0.53:8220 --enrollment-token=a0ZiazFZY0JCdW9qRkVJODFSRVE6b2RxdDlJMXdRWGVsTUh1ZkIyTUdnZw== --insecure

問題なければ以下のように登録されたAgentが3つになります。(takeo-docker-vmがホストにインストールされたもの)
スクリーンショット 2023-05-01 15.04.08.png

下記のエラーが表示される場合は一度アンインストールしてください。

{"log.level":"info","@timestamp":"2023-05-02T02:32:22.965Z","log.origin":{"file.name":"cmd/enroll_cmd.go","file.line":271},"message":"Elastic Agent might not be running; unable to trigger restart","ecs.version":"1.6.0"}{"log.level":"info","@timestamp":"2023-05-02T02:32:22.965Z","log.origin":{"file.name":"cmd/enroll_cmd.go","file.line":271},"message":"Elastic Agent might not be running; unable to trigger restart","ecs.version":"1.6.0"}

アンインストールは下記のコマンドです。
sudo /opt/Elastic/Agent/elastic-agent uninstall

Docker Integrationを入れる

ホストにAgentがあるのでDockerのデータも集めてみます。
Management -> Fleet -> Agent policiesで先程作成したpolicy(agent_on_vm)をクリックして、右上の"Add Integration"をクリック
スクリーンショット 2023-05-02 11.24.23.png

Integrationの検索画面が表示されるので検索ボックスに"docker"と入力して、表示された"Docker"をクリック
スクリーンショット 2023-05-01 14.59.49.png

Docker Integrationの説明が表示されるので、右上の"Add Docker"をクリック
スクリーンショット 2023-05-01 15.00.00.png

いろいろ細かい設定が表示されるが、そのままにして右下の"Save and continue"をクリック
スクリーンショット 2023-05-01 15.00.29.png

Elastic Agentの設定を変更することになるので、確認のダイアログが立ち上がったら"Save and deploy changes"をクリックする
スクリーンショット 2023-05-02 11.40.37.png

これでDockerの情報を集め始めるので、しばらく待ってから左側のメニューからObservability -> Infrastructure -> Inventoryをクリックして、"Show"のドロップダウンメニューから”Docker Containers"を選ぶと、下図のようにコンテナが表示されます。
スクリーンショット 2023-05-01 15.04.44.png

停止

docker-compose.ymlファイルのある場所でdocker-compose down -v
Volumeも消します

削除

全てのコンテナイメージやボリュームなどまとめて消したい場合は停止後にdocker system prune -a
勿論Elasticsearch以外も消してしまいますのでご注意を。

最後に

本手順が完了すればオンプレでElastic Agentを試すことが出来るようになります。
今後以下のような内容で記載する予定です。

  • Elasticsearchを複数立ち上げる
  • Master Dedicatedを立ち上げる

Elastic Cloud 無料トライアル

こちらからElastic Cloudの14日間無料トライアルを是非お試しください
Elastic Cloud 無料トライアル

手順は下記リンクをご参照ください
Elastic Cloud について 〜実際にデプロイメントを作ってみよう〜

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?