はじめに
意外とKibanaにフォーカスした記事をみない気がしたので、
今回はKibanaの簡単なハンズオン的なブログを書いていこうと思います。
また、Kibanaの操作にフォーカスを当てるため、それ以外の設定等についてはなるべく簡略化しています。
※書いている最中に記載量が膨大になってきたので、前後編にわけていきます・・・
全体を通して、Elastic Stackでわからないところがあれば、こちらへ質問どうぞ! :) discuss.elastic.co
今回試す構成について
1台のVirtualBox上のサーバで以下ミドルウェアをインストールして試しています。
- OS:CentOS 7.4 x86-64
- JDK: jdk1.8-1.8.0_151-fcs
- Elasticsearch: 6.0.0
- Metricbeat: 6.0.0
- Kibana: 6.0.0
構築手順
詳細手順は公式サイト見るのが一番なので、リンクの紹介だけしておきます。
Elasticsearchのインストール方法
Install Elasticsearch with RPM | Elasticsearch Reference [6.5] | ElasticMetricbeatのインストール方法
Step 1: Install Metricbeat | Metricbeat Reference [6.5] | ElasticKibanaのインストール方法
Install Kibana with RPM | Kibana User Guide [6.5] | Elastic
ElasticsearchとKibanaを構築する時のTips
設定の説明は公式サイトにもありますが、
初めて触る方がいきなり全ての英語のドキュメントの意味を把握するのはハードルが高いかと思います。
そのため、ここではよくつまづきそうなポイントだけ紹介します。
Elasticsearch、Kibanaへの接続IPの変更
KibanaやElasticsearchはデフォルトだとlocalhostからしか繋がりません。
VirtualBox等でサーバ構築した上でListen IPを修正するには以下を修正してください。
$ vim /etc/elasticsearch/elasticsearch.yml --cmd "set nu" 55 #network.host: 192.168.0.1 ↓ 55 network.host: _local_,_site_ $ vim /etc/kibana/kibana.yml --cmd "set nu" 7 #server.host: "localhost" ↓ 7 server.host: "サーバのIPアドレス" $
ElasticsearchとMetricbeatの動作確認
Elasticsearchの動作確認
$ curl localhost:9200 { "name" : "-kDPg7S", "cluster_name" : "elasticsearch", "cluster_uuid" : "8I6dEp6fQhyi2nOcYcBLpA", "version" : { "number" : "6.0.0", "build_hash" : "8f0685b", "build_date" : "2017-11-10T18:41:22.859Z", "build_snapshot" : false, "lucene_version" : "7.0.1", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
Metricbeatの動作確認
MetricbeatはElasticsearchインストール後にインストールして起動するだけでデータがすぐに入ります。
# データが入っていないことを確認 $ curl localhost:9200/_cat/indices # Metricbeatを起動してデータが入ることを確認 # Index名はKibanaを使うときに使うので覚えておいてください $ sudo systemctl start metricbeat $ curl "localhost:9200/_cat/indices?s=index:asc&v" health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open metricbeat-6.0.0-2017.12.01 1aPqivtrTfWKQSFhKEE9gg 1 1 380 0 234.9kb 234.9kb
Tips
- cat APIについて
様々なステータスを表示するための便利なAPIです。
試しに「curl localhost:9200/_cat」を叩いてみると色々出るので試してみてください:)
また、12/9に@muraken720さんが「cat APIs にまじめに入門する話」というお話をされる予定とのことですので詳細はこちらで乞うご期待!!
Kibanaの基礎設定
IndexをKibanaに認識させる
Elasticsearchへデータ投入も終わったので、Kibanaへログインしてみましょう。 ブラウザに「http://KibanaのサーバのIP:5601」と入力してアクセスしてみます。
画像のように投入したmetricbeatのIndex名を入力します。
Indexが読み込まれると認識されているField名と、データの型が一覧表示されます。
Discoverについて
Indexのデータを表示する画面
Discover画面の概要
Discover画面でデータ詳細を見る
表示させたいFieldを指定する
表示させたいデータをクエリで絞り込む
試しにsystem.process.cmdlineにjavaを含んでいて、system.process.fd.openが10より大きいデータを表示させてみます。
テキストボックスに
「system.process.cmdline: java AND system.process.fd.open: (>10)」と入力してみましょう。
せっかくなので、この検索条件を「search-process-java」として保存してみましょう。
後でDashbordに表示させてみます。
Add a filterを試してみる
上記項目では手動でクエリを書きましたが、
Field名が多かったりすると正確な名前が思い出せないことが多々あります。
また、まずはボタンをぽちぽちして手軽に絞り込みを試したいときもあるかもしれません。
そんなときは「Add a filter」を試してみると良いかもしれません。
複雑な条件はできませんが、単純な値比較等はできます。
上記画像の「is」の部分はFilterが数値型なのか、文字列なのかで項目が変わります。
色々試してみてください:)
Visualizeについて
Discoverで確認したデータをグラフ化するためのものです。
Kibanaを使う上で肝となるVisualizeについですが、
全てのVisualizeを説明するのはページ数が膨大になりますので、
まずはメモリの使用率が多いプロセストップ5を時系列で可視化してみようと思います。
その代わり、なるべく他のVisualizeを使うときでも使いまわしが効くよう解説していきたいと思います。
今回使うVisualize
Create a Visualizationを押して、
今回はAreaチャートでmetricbeat-*のIndex patternを可視化していきます。
Areaチャートの設定
まず、殆どのVisualizeで共通するMetricsとBucketsという2種類の設定があります。
少し乱暴かとは思いますが、ざっくりと最初のイメージとしては
Metrics=グラフの縦軸
Buckets=グラフの横軸
と思ってもらえれば良いかなと思います。
このイメージを持ってもらった上で今回可視化したいグラフの集計を整理してみます。
可視化したい内容を整理してみる
やりたいこと:メモリの使用量を多く消費しているプロセストップ5を時系列に積み上げグラフで可視化したい
このやりたいことを実際の設定に落とし込むと以下のようなものになります。
この時Buckets内の順番には注意してください。
特にサーバ単位でグラフを分けていてBarグラフを設定した時に大きく変わります。
- Metrics
- メモリの使用量平均値を表示させる
- Buckets(Metricsのデータを細かく集計)
- 1.1のデータを時系列に集計
- 2.1のデータをプロセス名毎にグラフを分岐させトップ5で絞る
- 2.2のデータをホスト単位でデータを分岐させる
Metricsの設定
Aggregationは縦軸で表示させるデータをどのように集計するかを設定するものになります。
今回はメモリ使用量の平均値を表示させたいので、
AggregationはAverageでFiledにsystem.process.memory.rss.byteを使います。
また、Custom Labelを使うことでグラフの縦軸に好きなラベルを設定出来ます。
Bucketsの設定
時系列の集計@X-Axis
横軸は時系列に表示させるため、
X-AxisのAggregationはDate Histogram、Fieldには@timestampを設定します。
また、右上の表示時間帯を変更すると、
IntervalがAutoになっているためデータの表示される粒度が変わります。
より細かい粒度で見たいときはIntervalを秒単位や分単位で設定しても良いかもしれません。
ただし、あまりにも長い期間を表示する時(1ヶ月や半年、1年など)は手動で設定指定も自動でIntervalが設定されるので注意してください。
プロセス名毎にグラフを分岐させトップ5で絞る@Split Series
プロセス名別に表示を分けるため、SubAggregationにTermsとsystem.process.nameを設定します。
TermsはひとまずField名のイメージを持っておいてもらえれば良いかと思います。
ホスト単位でデータを分岐させる@Split Chart
今回は1台分のデータしかElasticsearchへ登録していないのでわかりづらいのですが、
添付画像のように設定すると緑色の枠の部分がホスト単位で複数できるようになります。
Metrics&Axes
Metrics
Y-Axes
Y-Axesは設定項目が多くてスクショできなかったので、
使いそうなところを少しだけ紹介します。
Scale to Data Bounceを設定すると、表示されるデータの下限値が動的に変更されます。
この設定をONにすることによって、桁数の多い数値のデータの変化に気が付きやすくなります。
Panel Settings
Legend Positionを設定するとプロセス名の部分を別の場所に表示することが出来ます。
横枠を少しでも広げたい方には設定しても良いかなと思います。
また、ちょっとわかりづらいですが、X-Axis LinesやY-Axis Linesを設定するとグラフの後ろに縦線や横線を設定することも出来ます。
保存しておく
作成したグラフをDiscoverのときと同じように保存しておきます。
ここではused-memory-processとしておきます。
Tips
グラフからElasticsearchへのクエリを確認する
私はElasticsearchのクエリの書き方を忘れることがあるのですが、そんなときはVisualizeからクエリを確認したりしています。
グラフのデータをCSVでダウンロードする
上記のクエリ確認の画面と同じように、Visualizeの左下に出てくる小さい三角を押して、ExportのRawかFormattedを使うことでCSVファイルをダウンロード出来ます。
Dashbordについて
DiscoverやVisualizeで保存したものをまとめて表示させます。
Visualizeを追加する
Discoverで保存した検索を追加する
ダッシュボードの色を白から黒に変更してみる
次回予告
残念ながら本来書こうと思っていた詳細は全然書ききれませんでした・・・
KibanaだけでもVisualbuilder、Dev Tools、Grok Debugger、LogstashのPipilineの処理時間の可視化などなど紹介したい機能はたくさんあります。
他にもVisualizeを使ううえでログの設計や送信する際に考えておくべき箇所などなど。
今月のAdvent Calendarが最後の方まで残っていたら追加別記事にTips集的な感じで書こうと思います。
明日は@_bsooさんから書いていただけるようですので、乞うご期待!!