secbeg’s log

作業メモです

logstash-elasticsearh-kibanaで受信メール本文を可視化

0.はじめに

logstash-elasticsearch-kibanaを使って、gmailで受信したメール本文の単語でタグクラウドを作ってみました。 (あまり有用なものではありません。)

  • CentOS release 7.4.1708
  • elasticsearch 5.6.4
  • kiban 5.6.4
  • logstash 5.6.4

1.環境構築

  • elasticsearch
    下記を参考にしてください。

secbeg.hatenablog.com

  • kibana
    下記を参考にしてください。

secbeg.hatenablog.com

  • logstash

elasticsearchのインストールで追記したリポジトリyumインストールします。

# yum install logstash

2.設定

  • メールの収集

logstashの設定ファイルを作成し、gmailを収集するための設定を入れます。

# vi /etc/logstash/conf.d/logstash.conf

設定内容はこんな感じです。

input {
  imap {
    host => "imap.gmail.com"
    port => 993
    user => "xxxxxx@gmail.com" #gmailアドレス
    password => "xxxxx" #gmailへのログインパスワード
    folder => "INBOX" #デフォルトはINBOX
    type => "security"
    check_interval => 30 #デフォルトは300になっている
  }
}

}
output {
  elasticsearch {
    hosts => [ "localhost:9200" ]
    index => "gmail-%{+YYYYMMdd}"
  }
}

The Japanese (kuromoji) Analysis pluginをelasticsearchにインストールします。

# /usr/share/elasticsearch/bin/elasticsearch-plugin  install analysis-kuromoji

elasticsearchを再起動します。

# systemctl restart elasticsearch

プラグインがインストールされているかを確認します。

# curl -X GET 'http://localhost:9200/_nodes/plugins?pretty'

・・・
      "plugins" : [
        {
          "name" : "analysis-kuromoji",
          "version" : "5.6.4",
          "description" : "The Japanese (kuromoji) Analysis plugin integrates Lucene kuromoji analysis module into elasticsearch.",
          "classname" : "org.elasticsearch.plugin.analysis.kuromoji.AnalysisKuromojiPlugin",
          "has_native_controller" : false
        }
      ],
・・・

 

次に、kuromojiを使うために_templeteの設定をします。 設定内容としては、「gmail-*」に当てはまるindexがelasticsearch上で作成された際に、「message」フィールドをkuromojiを適用するようにする設定をしています。 下記をkibanaのUIを使用して入力します。(curlでも大丈夫です。)

PUT _template/gmail
{
  "template": "gmail-*",  #ここは対象とするindex名を設定
  "settings": {
    "index": {
      "analysis": {
        "tokenizer": {
          "kuromoji_user_dict": {
            "type": "kuromoji_tokenizer",
            "mode": "normal"
          }
        }
      }
    }
  },
  "mappings": {
    "_default_": {
      "dynamic_templates": [
        {
          "named_analyzers": {
            "match_mapping_type": "string",
            "match": "message",
            "mapping": {
              "fielddata": true,
              "analyzer": "kuromoji",
              "fields": {
                "keyword": {
                  "type": "keyword"
                }
              }
            }
          }
        }
      ]
    }
  }
}

3.動作確認

まずはlogstashを起動し、収集を開始します。

# systemctl start logstash

(elasticsearchとkibanaは起動している前提です。)

適当なメールマガジンを受信先に転送し、収集できているか確認します。
http://[サーバのIPアドレス]:5601/
(kibanaではindex名として「gmail-*」を指定します。)

f:id:secbeg:20171125201804p:plain

5通ほどメールを転送し、タグクラウドで表示する。 (kibana側で少しフィルターかけています。)

f:id:secbeg:20171125202613p:plain

ランキングはこんな感じ。 f:id:secbeg:20171125203154p:plain

完成度は高くないですが、チューニング次第で雑音を消したり、改善は期待できると思います。

4.参考

acro-engineer.hatenablog.com

www.elastic.co

「メールけいしちょう」を Elastic Stack で可視化する | Elastic