【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"
}
}