【Elastic】LogstashとElasticsearchを別々のコンテナにセットアップし、ログデータを送信する方法

【Elastic】LogstashとElasticsearchを別々のコンテナにセットアップし、ログデータを送信する方法

2023-09-04

2024-08-13

Dockerネットワークを作成

“elastic”という名前のDockerネットワークを作成します。

docker network create elastic

Logstashをネットワークに接続

準備済みのLogstashコンテナを”elastic”ネットワークに接続します。

docker network connect elastic logstash

Elasticsearchをネットワークに接続

Elasticsearch Dockerコンテナを作成・実行し、“elastic”ネットワークに接続します。

docker run --network=elastic -p 9200:9200 -p 9300:9300 --name=elasticsearch -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.15.2

コンテナを実行後、停止する

Elasticsearchを下記コマンドで実行した後、Ctrl+Cで停止します。

docker run --network=elastic -p 9200:9200 -p 9300:9300 --name=elasticsearch -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.15.2

Elasticsearchをネットワークに再接続

Elasticsearchを”elastic”ネットワークに再接続します。

docker network connect elastic elasticsearch

Elasticsearchコンテナを起動

docker start elasticsearch

IPアドレスを調べる

ElasticsearchコンテナのIPアドレスを調べます (注: Windowsではコマンドに二重引用符を使用します)。

docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" elasticsearch

ネットワークに関する詳細情報を表示

docker network inspect elastic コマンドは、“elastic”という名前のDockerネットワークに関する情報を取得するために使用されます。 このコマンドは、ネットワークの名前、ID、作成日時、設定など、ネットワークに関する詳細情報を表示します。

docker network inspect elastic

出力

"Containers": {
  "<CONTAINER_ID>": {
    "Name": "elasticsearch",
    "EndpointID": "<EndpointID>",
    "MacAddress": "00:00:ac:00:00:00",
    "IPv4Address": "172.19.0.3/16",
    "IPv6Address": ""
  },
  "<CONTAINER_ID>": {
    "Name": "logstash",
    "EndpointID": "<EndpointID>",
    "MacAddress": "00:00:ac:00:00:00",
    "IPv4Address": "172.19.0.2/16",
    "IPv6Address": ""
  }
},

Logstashコンテナを起動

docker start logstash

Logstashコンテナにアクセス

docker exec -it logstash /bin/bash

Logstashのパイプラインを設定

vi /usr/share/logstash/pipeline/logstash.conf

エディタに次の設定を入力します。

input {
  file {
    path => "/usr/share/logstash/logs/test.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    codec => "json"
  }
}

output {
  elasticsearch {
    hosts => ["http://172.19.0.3:9200"]
    index => "test_index"
  }
  stdout { codec => rubydebug }
}

エディタを保存して終了

更新されたパイプライン設定でLogstashを実行します。

/usr/share/logstash/bin/logstash -f /usr/share/logstash/pipeline/logstash.conf

Logstashプロセスが開始され、指定された入力ファイルからデータを読み取り、Elasticsearchに送信し、rubydebugコーデックを使用してstdoutで出力を表示します。 次の出力が表示されるはずです。

{
        "host" => "000000000000",
  "@timestamp" => "2023-00-00T00:00:00.000Z",
        "test2" => "test2",
        "test3" => "test3",
        "test" => "test1",
    "@version" => "1",
        "path" => "/usr/share/logstash/logs/test.log"
}

Elasticsearchコンテナにアクセス

Elasticsearchコンテナにアクセスします

docker exec -it elasticsearch /bin/bash

“test_index”インデックス内のドキュメントの数を確認する。

curl 172.19.0.3:9200/test_index/_count

出力

{"count":1,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0}}

“test_index”インデックスからログデータを取得する。

curl 172.19.0.3:9200/test_index/_search?pretty

出力

{
  "_index" : "test_index",
  "_type" : "_doc",
  "_id" : "AAAAAAAAAAaaaaaaaaaa",
  "_score" : 1.0,
  "_source" : {
    "host" : "000000000000",
    "@timestamp" : "2023-00-00T00:00:00.000Z",
    "test2" : "test2",
    "test3" : "test3",
    "test" : "test1",
    "@version" : "1",
    "path" : "/usr/share/logstash/logs/test.log"
  }
}

Recommend