logstash をDockerで動かして、Elastic Cloudへデータをアップロードしてみる


環境

環境:ElasticsearchはElastic Cloudを使用
logstash: 7.9.1
metricbeat: 7.9.1

Elastic Cloudは設定済みとする。
Cloud Id、パスワードもメモ済みとする。

各機能の関係性はこんな感じです

logstashイメージ取得

以下から最新のイメージのパスを確認

logstash | Docker @ Elastic

執筆時、最新が7.9.1でした。

docker pull docker.elastic.co/logstash/logstash:7.9.1

起動

docker run --rm -it -p 5044:5044 docker.elastic.co/logstash/logstash:7.9.1

以下が表示されてたら成功

[2020-09-22T02:58:20,563][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}

起動確認

$ docker ps

CONTAINER ID        IMAGE                                       COMMAND                  CREATED             STATUS              PORTS                              NAMES
b8867b83444c        docker.elastic.co/logstash/logstash:7.9.1   "/usr/local/bin/dock…"   7 minutes ago       Up 7 minutes        0.0.0.0:5044->5044/tcp, 9600/tcp   heuristic_mestorf

Metricbeat

Elastic Cloudへデータをアップロードするデータ元をMetricbeatで作成し、Logstashへ送る

Download Metricbeat
Download Metricbeat • Ship Metrics to Elasticsearch | Elastic

metricbeat.ymlの編集

elasticsearchをコメントアウトし、logstashを有効にする

#output.elasticsearch:
# Array of hosts to connect to.
# hosts: ["localhost:9200"]

output.logstash:
  # The Logstash hosts
  hosts: ["localhost:5044"]

metricbeat.ymlの実行

./metricbeat -e

logstashの確認

logstash側に以下のように表示されたら、metricbeat -> logstashへデータが送信されています。

{
    "@timestamp" => 2020-09-22T04:31:06.525Z,
         "event" => {
          "module" => "system",
        "duration" => 74705442,
         "dataset" => "system.process"
    },
       "service" => {
        "type" => "system"
    },
     "metricset" => {
          "name" => "process",
        "period" => 10000
    },
    省略

Logstash設定変更

デフォルトでは受信したデータを、標準出力へ出力するだけなので、Elastic Cloudへデータを送信するように設定を変更する。

送信先のIndex名を調べる。

Endpointに以下のようなGetを投げる

Get

https://xxxxxxxxxxx42b7b40a0773f8801e.us-east-1.aws.found.io:9243/_cat/indices?v

logstash.confの追加

logstash.confに以下のような内容にする。

logstash.conf
input {
  beats {
    port => 5044
  }
}
output {
    elasticsearch {
        hosts => ["https://xxxxxxxxxxx42b7b40a0773f8801e.us-east-1.aws.found.io:9243"]
        user => "elastic"
        password => "xxxxxxxxxxxxxxxxxxxxx"
        index => "metricbeat-7.9.1-2020.09.22-000001"
    }
}

logstashを再度起動

docker run --rm -it -p 5044:5044 -v /Users/xxxxx/Documents/Logstash:/usr/share/logstash/pipeline/ docker.elastic.co/logstash/logstash:7.9.1 

Kibanaで確認

KibanaのHOME画面から、Visualize and Explore Data → Metricsを選択

Host Metricsを選択

こんな感じで表示されれば成功