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
下記を参考にしてください。
- kibana
下記を参考にしてください。
- 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-*」を指定します。)
5通ほどメールを転送し、タグクラウドで表示する。 (kibana側で少しフィルターかけています。)
ランキングはこんな感じ。
完成度は高くないですが、チューニング次第で雑音を消したり、改善は期待できると思います。