metricbeat+elasticsearch+kibanaでUbuntuマシンのメトリックを可視化。


マシンの構成は以下です。すべて１台で賄うことも可能なので、参考までに。

* メインPC
 * kibanaの画面を確認します
* Ubuntu server
 * 集計対象マシンです。metricbeatをインストールします。
* elasticsearch & kibana(ベースOSはubuntu)
 * 集計結果を集約するマシンです。
 * IP: 192.168.11.101

# apt用のリポジトリにelasticsearchを追加

パッケージマネージャを使って管理したほうがアップデート/削除がしやすいので、`apt`を使ってインストール出来るように設定します。

## elasticsearchリポジトリの認証用鍵を追加

```shell
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
```

## 後のインストールに必要になるコンポーネントをインストール

```shell
sudo apt-get install apt-transport-https
```

## elasticのリポジトリをaptソースリストに追加

```shell
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
```

参考：https://www.elastic.co/guide/en/beats/metricbeat/current/setup-repositories.html

# elasticsearchのインストール

```shell
sudo apt-get update && sudo apt-get install elasticsearch
```

## elasticsearchを外部からアクセスできるようにする

すべてを１台のマシンで済ませる場合には不要です。
今回は集計対象のマシンとelasticが動くマシンが別なので、外部からアクセスできるように設定を追加しました。

```yaml:/etc/elasticsearch/elasticsearch.yml
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
http.port: 9200
#
# For more information, consult the network module documentation.
transport.host: localhost
transport.tcp.port: 9300
#
```

設定が終わったので、elasticsearchを起動します。

```shell
systemctl restart elasticsearch
```

# kibanaのインストール

```shell
sudo apt-get update && sudo apt-get install kibana
```

kibanaも同様に外部からアクセス可能なように設定を行いました。

```yaml:/etc/kibana/kibana.yml
server.host: "0.0.0.0"
```

設定が終わったので、kibanaを起動します。

```shell
systemctl restart elasticsearch
```

# 集計対象ホストマシンにmetricbeatをインストール

```shell
sudo apt-get update && sudo apt-get install metricbeat
```

## elasticsearchホストを設定
`/etc/metricbeat/metricbeat.yml`に以下のような設定項目があるので、環境に合わせてセット。
ローカルホストでelasticsearchを動かす人は不要と思われます。
今回は異なるマシンのelasticsearchにアクセスするため、別ホストのIP/ポートをセットしました。

```yaml:/etc/metricbeat/metricbeat.yml
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["192.168.11.101:9200"]
```

## 集計対象をセット
環境にあわせて集計したいmodulesを有効化します。
今回はUbuntuマシンの情報が取りたいだけなので実施しませんでしたが、参考までに。

```shell
metricbeat modules enable apache mysql
```

利用な可能なmodulesは以下で確認できます。
デフォルトはsystemが有効になっているため、特に作業はありません。

```shell
root@ubuntu ~# metricbeat modules list
Enabled:
system

Disabled:
aerospike
apache
aws
beat
beat-xpack
ceph
cockroachdb
consul
coredns
couchbase
couchdb
docker
dropwizard
elasticsearch
elasticsearch-xpack
envoyproxy
etcd
golang
graphite
haproxy
http
jolokia
kafka
kibana
kibana-xpack
kubernetes
kvm
logstash
logstash-xpack
memcached
mongodb
mssql
munin
mysql
nats
nginx
oracle
php_fpm
postgresql
prometheus
rabbitmq
redis
statsd
traefik
uwsgi
vsphere
windows
zookeeper
```

metricbeatの起動

```
systemctl restart metricbeat
```


# kibanaから集計結果の確認

メインPCのブラウザから`192.168.11.101:5601`にアクセス。
左側のInfrastructureをクリックして情報を確認。

![192.168.11.101_5601_app_kibana.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/ecddd051-8292-7331-4911-2564a7f0fcfe.png)


![192.168.11.101_5601_app_infra (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190055/d48edc00-862f-551e-e78e-46c36e5d77d7.png)

# まとめ

kibana, metricbeat, elasticsearchの接続のための情報を書いただけなのに、しっかり情報が取得できているのが楽で凄いですね。
metricbeatさえ入れておけば他のモジュールもすぐに集計開始できそうなので、また情報があれば記事にします。