トップページに戻る
ひとつ前に戻る

ここにある piwik-template.json の説明です

  • 上から順に説明します。

"template": "apache-log-*"

  • /etc/td-agent/td-agent.conf 中 match piwiktracker.apache.access.store の logstash_prefix apache-log と合わせます。 -* がついているのは、logstash_dateformat %Y%m%d により、たとえば elasticsearch 上に apache-log-20160817 のように日別の index が作成されます。

"settings":

  "settings": {
    "analysis": {
      "filter": {
        "pos_filter":
          {
            "type": "kuromoji_part_of_speech",
            "stoptags": ["助詞-格助詞-一般", "助詞-終助詞"]},
            "greek_lowercase_filter": {"type": "lowercase", "language": "greek"}},
      "analyzer": {
        "kuromoji_analyzer": {
          "type": "custom",
          "tokenizer": "kuromoji_tokenizer",
          "filter": ["kuromoji_baseform", "pos_filter", "greek_lowercase_filter", "cjk_width"]
        }
      }
    }
  },

"mappings":

  "mappings": {
    "access_log": {
      "_source": {
        "enabled": "false"
      },
      "_all": {
        "enabled": "false"
      },
  • リレーショナルデータベースのテーブル名に相当する mappings と、テーブル内の各カラムに相当するフィールド型を定義します。
  • アンダースコア _ で始まるフィールドは各 mapping に必ず含まれるフィールドです。説明はここから The Root Object 。 _source、 _all 以外にもいろいろあります。

"mappings": { "access_log":

/etc/td-agent/td-agent.conf 中 match piwiktracker.apache.access.store の type_name access_log と記述を合わせます。リレーショナルデータベースのテーブル名に相当するでしょう。

"_source":

td-agent からは JSON 形式で elasticsearch にデータが渡されますが、オリジナルのデータがかきこまれるフィールドです。データ肥大を抑えるため、オリジナルのデータは蓄えないようにします。しかし副作用もあります。 Disabling the _source field

"_all":

全部のフィールドの値がスペース区切りでぶち込まれます。データ肥大を抑えるため、機能を切ります。 _all field

"properties": "@log_name", "@timestamp"

      "properties": {
        "@log_name": {
          "type": "string",
          "store": "true",
          "index": "not_analyzed"
        },
        "@timestamp": {
          "type": "date",
          "store": "true",
          "format": "strict_date_optional_time||epoch_millis"
        },
  • アンダースコア _ で始まるフィールドの定義が終わったら、各 mapping 固有の定義に移ります。

"@log_name":

/etc/td-agent/td-agent.conf 中 match piwiktracker.apache.access.store の tag_key の受け皿です。

"@timestamp":

/etc/td-agent/td-agent.conf 中 match piwiktracker.apache.access.store の logstash_format true とすると、@timestamp が付加され、そのための受け皿です。

"properties": "@log_name", "@timestamp" 以外

  • @timestamp 以下でPiwik トラッカー独自のフィールドを定義していきます。
  • 要所要所のみ。
  • 各フィールがなにを意味するかは Piwik トラッカーが追加で記録します を参照してください。

"idn":

        "idn": {
          "type": "boolean",
          "store": "true"
        },
  • "store": "true" で数値を保存します(つまり検索 index だけつくるというのも elasticsearch では可能)。

"piwikid":

        "piwikid": {
          "type": "string",
          "store": "true",
          "index": "not_analyzed"
        },
  • "index": "not_analyzed" このフィールドは string ですが、欧文構文解析 index は作らなくて結構ですという意味。 SQL でいう like 検索は可能です。

"ref":

        "ref": {
          "type": "multi_field",
          "fields": {
            "ref": {
              "type": "string",
              "index": "analyzed",
              "store": "true"
            },
            "full": {
              "type": "string",
              "index": "not_analyzed",
              "store": "true"
            }
          }
        },
  • "type": "multi_field" で欧文構文解析 index ("index": "analyzed")と、like 検索 index ("index": "not_analyzed")両方作ります。 Multi Fieldを使う のマネ。

"action_name":

        "action_name": {
          "type": "string",
          "analyzer": "kuromoji_analyzer",
          "store": "true"
        }
  • "analyzer": "kuromoji_analyzer" で日本語構文解析で検索 index を作ります。

"path":

        "path": {
          "type": "string"
        },
  • "store" 未指定でータを保存しない。url と url.full で同じものがあるから。

その他のフィールドは以上の説明のどこかに含まれるので省きます。