fbpx

【再入門】Elastic Stackの監視方法について #Elastic #Elasticsearch

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

New call-to-action

今年、Elastic Stackは7.10までリリースされました。
そして来年は、新メジャーバージョンの8のリリースが予想されます。

Elasticプロダクトは、最新2世代のメジャーバージョンのみメンテナンスが行われます。
バージョン8がリリースされる前には、6を7にアップグレードする必要がありますね。

本投稿のテーマであるElastic Stackの監視方法について
バージョン6.3以前の監視方法がバージョン8以降では、非推奨となり廃止が見えています。

image.png

バージョンアップを見据え、現在推奨されている監視方法をご紹介したいと思います^^/

これまでのスタック監視方法について


  • Elastic Stackの監視機能はオープンソースでは提供してなく、サブスクリプション(旧X-Pack)機能になります。
  • バージョン6.3以前は、各Elasticプロダクトの設定ファイル(.yml)でmonitoring設定を行っていました。
  • 本番用ESクラスタを中継させて、監視用ESクラスタに性能データを流すアーキテクチャになります。

image.png

【監視用ESクラスタとは】
・監視用ESクラスタは、Elastic Stackを監視するための専用クラスタのことになります。
・監視用ESクラスタを利用せず本番用ESクラスタでも可視化はできますが、性能面で本番利用は非推奨になっています。
・監視用ESクラスタは、本番用ESクラスタと同じバージョンもしくは1つ上のメジャーバージョンまでとなっています。

【参考】
従来のElasticsearchの監視方法
従来のKibanaの監視方法
従来のLogstashの監視方法
従来のFilebeatの監視方法

新しい監視アーキテクチャ


  • バージョン6.4以降、Metricbeatを使って監視用ESクラスタに性能データを送信する方式が推奨方式になりました。
  • 既存の方式は本番用ESクラスタに負荷が掛かっていましたが、Metricbeatを利用することでその負荷を軽減しています。
  • その代わりに各プロダクトとセットでOS上にMetricbeatを導入する作業と管理の負荷が増えることになりました。

image.png

【参考】
Monitor a cluster
Monitoring Logstash
Monitor Filebeat

必要なサブスクリプション


  • Stack Monitoringの機能の中で該当する機能は以下の通りです。
  • 監視対象のESクラスタが1つであれば、無償(ベーシック)で利用可能です。
  • 複数のスタック(≒ESクラスタ)の監視にはゴールド以上(有償)が必要になります。
機能 オープンソース ベーシック ゴールド プラチナ エンタープライズ
Full stack monitoring -
Multi-stack monitoring - -

【参考】
Elastic Stack subscriptions

利用環境


  • 以降、Metricbeatを使った監視方法の設定手順をご紹介します。
  • 現時点における最新のElasticバージョンでGCP上に環境構築しています。
項目 パラメータ
Kibana version 7.10.0
Elasticsearch version 7.10.0
Logstash version 7.10.0
Filebeat version 7.10.0
Metricbeat version 7.10.0
JDK version 11.0.9
VM image centos-7-v20201112
Region us-central1 (アイオワ)

【構成図】

  • 監視用ESクラスタのVMマシンには、Elasticsearch/Kibanaを同居させています。
  • 監視対象のFilebeat、Logstash、Elasticsearch、Kibanaは各VMマシンにMetricbeatを導入するため分けています。
  • GCPのVPCネットワークは、defaultネットワークを利用しています。

image.png

【補足】
・本投稿では、各VMマシンの作成および各OSへのElasticプロダクトのインストール手順は省略しています。

【参考】
Elasticsearchのインストール方法
Kibanaのインストール方法
Logstashのインストール方法
Filebeatのインストール方法

実施手順


  • 以下の手順で設定を実施しました。
  1. Metricbeatのインストール (監視対象VMで実施)
  2. Elasticsearchの監視設定 (elasticsearch-vm)
  3. Kibanaの監視設定 (kibana-vm)
  4. Logstashの監視設定 (logstash-vm)
  5. Filebeatの監視設定 (filebeat-vm)
  6. Kibanaの監視ダッシュボード

1. Metricbeatのインストール (監視対象VMで実施)

  • 本投稿では、CentOS7へインストールするため、RPMでのインストールとしています。
  • すでにElasticプロダクトがインストールされた環境への導入ですが、リポジトリ登録手順から解説します。

$ sudo vi /etc/yum.repos.d/elastic.repo
[elasticstack]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

  • Elasticプロダクト用のリポジトリ登録完了後、PGP鍵ファイルをインポートします。
  • yumコマンドでMetircbeatをインストールします。

$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
$ sudo yum install --enablerepo=elasticstack metricbeat

  • 以下のコマンドでインストールされていることを確認します。

$ sudo yum list installed | grep metricbeat
metricbeat.x86_64               7.10.0-1                       @elasticstack

  • Metricbeatのサービス自動起動を有効化します。

