这里遇到一个问题,需要将Oracle中的图片数据导入到ElasticSearch中,大佬推荐方案将其中的数据通过64编码后上传到ElasticSearch中。这里做一个简单的总结。
其实在之前也考虑通过file文件上传本地路径下,然后再解析。发现上传后的文件格式不能打开。
logstash中的配置文件 LGT_ZP_SJ.config 内容:
input {
jdbc {
jdbc_driver_library => "/home/logstash/libs/ojdbc6-11.1.0.6.0.jar"
jdbc_driver_class => "Java::oracle.jdbc.OracleDriver"
jdbc_connection_string => "jdbc:oracle:thin:@192.168.99.20:1521:jcxydb"
jdbc_user => "bgxt"
jdbc_password => "bgxt#zjjcxy"
schedule => "* * * * *"
#statement_filepath => "/home/logstash/sql/LGT_ZP_SJ.sql"
statement => "select NBBH,ZP from LGT_ZP_SJ"
}
}
output {
file {
path => "/var/www/html/lgt_zp_sj/zp_%{nbbh}.jpg"
codec => line { format => "%{zp}"}
write_behavior => "overwrite"
id => "lgt_zp_sj_id"
}
}
运行后,在本地 /var/www/html/lgt_zp_sj 路径下出现文件:
但是里面文件乱码,并不能正常打开。所以后面尝试将这个图片格式数据通过base64编码后上传到ES中,然后再通过KONGA配置给别人提供API。
查看logstash的过滤器的相关文档,将照片数据通过64编码后再传入到ElasticSearch中。
看要在Oracle中数据表的数据:
在kibana中手动创建索引:
PUT zp_index
{
"mappings": {
"doc":{
"properties": {
"nbbh": {
"type": "text"
},
"zp": {
"type": "binary"
}
}
}
}
}
然后创建成功则可以在Elasticsearch中看到这个索引:
此时这个索引创建成功并且其中没有数据。参考文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/binary.html
这里需要在logstash中配置64编码的 config 文件:
input {
jdbc {
jdbc_driver_library => "/home/logstash/libs/ojdbc6-11.1.0.6.0.jar"
jdbc_driver_class => "Java::oracle.jdbc.OracleDriver"
jdbc_connection_string => "jdbc:oracle:thin:@192.168.99.20:1521:jcxydb"
jdbc_user => "bgxt"
jdbc_password => "bgxt#zjjcxy"
schedule => "* * * * *"
statement => "select NBBH,ZP from LGT_ZP_SJ"
}
}
filter {
ruby {
init => "require 'base64'"
code => 'event.set("zp", Base64.encode64(event.get("zp")))'
}
}
output {
elasticsearch {
hosts => [ "192.168.102.17:9400","192.168.102.19:9400","192.168.102.20:9400" ]
index => "zp_index"
document_type => "doc"
document_id => "%{nbbh}"
user => "logstash_internal"
password => "logstash@PWD2020"
}
}
这里要注意logstash的版本,之前网上找的编码方式是 ==》code => "event['zp'] = Base64.decode64(event['zp'])" 会报错,说没有zp这个方法。所以这里还是要看对应版本的开发文档,这里用的是6.8的logstash,文档如下:
所以要用配置文件中的那个格式,还有event的文档也需要看一下。
logstash的ruby过滤器文档:ruby
logstash的event事件文档: event
然后重新启动logstash,可以看到我们自己创建的zp_index中已经有数据了。
然后通过 端口号+/zp_index/doc/_search 可以查看其中的数据: