ログ収集分析基盤 Rsyslog + Elasticsearch + Kibana その3 (設定小ネタ)

はじめに

かくかくしかじかでログ収集基盤を作っている.

heavymoon.hateblo.jp

heavymoon.hateblo.jp

今回は細かい設定について適当にメモしておく.

Rsyslog の設定

インデックスを分ける

インデックスは,データをまとめておく入れ物のようなもの. 用途や期間でインデックスを小分けにするといい.

omelasticsearch: Elasticsearch Output Module - searchIndex

データが無限に生成されようが,ストレージは有限. いずれデータを捨てるときのために,小分けでかつ簡単に管理出来る単位に分けておく. またインデックスのライフサイクルポリシーという仕組みで勝手に削除するようにもできる.

ドキュメントのタイプを指定する

インデックスは複数のタイプを内包出来る.

Elasticsearch index,typeについて - Qiita

マッピングのテンプレートを作成するとデフォルトで _doc タイプになる.

{
  "_doc": {                       # これ
    "properties": {
      "field_name": {
        "type": "keyword",
        "ignore_above": 256
      },
...

けれど Rsyslog ではデフォルトで events となる.

omelasticsearch: Elasticsearch Output Module - searchType

タイプの異なるテンプレートにはデータを格納出来ないようなので,Rsyslog と Elasticsearch のどちらかに設定を合わせる必要がある.

ログの時刻は UTC を指定する

Elasticsearch に投げ込むデータのタイムスタンプは UTC で統一したほうがいい.

タイムゾーンは扱えるようなので rfc3339 とかでデータを投げるといい.

property(name="timereported" dateFormat="rfc3339")

この辺りのサンプルを参考にするといい.

omelasticsearch: Elasticsearch Output Module - How Retries Are Handled

ちなみに rfc3339 は

2020-04-01T12:34:56+09:00

rfc3164 は

Apr  1 12:34:56

こんなフォーマット.

Elasticsearch の設定

マッピングテンプレートを作る

Elasticsearch は適当にデータを投げつけるだけでデータが入る. これは Elasticsearch が勝手に型をあてがってくれているだけで,型の概念は存在する. 事前に型を定義しておくことで,Kibana で適切に分析するのに役立つ. またマッピングテンプレート自体は変更可能だが,インデクスに適用されているマッピングは後から変更出来ない仕様らしいので注意が必要.

Put index template API | Elasticsearch Reference [7.6] | Elastic

Field datatypes | Elasticsearch Reference [7.6] | Elastic

例えば Geo-point という型を定義しておけば,Kibana の Maps 機能で座標を表示出来る.

Geo-point datatype | Elasticsearch Reference [7.6] | Elastic

レプリカを設定する

Kibana の Management からインデクスを見ると Health が yellow になっている場合がある. Replicas はデフォルトで 1 になっており,レプリカを用意していないけど yellow が気になる場合はレプリカの設定を 0 に変更するといい.

{
    "number_of_shards": "1",
    "number_of_replicas": "0"
  }
}

Kibana の設定

Kiabana は...まぁ...思いついたら書く...と思う

おわりに

今回はちょっとした設定について書いた.

あれ.今更だけどこれは Big な Data なのか?まぁいいか.

次回は Kibana でできることか,Elasticsearch の REST API について書こうかと思う.たぶん