Elasticsearch + Logstash + Kibana + SudachiプラグインでTwitterを可視化したときのtemplate



# 使用した環境

- [Oracle Cloud Infrastructure環境にElasticsearchとSudachiプラグインをインストール](https://qiita.com/mikika/items/f61ba65fe4cf70c2d6f0) 
- [Elasticsearch+Logstash+Kibanaで作るTwitter分析ダッシュボード 作成手順まとめ](https://qiita.com/koyamauchi/items/edd97374b82dce11a169)
    - 手順2:Logstashの設定ファイルを作成->起動する


上の1つ目の手順でセットアップした環境に、2つ目の「手順2:Logstashの設定ファイルを作成->起動する」部分の手順で、Logstashの設定と起動を実施。



# Elasticsearchのテンプレート

Tweet情報から、以下のFieldに対し指定したtypeで扱うよう指定。

- field名：coordinates を geo_point に
- field名：created_at を date に (日付フォーマット指定も)

参考：[Index twitter data with coordinates geo_point parse exception](https://discuss.elastic.co/t/index-twitter-data-with-coordinates-geo-point-parse-exception/109259)

環境セットアップ時の情報に記載の、dynamic templateでsudachi_analyzerが利用できるようにする設定も合わせて行う。


## テンプレートの設定ファイル

```mytweet.json
{
  "template": "mytweet*",
  "settings":{
    "index": {
      "analysis": {
        "tokenizer": {
          "sudachi_tokenizer": {
            "type": "sudachi_tokenizer",
            "mode": "search",
            "discard_punctuation": true
          }
        },
        "analyzer": {
          "sudachi_analyzer": {
            "filter": [
            ],
            "tokenizer": "sudachi_tokenizer",
            "type": "custom"
          }
        }
      }
    }
  },
  "mappings": {
    "_default_": {
      "dynamic_templates":[
        {
          "texts": {
            "match_mapping_type": "string",
            "match": "text",
            "mapping": {
              "type": "text",
              "analyzer": "sudachi_analyzer",
              "fielddata": true
            }
          }
        }
      ],
       "properties": {
        "coordinates":{
          "properties": {
            "coordinates": {
              "type": "geo_point"
            },
            "type":{
              "type": "text",
              "fields": {
                "keyword":{
                  "type":"keyword",
                  "ignore_above": 256
                }
              }
            }
          }
        },
        "created_at": {
          "type": "date",
          "format": "EEE MMM dd HH:mm:ss Z YYYY"
        }
      }
    }
  }
}
```

## Indexにテンプレートを適用する

上のmytweet.jsonを使って以下を実行。

```
$ curl -X PUT -H "Content-Type: application/json" http://localhost:9200/_template/mytweet -d "@mytweet.json"
```


# 追記（備忘録）

冒頭の Elasticsearch+Logstash+Kibanaで作るTwitter分析ダッシュボード 作成手順まとめ
「手順2:Logstashの設定ファイルを作成->起動する」部分の手順で、Logstashの設定と起動を実施。

のところの作業ログ。

##Logstashの設定ファイルを準備

/usr/share/logstash/kibana_twitter.conf を準備

```kibana_twitter.conf
input {
  twitter {
    # TwittrAPIの認証情報を入力
    consumer_key => "xxx"
    consumer_secret => "yyy"
    oauth_token => "zzz"
    oauth_token_secret => "aaa"
    # つぶやきの検索対象に含めるキーワードを配列で指定する
    keywords => ["#紅葉"]
    full_tweet => true
  }
}
output {
  elasticsearch {
    # ElasticSearchのホストパス
    hosts => ["http://public_ip_address:9200/"]
    # インデックス名
    index => "koyotweet"
  }
}
```

##起動とログ監視

```
# /usr/share/logstash/bin/logstash --path.settings=/etc/logstash --path.data /tmp -f /usr/share/logstash/kibana_twitter.conf 
$ tail -f /var/log/logstash/logstash-plain.log 
```

停止は kill -9