なからなLife

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

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

Packetbeatとは

beatをインストールしたマシンのネットワーク・インターフェースを監視し、その内容を収集するbeatです。
ネットワークパケットの内容は、プロトコル毎に整理されます。


今回も、システム一般とMySQLの情報を取得することを目的としていますが、デフォルト設定でMySQL含む多くの情報を取得可能になっています。


ちょうど先日、elasticsearch勉強会で、elasticsearchの代理店でもあるアクロクエストさんがpacketbeatについてプレゼンを行い、構造とかチューニングポイントなどを解説してくれています。日本語でpakectbeatについてまとまった解説資料は世の中にとても少ないので、かなり貴重です。
https://www.slideshare.net/snuffkin/packetbeatio-t


PacketBeatのセットアップ

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

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

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

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

https://www.elastic.co/guide/en/beats/packetbeat/5.5/configuring-packetbeat.html


Dockerじゃないので、こちら。

/etc/packetbeat/packetbeat.yml


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


今回は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/packetbeat/5.5/packetbeat-template.html

に書いてあるとおりなんですけど、どうやら、デフォルトでテンプレート「packetbeat.template.json」をロードしてくれる模様。

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

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

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

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

で削除できます。

beatsの起動、テスト。

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

sudo /etc/init.d/packetbeat start

実際に、ネットワークトラフィックを発生させて、ネットワークパケットを拾わせてみましょう。

curl http://www.elastic.co/ > /dev/null

その後、

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

で、データが登録されたことが確認できます。


Kibanaダッシュボード設定

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


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

cd /usr/share/packetbeat/
./scripts/import_dashboards


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

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

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


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


AWS Elasticsearch ServiceにDashboardをインポートしたい場合、gitに公開されているものを使い、さらに出来上がったダッシュボードにカスタマイズしていくそうです。
https://github.com/elastic/beats-dashboards
こちらについては、現時点で内容は確認していませんが、ちょっと内容が古く、対応しているモジュールも少なそうです。。


Kibanaで確認

ブラウザで

http://localhost:5601

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


MySQLが動いているサーバーに仕込んであげれば、「Mysql response times percentiles」「Most frequent MySQL queries」といった情報もとれます。
perfomance_schema使い慣れている人なら、あんまり必要ないかもしれませんが。


ユースケース的には、冒頭でお話したアクロクエストさんの資料にあるようなものが有力なのではないでしょうか。