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使い慣れている人なら、あんまり必要ないかもしれませんが。
ユースケース的には、冒頭でお話したアクロクエストさんの資料にあるようなものが有力なのではないでしょうか。
![サーバ/インフラエンジニア養成読本 ログ収集〜可視化編 [現場主導のデータ分析環境を構築!] Software Design plus サーバ/インフラエンジニア養成読本 ログ収集〜可視化編 [現場主導のデータ分析環境を構築!] Software Design plus](http://images-fe.ssl-images-amazon.com/images/I/61rZ7L4Zt1L._SL160_.jpg)
サーバ/インフラエンジニア養成読本 ログ収集〜可視化編 [現場主導のデータ分析環境を構築!] Software Design plus
- 出版社/メーカー:技術評論社
- 発売日: 2014/08/14
- メディア:Kindle版
- この商品を含むブログを見る