【再入門】Elastic Stackの監視方法について #Elastic #Elasticsearch
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
今年、Elastic Stackは7.10までリリースされました。
そして来年は、新メジャーバージョンの8のリリースが予想されます。
Elasticプロダクトは、最新2世代のメジャーバージョンのみメンテナンスが行われます。
バージョン8がリリースされる前には、6を7にアップグレードする必要がありますね。
本投稿のテーマであるElastic Stackの監視方法について
バージョン6.3以前の監視方法がバージョン8以降では、非推奨となり廃止が見えています。
バージョンアップを見据え、現在推奨されている監視方法をご紹介したいと思います^^/
これまでのスタック監視方法について
- Elastic Stackの監視機能はオープンソースでは提供してなく、サブスクリプション(旧X-Pack)機能になります。
- バージョン6.3以前は、各Elasticプロダクトの設定ファイル(.yml)でmonitoring設定を行っていました。
- 本番用ESクラスタを中継させて、監視用ESクラスタに性能データを流すアーキテクチャになります。
【監視用ESクラスタとは】
・監視用ESクラスタは、Elastic Stackを監視するための専用クラスタのことになります。
・監視用ESクラスタを利用せず本番用ESクラスタでも可視化はできますが、性能面で本番利用は非推奨になっています。
・監視用ESクラスタは、本番用ESクラスタと同じバージョンもしくは1つ上のメジャーバージョンまでとなっています。
【参考】
・従来のElasticsearchの監視方法
・従来のKibanaの監視方法
・従来のLogstashの監視方法
・従来のFilebeatの監視方法
新しい監視アーキテクチャ
- バージョン6.4以降、Metricbeatを使って監視用ESクラスタに性能データを送信する方式が推奨方式になりました。
- 既存の方式は本番用ESクラスタに負荷が掛かっていましたが、Metricbeatを利用することでその負荷を軽減しています。
- その代わりに各プロダクトとセットでOS上にMetricbeatを導入する作業と管理の負荷が増えることになりました。
【参考】
・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ネットワークを利用しています。
【補足】
・本投稿では、各VMマシンの作成および各OSへのElasticプロダクトのインストール手順は省略しています。
【参考】
・Elasticsearchのインストール方法
・Kibanaのインストール方法
・Logstashのインストール方法
・Filebeatのインストール方法
実施手順
- 以下の手順で設定を実施しました。
- Metricbeatのインストール (監視対象VMで実施)
- Elasticsearchの監視設定 (elasticsearch-vm)
- Kibanaの監視設定 (kibana-vm)
- Logstashの監視設定 (logstash-vm)
- Filebeatの監視設定 (filebeat-vm)
- 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*を実行します。
- 各プロダクトの性能用データを格納するためのスキーマ定義がすでに存在していることが確認できます。
- 次にGET _cat/indeces/.monitoring-*?v&sを実行します。
- 手順1〜5までがうまく行っていると以下のように各プロダクトごとに性能データを取り込まれ、Indexが作成されます。
- 左上のメニューから [Management] > [Stack Monitoring]を開きます。
- クラスタ一覧の中から[elasticsearch]をクリックします。 (デフォルトのクラスタ名)
- Elasticsearch、Kibana、Logstashに関する性能ダッシュボードになります。
- Filebeatだけ直接Elasticssearchへのパスがないためか、Standalone Clusterという扱いになっていました。
- こちらでは全部の画面を紹介することは難しいので、いくつか代表的なものを紹介させて頂きます。
【Elasticsearchに関する性能情報】
【Kibanaに関する性能情報】
【Logstashに関する性能情報】
【Filebeatに関する性能情報】
- 以下の公式サイトの内容も参考にして頂くのが良いかと思います^^
【参考】
・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