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



# 環境


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

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


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

![image21-1024x328.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49910/befa55ab-cdfe-072d-4c0e-909f908dba74.png "image21-1024x328.png")




## logstashイメージ取得

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

[logstash | Docker @ Elastic](https://www.docker.elastic.co/r/logstash)

執筆時、最新が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](https://www.elastic.co/jp/downloads/beats/metricbeat)


#### 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を選択

![スクリーンショット 2020-09-22 15.54.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49910/248aedee-66c2-e4c5-27a1-039a1cdf0f4c.png "スクリーンショット 2020-09-22 15.54.09.png")

Host Metricsを選択

![スクリーンショット 2020-09-22 15.58.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49910/d3d2e980-cb50-0532-9186-bd040a48bcc7.png "スクリーンショット 2020-09-22 15.58.13.png")


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

![スクリーンショット 2020-09-22 15.58.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49910/915b7054-1520-382b-9417-f4b125ac9033.png "スクリーンショット 2020-09-22 15.58.04.png")