Metricbeatを使ってみる - Kibanaを立ててみた
Metricbeatとは
システムの統計情報(Metric)を収集するbeatです。
いわゆるOSで取得できるCPUやメモリなどの情報、および、モジュールを通してApacheやMySQLその他の統計情報も、ちょっとした設定をするだけで収集できる様になっています。
今回は、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
に、使用方法が解説されています。
サーバ/インフラエンジニア養成読本 ログ収集〜可視化編 [現場主導のデータ分析環境を構築!] Software Design plus
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/14
- メディア: Kindle版
- この商品を含むブログを見る