使用logstash将Oracle中的图片数据通过64编码后上传到ElasticSearch中

这里遇到一个问题,需要将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 路径下出现文件:

使用logstash将Oracle中的图片数据通过64编码后上传到ElasticSearch中_第1张图片

但是里面文件乱码,并不能正常打开。所以后面尝试将这个图片格式数据通过base64编码后上传到ES中,然后再通过KONGA配置给别人提供API。

目前方案

查看logstash的过滤器的相关文档,将照片数据通过64编码后再传入到ElasticSearch中。

一、手动建立索引

看要在Oracle中数据表的数据:

使用logstash将Oracle中的图片数据通过64编码后上传到ElasticSearch中_第2张图片

在kibana中手动创建索引:

PUT zp_index
{
  "mappings": {
    "doc":{
      "properties": {
        "nbbh": {
          "type": "text"
        },
        "zp": {
          "type": "binary"
        }
      }
    }
  }
}

使用logstash将Oracle中的图片数据通过64编码后上传到ElasticSearch中_第3张图片

然后创建成功则可以在Elasticsearch中看到这个索引:

使用logstash将Oracle中的图片数据通过64编码后上传到ElasticSearch中_第4张图片

此时这个索引创建成功并且其中没有数据。参考文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/binary.html

二、配置config文件

这里需要在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,文档如下:

使用logstash将Oracle中的图片数据通过64编码后上传到ElasticSearch中_第5张图片

所以要用配置文件中的那个格式,还有event的文档也需要看一下。

logstash的ruby过滤器文档:ruby

logstash的event事件文档:  event

3、重启logstash查看数据

然后重新启动logstash,可以看到我们自己创建的zp_index中已经有数据了。

使用logstash将Oracle中的图片数据通过64编码后上传到ElasticSearch中_第6张图片

然后通过 端口号+/zp_index/doc/_search 可以查看其中的数据:

使用logstash将Oracle中的图片数据通过64编码后上传到ElasticSearch中_第7张图片

你可能感兴趣的:(API,Database数据库)