私は雰囲気でkibanaをやっていたので反省して使い方をちゃんとまとめることにする

この記事はエイチーム引越し侍 / エイチームコネクトの社員による、[Ateam Hikkoshi samurai Inc.× Ateam Connect Inc. Advent Calendar 2020](https://qiita.com/advent-calendar/2020/hikkoshizamurai-connect) 15日目の記事です。
# はじめに
引越し侍ではサーバのログをAWS Elasticserchに突っ込んでkibanaで解析しています。
朝会でダッシュボードをみて気になることがあればkibanaでログを見る、ということをしているのですが、
ぶっちゃけ今日の今日まで私は雰囲気でkibanaをやっていました。反省しています。
なので反省を生かしてきちんと使い方を調べつつまとめていこうと思います。

# kibanaの使い方
今回使用しているkibanaはv7.8.0です。

## Discover
データをいろんな条件で検索してグラフ化される画面です。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93882/3c4ec768-4935-f18d-c669-b60a2f2af1ac.png)

1. インデックスパターンを選択し見たいデータを選びます。
2. 時間フィルター  
初期値は直近15分のデータが表示されており、画像では12/1 0:00~12/2 0:00を選択しています。このように絶対値や現在からの相対値を設定できます。
3. データを検索  
KQL（Kibana Query Language）という言語を使用して検索することができます。  
4. フィールドの追加と削除  
フィールド名の横にある「Add」をクリックすることでテーブルに表示するフィールドを選ぶことができます。  
![スクリーンショット 2020-12-15 0.54.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93882/f3683cf7-927b-77a0-451d-08ae2aca9137.png)
5. 検索結果をフィルタリング  
フィールド名をクリックすると上位5つまでの値が表示されます。ここで(+:mag:)アイコンをクリックするとその値のみに検索結果を絞ることができます。※その他の方法は後述

### Kibana Query Language

### 完全一致
- `{フィールド}:{値}`
- andやorも使える
- 例
    - `response:200`
    - `message:"Quick brown fox"`
    - `response:200 and (extension:php or extension:css)`
    - `response:(200 or 404)`

### 否定
- `not {構文}`
- 例
    - `not response:200`
    - `response:200 and not (extension:php or extension:css)`

#### 演算子
- `>, >=, <, <=, *`
- 例
    - `bytes > 1000`
    - `machine.os:win*`
        - ワイルドカードでwinで始まる文字列すべてと一致

#### ネストされたフィールド
```
{
  "grocery_name": "Elastic Eats",
  "items": [
    {
      "name": "banana",
      "stock": "12",
      "category": "fruit"
    },
    {
      "name": "peach",
      "stock": "10",
      "category": "fruit"
    },
    {
      "name": "carrot",
      "stock": "9",
      "category": "vegetable"
    },
    {
      "name": "broccoli",
      "stock": "5",
      "category": "vegetable"
    }
  ]
}
```
上のようなネストされたフィールドは下記のように検索できます。

- `items:{ name:banana and stock > 10 }` 1つめが一致
- `items:{ name:banana and stock:9 }` 一致なし
- `items:{ name:banana } and items:{ stock:9 }` 1つめと3つめが一致

#### 注意
以前のversionで使えた`response:[400 TO 499]`のような範囲指定はこのバージョンでは使えないので注意

### filter
フィルターを使う簡単な方法は5にあげたものがありますが、それ以外の方法を紹介します。
1. ③の検索欄の下、「Add filter」をクリック
2. fieldを選択
3. Operatorの選択  

| Operator | |
|---|---|
|is|フィールドの値が指定された値と一致|
|is not|フィールドの値が指定された値と一致しない|
|is one of|フィールドの値が指定された値の1つと一致|
|is not one of|フィールドの値が指定された値のいずれとも一致しない|
|is between|フィールドの値が指定された範囲内に存在|
|is not between|フィールドの値が指定された範囲内に存在しない|
|exists|フィールドには任意の値が存在|
|does not exist|フィールドに値が存在しない|
4.フィルタの値を選択
5.「Save」してフィルタを検索に適用

#### filterのアクション
- Pin across all apps → インデックスを変更したり、Visualizeに切り替えてもそのまま残る
- Exclude results → フィルターが逆の意味になる
- Temporarily disable → 一時的に無効になる。フィルタは削除されず、もう一度クリックすると有効化できる。
- Delete

#### Edit as Query DSL
フィルタの編集画面にでてくるこれを利用すると、クエリを直接変更できます。これにより複数のフィールドを使用してより複雑なフィルターを作成できます。
[Query DSL](https://www.elastic.co/guide/en/elasticsearch/reference/7.8/query-dsl.html)

下の例では中国かカナダからのアクセスで発生している404エラーを表示するフィルターを作成しています。

```
{
  "bool": {
    "should": [
      {
        "term": {
          "geoip.country_name.raw": "Canada"
        }
      },
      {
        "term": {
          "geoip.country_name.raw": "China"
        }
      }
    ],
    "must": [
      {
        "term": {
          "response": "404"
        }
      }
    ]
  }
}
```

## Visualize
Visualizeではデータをグラフ等の様々な形で視覚化することができます。

![スクリーンショット 2020-12-15 5.30.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93882/60a4679c-82f2-cd48-b3d6-46c600fba41b.png)

今回は画像のような棒グラフを例にあげます。

1. 作成画面から作成するタイプを選択（今回は「Vertical Bar」）
2. インデックスの選択
3. BucketsにX-axis(X軸)のDate histogramを追加
4. BucketsにSplit seriesを選択。フィールドを選ぶと値によって図のように色分けされるデータが完成(色の変更が可能)
5. 名前を付けて保存

グラフの種類によって設定できるメトリクスやバケットの構成が異なります。
また、Discoverで使った検索やfilterと同じものがこちらでも使えます。

## Dashbord
VisualizeやDiscoverで作成したグラフや検索結果などをまとめて見ることができます。

![スクリーンショット 2020-12-15 5.50.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93882/92d04af6-0b14-069a-11ad-19ba661bb420.png)

- Addで作成済みのVisualizeやDiscoverを選択
- Createで新しいグラフ等も作成可能
- 検索やフィルターの使用も可能

## まとめ
まとめてみたらほぼ公式のドキュメントを日本語化しただけみたいになってしまいました。
英語を読むのに時間がかかる自分の忘備録としては使えるかなと思いますが、
もっと詳しい使い方は公式の方を参考にしてみてください。

公式のドキュメント https://www.elastic.co/guide/en/kibana/7.8/index.html

# 明日
[Ateam Hikkoshi samurai Inc.× Ateam Connect Inc. Advent Calendar 2020](https://qiita.com/advent-calendar/2020/hikkoshizamurai-connect) 15日目の記事は、いかがでしたでしょうか。
明日はハリボー大好き @wakky_404 です。お楽しみに！