$ sudo systemctl daemon-reload
$ sudo systemctl enable metricbeat

  • metricbeat.ymlを編集し、監視用ESクラスタ (elasticstack01) への出力設定を行います。

$ sudo vi /etc/metricbeat/metricbeat.yml
部分抜粋</p>

<h1>================================== Outputs ===================================</h1>

<h1>Configure what output to use when sending the data collected by the beat.</h1>

<h1>---------------------------- Elasticsearch Output ----------------------------</h1>

<p>output.elasticsearch:
  # Array of hosts to connect to.
  #監視用ElasticsearchのURLを記載
  hosts: ["10.128.0.10:9200"]
  # Protocol - either <code>http</code> (default) or <code>https</code>.
  #protocol: "https"
  # Authentication credentials - either API key or username/password.
  #api_key: "id:api_key"
  #username: "elastic"
  #password: "changeme"

※ 監視用ESクラスタでセキュリティ機能を有効化している場合は権限のあるユーザでの認証設定する必要があります。
※ 本手順は、kibana-vm、elasticsearch-vm、logstash-vm、filebeat-vmの全てで実施します。

【参考】
Metricbeatのインストール方法

2. Elasticsearchの監視設定 (elasticsearch-vm)

  • 本設定は監視対象のelastic-vmで設定を行います。
  • MetricbeatのElasticsearch Moduleを利用して、性能データを監視用ESクラスタに送ります。
  • elasticsearch.ymlを編集し、本番用ESに.monitoring-es-*を作らない設定を行います。

$ sudo vi /etc/elasticsearch/elasticsearch.yml
xpack.monitoring.collection.enabled: true
xpack.monitoring.elasticsearch.collection.enabled: false

  • Elasticsearchを再起動します。

$ sudo systemctl restart Elasticsearch

  • スタック監視を行う場合に利用するModulesは、elasticsearch-xpack.ymlになります。
  • elasticsearch.ymlはdisabledのままとします。

$ sudo ll /etc/metricbeat/modules.d/ | grep elasticsearch
-rw-r--r--. 1 root root  262 Nov  9 20:08 elasticsearch-xpack.yml.disabled
-rw-r--r--. 1 root root  284 Nov  9 20:08 elasticsearch.yml.disabled

  • 以下のコマンドでelasticsearch-xpackを有効化します。

$ sudo metricbeat modules enable elasticsearch-xpack
Enabled elasticsearch-xpack

  • 監視用ESクラスタを指定するため、elasticsearch-xpack.ymlを編集します。

$ sudo vi /etc/metricbeat/modules.d/elasticsearch-xpack.yml
部分抜粋
- module: elasticsearch
  xpack.enabled: true
  period: 10s
  hosts: ["http://10.128.0.14:9200"]

※ OS内でMetricbeatからElasticssearchのAPIにアクセスできるhostsを指定してください。(IP or localhost)

  • Metricbeatを起動します。

$ sudo systemctl start metricbeat

【参考】
Elasticsearch Module
Create xpack.monitoring.elasticsearch.collection.enabled setting

3. Kibanaの監視設定 (kibana-vm)

  • 本設定は監視対象のkibana-vmで設定を行います。
  • MetricbeatのKibana Moduleを利用して、性能データを監視用ESクラスタに送ります。
  • kibana.ymlを編集し、本番用ESに.monitoring-kibana-*を作らない設定を行います。

$ sudo vi /etc/kibana/kibana.yml
xpack.monitoring.kibana.collection.enabled: false

  • Kibanaを再起動します。

$ sudo systemctl restart Kibana

  • スタック監視を行う場合に利用するModulesは、kibana-xpack.ymlになります。
  • kibana.ymlはdisabledのままとします。

$ sudo ll /etc/metricbeat/modules.d/ | grep kibana 
-rw-r--r--. 1 root root  249 Nov  9 20:08 kibana-xpack.yml.disabled
-rw-r--r--. 1 root root  256 Nov  9 20:08 kibana.yml.disabled

  • 以下のコマンドでkibana-xpackを有効化します。

$ sudo metricbeat modules enable kibana-xpack
Enabled kibana-xpack

  • kibana-xpack.ymlを編集します。

$ sudo vi /etc/metricbeat/modules.d/kibana-xpack.yml
部分抜粋
- module: kibana
  xpack.enabled: true
  period: 10s
  hosts: ["10.128.0.13:5601"]

※ OS内でMetricbeatからKibanaのAPIにアクセスできるhostsを指定してください。(IP or localhost)

  • Metricbeatを起動します。

$ sudo systemctl start metricbeat

【参考】
Kibana Module

4. Logstashの監視設定 (logstash-vm)

  • 本設定は監視対象のlogstash-vmで設定を行います。
  • MetricbeatのLostash Moduleを利用して、性能データを監視用ESクラスタに送ります。
  • スタック監視を行う場合に利用するModulesは、logstash-xpack.ymlになります。
  • logstash.ymlはdisabledのままとします。

