なからなLife

geekに憧れと敬意を抱きながら、SE、ITコンサル、商品企画、事業企画、管理会計、総務・情シス、再び受託でDB屋さんと流浪する人のブログです。

Metricbeatを使ってみる - Kibanaを立ててみた

Metricbeatとは

システムの統計情報(Metric)を収集するbeatです。


いわゆるOSで取得できるCPUやメモリなどの情報、および、モジュールを通してApacheMySQLその他の統計情報も、ちょっとした設定をするだけで収集できる様になっています。


今回は、SystemとMySQLの情報をMetricbeatsで取得し、Kibanaのダッシュボードに表示する所を目指します。

MetricBeatのセットアップ

ダウンロードとインストー

https://www.elastic.co/guide/en/beats/metricbeat/5.5/metricbeat-installation.html
に行くと、「yum使えるなら最新版がもっと簡単に使えるぜ(キリッ」って誘導されるので、そっちのURL参照で。
https://www.elastic.co/guide/en/beats/metricbeat/5.5/setup-repositories.html#_yum


内容を見ると、Elasticsearch本体と同じリポジトリのようなので、今回はElasticsearchとBeatsが同じ場所にある構成のときには特にすることはなく、いきなりyumでインストールできます。実運用の場合には、当然離れたところにbeatsをインストールすることになるかと思いますので、その際にリポジトリを登録することにしましょう。

sudo yum -y install metricbeat
設定ファイル

https://www.elastic.co/guide/en/beats/metricbeat/5.5/metricbeat-configuration.html
Dockerじゃないので、こちら。

/etc/metricbeat/metricbeat.yml


デフォルトだと、

-moudle:system

という定義で、

  • cpu
  • load
  • filesystem
  • fsstat(FileSystemのサマリ)
  • memory
  • network
  • process

あたりは取ってくれるようになっています。


ApacheとかMySQLとかいったmodule定義はまた後ほどということで、まずはデフォルトで稼働確認するところを目指します。


取り急ぎ動かす上では出力先を指定することくらい。


今回はLogstashで加工することもなく、Elasticsearchに直接送り込みます。また、BeatsのインストールマシンとElasticsearchのインストールマシンも同じです。


リモートのElasticsearchに送り込むときは、

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

の部分を該当サーバーに向けてあげるだけですね。


これはAWS Elasticsearch Serviceに送り込む時もEndpointを

 hosts: ["https://XXXXXXXXXX.ap-northeast-1.es.amazonaws.com:443"]

のように指定してあげれば良いようです。

テンプレート

https://www.elastic.co/guide/en/beats/metricbeat/5.5/metricbeat-template.html
に書いてあるとおりなんですけど、どうやら、デフォルトでテンプレート「packetbeat.template.json」をロードしてくれる模様。

もちろんカスタム可能ですが、一旦、ここには手をつけずに、ロードしてみます。

curl -H 'Content-Type: application/json' -XPUT 'http://localhost:9200/_template/metricbeat' -d@/etc/metricbeat/metricbeat.template.json

このURLで、「/etc/metricbeat/metricbeat.template.json」の内容に基づくテンプレート「packetbeat」を登録する、という意味になるようですね。
消すときは

curl -XDELETE 'http://localhost:9200/metricbeat-*'

で削除できます。

beatsの起動、テスト

https://www.elastic.co/guide/en/beats/metricbeat/5.5/metricbeat-starting.html

sudo /etc/init.d/metricbeat start


MetricBeatは開始したらすでにシステムの情報を取り始めているので、結果を見るだけです。

curl -XGET 'http://localhost:9200/metricbeat-*/_search?pretty'

このコマンドで、登録がうまくいっているかが分かります。

Kibanaダッシュボード設定

あらかじめ、Kibanaのダッシュボードテンプレートも用意されているので、それを適用してみます。
https://www.elastic.co/guide/en/beats/metricbeat/5.5/metricbeat-sample-dashboards.html


yum/rpmインストールの場合のインストール先へ移動しつつ、インポートスクリプトを実行します。

cd /usr/share/metricbeat/
./scripts/import_dashboards


BeatsとElasticsearch/Kibanaが別々の場所にある場合は

./scripts/import_dashboards -es http://Elasticsearchのホスト:9200 -user user -pass password

のように、-esの後ろに宛先URL(elasticsearchのポート指定)をし、認証が必要な場合はそれぞれ引数付与してあげます。

scriptsの下にありますが、このimport_dashbordsはバイナリファイルみたいですね。なので、コレ自体のカスタマイズはできません。



Kibanaで確認

ブラウザで

http://localhost:5601

にアクセスすると、DiscoverにMetricbeatで収集した情報にもとづくグラフが表示されます。


MySQLの情報を取得する

デフォルトでは、Systemモジュールだけが有効、それ以外は、無効になっていますので、この設定を変更します。

個人的にはMySQLの状態監視に使いたい、しかもRDSということで、Elasticsearchからみても、Beatsから見てもリモートな監視対象となります。


そんな時の指定方法は、
https://www.elastic.co/guide/en/beats/metricbeat/5.5/metricbeat-module-mysql.html
を参照しながら、

/etc/metricbeat/metricbeat.yml

metricbeat.modules:

の配下、「- module:system」と同じレベルのところに、「- module: mysql」の定義を追加することで対応できました。

- module: mysql
  metricsets: ["status"]
  hosts: ["tcp(RDSのエンドポイント:3306)/"]
  username: ユーザー
  password: パスワード

もちろん、使用するユーザーは、それなりにステータス情報が取れる権限を持っているものを使うことになります。

設定を入れたら、metricbeatを再起動させます。

sudo /etc/init.d/metricbeat start

これで、欲しかった情報がDashboardの 「Metricbeat MySQL」に表示されるようになります。


はっきり言ってしまうと、このダッシュボードで確認できる情報は、MySQL WorkbenchのDashboardと大差なかったです。
このテンプレでこの情報を表示するに至るまでの仕組みを理解し、より欲しい情報を思った通りに出力できるようになりたいものです。


MySQL以外のmoduleについても、
https://www.elastic.co/guide/en/beats/metricbeat/5.5/metricbeat-modules.html
に、使用方法が解説されています。