2025年9月20日土曜日

docker で ElasticSearch9 を試す

docker で ElasticSearch9 を試す

概要

過去にES8を試しました
ES9が出たので久しぶりに試してみました

環境

  • macOS 15.6.1
  • docker 28.4.0
    • ElasticSearch 9.0.7
    • Kibana 9.0.7
    • fluentd 1.19-1

ElasticSearch の起動

  • docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name es docker.elastic.co/elasticsearch/elasticsearch:9.0.7

パスワードなどの確認や CA 証明書の取得などは同じ流れでした

  • docker exec -it es /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -a
  • docker cp es:/usr/share/elasticsearch/config/certs/http_ca.crt .
  • curl --cacert http_ca.crt -u elastic https://localhost:9200
Enter host password for user 'elastic':
{
  "name" : "528f80bd51ca",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "pBMuWf9vTBuFEj1PHoZiFA",
  "version" : {
    "number" : "9.0.7",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "c6d8fb31b39450a223671e79141dd1c4b2759b5f",
    "build_date" : "2025-09-10T22:06:39.784049935Z",
    "build_snapshot" : false,
    "lucene_version" : "10.1.0",
    "minimum_wire_compatibility_version" : "8.18.0",
    "minimum_index_compatibility_version" : "8.0.0"
  },
  "tagline" : "You Know, for Search"
}

エンロールメントトークンも取得しておきます

  • docker exec -it es /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana --url "https://localhost:9200"

Kibana 起動

  • docker run -d -p 5601:5601 --name kibana docker.elastic.co/kibana/kibana:9.0.7

Kibana ログイン時に認証コードが必要なので取得しておきます

  • docker exec kibana bin/kibana-verification-code

ログ送信

fluentd コンテナを使って送信します

  • vim Dockerfile
FROM fluent/fluentd:v1.19-1

USER root
RUN gem install fluent-plugin-elasticsearch
  • docker build -t my_fluentd .

fluent.conf を作成します
ES9 に接続するには認証情報などが必要になります
ssl_verify=false を設定しないと fluentd -> es で SSL のエラーが発生しました

  • vim fluent.conf
<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>

<match docker.**>
  @type copy
  <store>
    @type stdout
  </store>
  <store>
    @type elasticsearch
    user elastic
    password xxx
    ca_file /fluentd/etc/http_ca.crt
    ssl_verify false
    scheme https
    host 192.168.1.152
    port 9200

    logstash_format true
    logstash_prefix fluentd
  </store>
</match>

@timestamp フィールドを使うので logstash_format: true を設定しています

  • docker run --name fluentd -d -p 24224:24224 -p 24224:24224/udp -v $(pwd):/fluentd/etc -e FLUENTD_CONF=fluent.conf my_fluentd

あとは fluentd にログを投げるコンテナを起動すれば OK です

  • docker run --rm --log-driver=fluentd --log-opt fluentd-address=host.docker.internal:24224 --log-opt tag="docker.{{.Name}}" alpine /bin/sh -c "while :;do date; sleep 3; done;"

動作確認

Kibana を確認して fluentd インデックスにログがあることを確認します
Discover で棒グラフが表示されない場合は

最後に

ElasticSearch9 を docker で動かしてみました
認証方法などはほぼ ES8 と変わってませんでした

fluentd からログを送信する際にも認証情報は必要になるので注意しましょう

参考サイト

0 件のコメント:

コメントを投稿