Kibanaのキホンのキ@Elastic stack Advent Calendar 2017 3日目

はじめに

意外と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と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.155 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名を入力します。 f:id:st1t:20171201222013p:plain

Indexが読み込まれると認識されているField名と、データの型が一覧表示されます。 f:id:st1t:20171201222026p:plain

Discoverについて

Indexのデータを表示する画面

Discover画面の概要

f:id:st1t:20171201222055p:plain

Discover画面でデータ詳細を見る

f:id:st1t:20171201225906p:plain

表示させたいFieldを指定する

f:id:st1t:20171201230259p:plain

表示させたいデータをクエリで絞り込む

試しにsystem.process.cmdlineにjavaを含んでいて、system.process.fd.openが10より大きいデータを表示させてみます。
テキストボックスに 「system.process.cmdline: java AND system.process.fd.open: (>10)」と入力してみましょう。 f:id:st1t:20171201231339p:plain

せっかくなので、この検索条件を「search-process-java」として保存してみましょう。
後でDashbordに表示させてみます。 f:id:st1t:20171201232558p:plain

Add a filterを試してみる

上記項目では手動でクエリを書きましたが、
Field名が多かったりすると正確な名前が思い出せないことが多々あります。
また、まずはボタンをぽちぽちして手軽に絞り込みを試したいときもあるかもしれません。
そんなときは「Add a filter」を試してみると良いかもしれません。
複雑な条件はできませんが、単純な値比較等はできます。 f:id:st1t:20171202120603p:plain 上記画像の「is」の部分はFilterが数値型なのか、文字列なのかで項目が変わります。
色々試してみてください:)

Visualizeについて

Discoverで確認したデータをグラフ化するためのものです。
Kibanaを使う上で肝となるVisualizeについですが、
全てのVisualizeを説明するのはページ数が膨大になりますので、
まずはメモリの使用率が多いプロセストップ5を時系列で可視化してみようと思います。
その代わり、なるべく他のVisualizeを使うときでも使いまわしが効くよう解説していきたいと思います。

今回使うVisualize

Create a Visualizationを押して、
今回はAreaチャートでmetricbeat-*のIndex patternを可視化していきます。 f:id:st1t:20171202131734p:plain f:id:st1t:20171202131746p:plain f:id:st1t:20171202131755p:plain

Areaチャートの設定

まず、殆どのVisualizeで共通するMetricsとBucketsという2種類の設定があります。
少し乱暴かとは思いますが、ざっくりと最初のイメージとしては
Metrics=グラフの縦軸
Buckets=グラフの横軸
と思ってもらえれば良いかなと思います。

このイメージを持ってもらった上で今回可視化したいグラフの集計を整理してみます。

可視化したい内容を整理してみる

やりたいこと:メモリの使用量を多く消費しているプロセストップ5を時系列に積み上げグラフで可視化したい

このやりたいことを実際の設定に落とし込むと以下のようなものになります。
この時Buckets内の順番には注意してください。
特にサーバ単位でグラフを分けていてBarグラフを設定した時に大きく変わります。

  1. Metrics
    1. メモリの使用量平均値を表示させる
  2. Buckets(Metricsのデータを細かく集計)
    1. 1.1のデータを時系列に集計
    2. 2.1のデータをプロセス名毎にグラフを分岐させトップ5で絞る
    3. 2.2のデータをホスト単位でデータを分岐させる

Metricsの設定

Aggregationは縦軸で表示させるデータをどのように集計するかを設定するものになります。
今回はメモリ使用量の平均値を表示させたいので、
AggregationはAverageでFiledにsystem.process.memory.rss.byteを使います。
また、Custom Labelを使うことでグラフの縦軸に好きなラベルを設定出来ます。 f:id:st1t:20171202151758p:plain

Bucketsの設定

時系列の集計@X-Axis

横軸は時系列に表示させるため、
X-AxisのAggregationはDate Histogram、Fieldには@timestampを設定します。
また、右上の表示時間帯を変更すると、
IntervalがAutoになっているためデータの表示される粒度が変わります。
より細かい粒度で見たいときはIntervalを秒単位や分単位で設定しても良いかもしれません。
ただし、あまりにも長い期間を表示する時(1ヶ月や半年、1年など)は手動で設定指定も自動でIntervalが設定されるので注意してください。 f:id:st1t:20171202152141p:plain

プロセス名毎にグラフを分岐させトップ5で絞る@Split Series

プロセス名別に表示を分けるため、SubAggregationにTermsとsystem.process.nameを設定します。
TermsはひとまずField名のイメージを持っておいてもらえれば良いかと思います。 f:id:st1t:20171202153422p:plain

ホスト単位でデータを分岐させる@Split Chart

今回は1台分のデータしかElasticsearchへ登録していないのでわかりづらいのですが、
添付画像のように設定すると緑色の枠の部分がホスト単位で複数できるようになります。 f:id:st1t:20171202154829p:plain

Metrics&Axes

Metrics

f:id:st1t:20171202155632p:plain

Y-Axes

Y-Axesは設定項目が多くてスクショできなかったので、
使いそうなところを少しだけ紹介します。 Scale to Data Bounceを設定すると、表示されるデータの下限値が動的に変更されます。
この設定をONにすることによって、桁数の多い数値のデータの変化に気が付きやすくなります。
f:id:st1t:20171202155942p:plain

Panel Settings

Legend Positionを設定するとプロセス名の部分を別の場所に表示することが出来ます。
横枠を少しでも広げたい方には設定しても良いかなと思います。
また、ちょっとわかりづらいですが、X-Axis LinesやY-Axis Linesを設定するとグラフの後ろに縦線や横線を設定することも出来ます。 f:id:st1t:20171202190322p:plain

保存しておく

作成したグラフをDiscoverのときと同じように保存しておきます。
ここではused-memory-processとしておきます。 f:id:st1t:20171202190844p:plain

Tips

グラフからElasticsearchへのクエリを確認する

私はElasticsearchのクエリの書き方を忘れることがあるのですが、そんなときはVisualizeからクエリを確認したりしています。
f:id:st1t:20171202232408p:plain f:id:st1t:20171202232452p:plain f:id:st1t:20171202232622p:plain

グラフのデータをCSVでダウンロードする

上記のクエリ確認の画面と同じように、Visualizeの左下に出てくる小さい三角を押して、ExportのRawかFormattedを使うことでCSVファイルをダウンロード出来ます。
f:id:st1t:20171202232408p:plain f:id:st1t:20171202232759p:plain

Dashbordについて

DiscoverやVisualizeで保存したものをまとめて表示させます。

Visualizeを追加する

f:id:st1t:20171202191329p:plain

Discoverで保存した検索を追加する

f:id:st1t:20171202192040p:plain

ダッシュボードの色を白から黒に変更してみる

f:id:st1t:20171202192008p:plain

次回予告

残念ながら本来書こうと思っていた詳細は全然書ききれませんでした・・・
KibanaだけでもVisualbuilder、Dev Tools、Grok Debugger、LogstashのPipilineの処理時間の可視化などなど紹介したい機能はたくさんあります。
他にもVisualizeを使ううえでログの設計や送信する際に考えておくべき箇所などなど。
今月のAdvent Calendarが最後の方まで残っていたら追加別記事にTips集的な感じで書こうと思います。
明日は@_bsooさんから書いていただけるようですので、乞うご期待!!