我正在尝试使用ELK管道来阅读电子邮件(IMAP),提取通用附件(主要是PDF,最终是doc或ppt)并将它们放在ElasticSearch上。
这是我能够做到的:
Ingest Attachment Processor
来读取base64内容。第一个解决方案工作正常并且正在寻找我正在寻找的东西,除了它不直接从电子邮件中提取附件并且我在文件中有硬编码的base64数据。
在第二个解决方案中,我在Kibana上有一个字段x-ms-has-attach: yes
,但附件本身并没有。 imap
插件仅用于加载没有附件的电子邮件内容?
我错过了什么?您能否建议我实现我想要的产品?
这是第一个示例:
的logstash配置input {
file {
path => "/my/path/to/data/*"
start_position => "beginning"
# sincedb_path => "/my/path/to/sincedb"
sincedb_path => "/dev/null"
close_older => 0
tags => ["attachment"]
}
}
output {
elasticsearch {
index => "email-attachment"
hosts => [ "localhost:9200" ]
}
}
这是管道:
PUT _ingest/pipeline/email-attachment
{
"description": "Pipeline to parse an email and its attachments",
"processors": [
{
"attachment" : {
"field" : "message"
}
},
{
"remove" : {
"field" : "message"
}
},
{
"date_index_name" : {
"field" : "@timestamp",
"index_name_prefix" : "email-attachment-",
"index_name_format": "yyyy-MM",
"date_rounding" : "M"
}
}
]
}
这是第二个示例的logstash配置:
input {
imap {
host => "my.domain.it"
password => "mypassword"
user => "myuser"
port => 12345
type => "imap"
secure => true
strip_attachment => true
}
}
output {
elasticsearch {
index => "email-attachment"
hosts => [ "localhost:9200" ]
}
}
更新
我正在使用版本5.2.2
答案 0 :(得分:0)
你的问题可能来自imap输入插件中的strip_attachment => true
。
答案 1 :(得分:0)
最后我定义了一个完全不同的管道。
我使用带有mail
库的Ruby应用程序阅读电子邮件(您可以在github
上找到它),在那里提取附件非常容易。
然后,我使用base64
将这些附件的ElasticSearch
编码直接放在Ingest Attachment Processor
上。
我过滤content_type
只是为了确保只加载“真实”附件,因为多部分电子邮件会将正文中的任何多媒体内容(即:图片)视为附件。
<强> P.S。强>
使用mail library,您应该执行以下操作:
Mail.defaults do
retriever_method :imap, { :address => address,
:port => port,
:user_name => user_name,
:password => password,
:enable_ssl => enable_ssl,
:openssl_verify_mode => openssl_verify_mode }
和new_messages = Mail.find(keys: ['NOT','SEEN'])
可以检索看不见的消息。
然后遍历new_messages。之后,您只需使用encoded = Base64.strict_encode64(attachment.body.to_s)
对邮件进行编码即可。请检查new_messages
以检查要使用的确切字段名称。