Oracle 数据同步至 Elasticsreach

数据同步使用的是:logstash

官方文档:

https://www.elastic.co/guide/en/logstash/7.6/plugins-inputs-jdbc.html

环境准备:

elasticsearch7.6、kibana7.6、logstash7.6.

这里没必要用docker, 因为太过麻烦, 只有依赖过多时,使用docker才方便。

 

oracle 版本:

Oracle 数据同步至 Elasticsreach_第1张图片

 

对应的jar版本:

Oracle 数据同步至 Elasticsreach_第2张图片

 

将jar包下载,上传至logstash/lib

新建一个jar文件夹。

Oracle 数据同步至 Elasticsreach_第3张图片

 

在/software/es/logstash-7.6.0/config 目录下新建logstash.json的配置文件: logstash.json

转载: https://blog.csdn.net/u014646662/article/details/94736551

这个文件指定分片数量, 分词器等等。 将如下内容加入  logstash.json 文件中:

"shards": 主分片数量

"template": "*",是匹配所有索引的意思,

如果只想匹配以test-开头的索引, "template": "test-*"

 "analyzer": "ik_smart",这里用的是ik分词器,如果想是有其他分词器,在这里修改即可

"match": "*",匹配字段名

 "date_detection": true,识别日期类型
 "numeric_detection": true,识别数字类型
 

{
    "index_patterns": ["*"],
  "order" : 0,
  "version": 1,
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas":3
  },
    "mappings": {
      "date_detection": true,
      "numeric_detection": true,
            "dynamic_templates": [
                {
                    "string_fields": {
                        "match": "*",
                        "match_mapping_type": "string",
                        "mapping": {
                            "type": "text",
                            "norms": false,
                            "analyzer": "ik_smart",
                            "fields": {
                                "keyword": {
                                    "type": "keyword"
                                }
                            }
                        }
                    }
                }
            ]
    }
}

 

 

 在/software/es/logstash-7.6.0/config 目录下新建表名的配置文件: xxx.conf

将如下内容加入, 修改自己的路径, 表名。 这里使用的是更新时间判断数据是否修改。

配置转载: https://blog.csdn.net/huan_lxyd/article/details/103547686

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.


input{
    jdbc{
                # 数据库驱动包存放路径
                # 此处遇到坑
                jdbc_driver_library => "/software/es/logstash-7.6.0/lib/jar/ojdbc8-12.2.0.1.jar"
                # 数据库驱动器;
                jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
                # 数据库连接方式
                jdbc_connection_string => "jdbc:oracle:thin:@192.168.10.128:1521/test"
                # 数据库用户名
                jdbc_user => "tests"
                # 数据库密码
                jdbc_password => "tests"
                # 数据库重连尝试次数
                connection_retry_attempts => "3"
                # 判断数据库连接是否可用,默认false不开启
                jdbc_validate_connection => "true"
                # 数据库连接可用校验超时时间,默认3600s
                jdbc_validation_timeout => "3600"
                # 开启分页查询(默认false不开启)
                jdbc_paging_enabled => "true"
                # 单次分页查询条数(默认100000,若字段较多且更新频率较高,建议调低此值)
                jdbc_page_size => "1000"
                # statement为查询数据sql,如果sql较复杂,建议通过statement_filepath配置sql文件的存放路径
                # statement_filepath => "E:\STUDY\elasticsearch\oralce2es\logstash-7.5.0\config\querysql.sql"
                # sql_last_value为内置的变量,存放上次查询结果中最后一条数据tracking_column的值,此处即为rowid
                statement => "SELECT * FROM T_TEST_JJDB  WHERE GXSJ > :sql_last_value"
                # 是否将字段名转换为小写,默认true(如果有数据序列化、反序列化需求,建议改为false);
                lowercase_column_names => false
                # 是否记录上次执行结果,true表示会将上次执行结果的tracking_column字段的值保存到last_run_metadata_path指定的文件中
                record_last_run => true
                # 需要记录查询结果某字段的值时,此字段为true,否则默认tracking_column为timestamp的值
                use_column_value => true
                # 查询结果某字段的数据类型,仅包括numeric和timestamp,默认为numeric
                tracking_column_type => timestamp
                # 需要记录的字段,用于增量同步,需是数据库字段
                tracking_column => "GXSJ"
                # 记录上次执行结果数据的存放位置
                last_run_metadata_path => "/software/es/logstash-7.6.0/path/jjdblast.log"
                # 是否清除last_run_metadata_path的记录,需要增量同步时此字段必须为false
                clean_run => false
                # 同步频率(分 时 天 月 年),默认每分钟同步一次
                schedule => "* * * * *"
                # ES索引的type
                #type => "_doc"
    }

}

output{
    elasticsearch{
         # ES地址,集群中多个地址可用数组形式:hosts => ["192.168.1.1:9200", "192.168.1.2:9200"]
        hosts => "192.168.10.xxx:9200"
        # 索引名称
        index => "jjdb"
        # 数据唯一索引(建议同数据库表的唯一ID对应)
        document_id => "%{JJDBID}"
        #模版名称
        template_name => "logstash"
        #模版文件路径
        template => "/software/es/logstash-7.6.0/config/logstash.json"
        #模版如果存在, 则覆盖
        template_overwrite => true
        #管理模版
        manage_template => true


    }


}

 

2: 在/software/es/logstash-7.6.0/config/pipelines.yml 文件中加入刚刚创建的xxx.conf文件路径。

   如果是多个表,就创建多个 xxx.conf, 然后在pipelines.yml 的 pipeline.id 中配置路径。多个xx.conf就多个pipeline.id,path.config

 Oracle 数据同步至 Elasticsreach_第4张图片

 

3: 启动logstash:

./../bin/logstash -f     需要指定 xxx.conf, 没有指定xxx.conf则默认使用pipelines.yml中的配置。

 

报如下错误就是:

数据库驱动jdbc_driver_class前面少了Java::,导致启动报错:oracle.jdbc.driver.OracleDriver not loaded. Are you sure you’ve included the correct jdbc driver in :jdbc_driver_library?
 

 

 如下为启动成功, logstash.json, pipe 都成功, 并执行sql.

Oracle 数据同步至 Elasticsreach_第5张图片

 

kibana 中看见索引已经创建了。

Oracle 数据同步至 Elasticsreach_第6张图片

 

kibana中, 分片数量, 分词器都是配置文件中配置的。 至此同步完成。

Oracle 数据同步至 Elasticsreach_第7张图片

你可能感兴趣的:(Oracle 数据同步至 Elasticsreach)