$ sudo ll /etc/metricbeat/modules.d/ | grep logstash
-rw-r--r--. 1 root root  239 Nov  9 20:08 logstash-xpack.yml.disabled
-rw-r--r--. 1 root root  262 Nov  9 20:08 logstash.yml.disabled

  • 以下のコマンドでlogstash-xpackを有効化します。

$ sudo metricbeat modules enable logstash-xpack
Enabled logstash-xpack

  • logstash-xpack.ymlを確認します。

$ sudo cat /etc/metricbeat/modules.d/logstash-xpack.yml
部分抜粋
- module: logstash
  xpack.enabled: true
  period: 10s
  hosts: ["localhost:9600"]

※ OS内でMetricbeatからLogstashのAPIにアクセスできるhostsを指定してください。(IP or localhost)

  • Metricbeatを起動します。

$ sudo systemctl start metricbeat

【参考】
Logstash Module

5. Filebeatの監視設定 (filebeat-vm)

  • 本設定は監視対象のfilebeat-vmで設定を行います。
  • MetricbeatのBeat Moduleを利用して、性能データを監視用ESクラスタに送ります。
  • MetricbeatからFilebeatにAPIアクセスできるようにfilebeat.ymlで以下を追記します。

$ sudo vi /etc/filebeat/filebeat.yml
http.enabled: true
http.port: 5066

  • Filebeatを再起動します。

$ sudo systemctl restart filebeat

  • スタック監視を行う場合に利用するModulesは、beat-xpack.ymlになります。
  • beat.ymlはdisabledのままとします。

$ sudo ll /etc/metricbeat/modules.d/ | grep beat
-rw-r--r--. 1 root root  235 Nov  9 20:08 beat-xpack.yml.disabled
-rw-r--r--. 1 root root  209 Nov  9 20:08 beat.yml.disabled

  • 以下のコマンドでbeat-xpackを有効化します。

$ sudo metricbeat modules enable beat-xpack
Enabled beat-xpack

  • beat-xpack.ymlを確認します。

$ sudo cat /etc/metricbeat/modules.d/beat-xpack.yml
- module: beat
  xpack.enabled: true
  period: 10s
  hosts: ["http://localhost:5066"]

※ OS内でMetricbeatからLogstashのAPIにアクセスできるhostsを指定してください。(IP or localhost)

  • Metricbeatを起動します。

$ sudo systemctl start metricbeat

【参考】
Beats Module

6. Kibanaの監視ダッシュボード

  • 監視用クラスタ上のKibanaにアクセスします。
  • 左上のメニューから [Management] > [Dev Tools] > [Console]を開きます。
  • GET _cat/templates/.monitoring*を実行します。
  • 各プロダクトの性能用データを格納するためのスキーマ定義がすでに存在していることが確認できます。

image.png

  • 次にGET _cat/indeces/.monitoring-*?v&sを実行します。
  • 手順1〜5までがうまく行っていると以下のように各プロダクトごとに性能データを取り込まれ、Indexが作成されます。

image.png

  • 左上のメニューから [Management] > [Stack Monitoring]を開きます。
  • クラスタ一覧の中から[elasticsearch]をクリックします。 (デフォルトのクラスタ名)

image.png

  • Elasticsearch、Kibana、Logstashに関する性能ダッシュボードになります。

image.png

  • Filebeatだけ直接Elasticssearchへのパスがないためか、Standalone Clusterという扱いになっていました。

image.png

  • こちらでは全部の画面を紹介することは難しいので、いくつか代表的なものを紹介させて頂きます。

【Elasticsearchに関する性能情報】
image.png
image.png

【Kibanaに関する性能情報】
image.png
image.png

【Logstashに関する性能情報】
image.png
image.png

【Filebeatに関する性能情報】
image.png
image.png

  • 以下の公式サイトの内容も参考にして頂くのが良いかと思います^^

【参考】
Stack Monitoring

まとめ


さて、いかがでしたでしょうか?

本検証を実施する中で一番ハマったのは、Metricbeatがローカル内の各Elasticプロダクトに
アクセスするための設定とMetricbeatから監視用ESクラスタへデータを送信するための接続設定あたりでした。

Metricbeatからローカル内の各プロダクトにアクセスできないと
/var/log/messagesに以下のようなエラーが頻繁に出てしまいます。

[cc]
metricbeat: 2020-12-09T08:21:54.796Z#011INFO#011module/wrapper.go:259#011Error fetching data for metricset beat.state: error making http request: Get "http:
//localhost:5066/state": dial tcp

Author

ログ分析基盤のアーキテクチャデザインやクラウドにおけるセキュリティ実装方式を研究するElasticエバンジェリスト。
国内エンジニアの貴重なリソースを効率良く活用できるよう、技術ナレッジを惜しみなく発信するよう心がけている。

日比野恒の記事一覧

新規CTA