spring cloud 引入elasticsearch做oracle数据库全文检索,ouput会冲突的问题(二)

之前我们,通过java直接put对象,让elasticsearch作为数据库,可以通过java api增删查改。

 

现在,我们通过jdbc直接将数据库的数据全部导入到elasticsearch,并定时什么时候进行同步。

elasticsearch相当于redis一样的作为暂时存储,并快速查询的功能,之前遇到过docker容器被移除,日志与elasticsearch存储丢失,所以采用该方式更加安全

 

elasticsearch借助logstash,将数据库数据定期,放入elasticsearch。

配置logstash

input {
    jdbc {
      jdbc_connection_string => "jdbc:oracle:thin:@192.168.12.119:1522:ORCL10G"
      jdbc_user => "SPSS_MODEL"
      jdbc_password => "SPSS_MODEL"
      jdbc_driver_library => "/opt/logstash/ojdbc6.jar"
      jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
      jdbc_paging_enabled => "true"
      # jdbc_page_size => "50000"
      # statement_filepath => "jdbc.sql"
      statement => "SELECT ID id, DATASETABLENAME dataSetTableName, NAME name, URLTYPE             
                           urlType, REQUESTYPE requestType,
		                   OPERATOR operator, RELEASE_DATE releaseDate, 
                           DATASETNAME dataSetName, URL url
		            from S_RELEASE_DATA where 1 = 1"
      # 设置监听间隔 各字段含义(从左至右)分、时、天、月、年,全为*默认含义为每分钟都更新
      schedule => "1 * * * *"
      # 指定type方便在output时判断输出至哪个index
      type => "inter_info"
    }
}
output {
    elasticsearch {
        index => "release_%{+YYYY.MM.dd}"
        hosts => ["192.168.12.122:9200"]
        document_id => "%{id}"
    }
}

首先查看是否能访问通 telnet 192.168.12.119 1522

ubuntu 使用apt-get install telnetd 安装,我发现是可以访问通的。

那么可能是没有安装jdbc插件。

//切换国内镜像
vi /etc/apt/sources.list
//全部删除替换下述文本
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse
//保存之后更新
apt-get update
//安装logstash jdbc插件  cd /opt/logstasg/bin
./logstash-plugin install logstash-input-jdbc

 

注意: 如果你的logstash 读取的是多个配置文,其中重复的就会冲突:

比如:我配置了一个

vim 02-beats-input.conf

input {    
    tcp {         
        port => 5044         
        codec => json_lines     
    }     
} 
output{  
    elasticsearch { 
        hosts => ["192.168.12.122:9200"] 
        index => "share_app_logs_index_%{+YYYY.MM.dd}"
    } 
}

这次我们配置了jdbc的。那么就会发现 share的索引,会有jdbc的记录也会有日志。 release中也会有记录和日志。会出现混乱。原因,就是我们有2个elasticsearch没有任何判断,就会出现传输到 2者的某一种。

 

解决方案就是加判断。

output {
    if[type] == "inter_info"{
        elasticsearch {
            index => "release_%{+YYYY.MM.dd}"
            hosts => ["192.168.12.122:9200"]
        }
    }  
}

终极版:

input {
    tcp {
        port => 5044
        codec => json_lines
        type => "log"
    }
}
input{
    jdbc {
      jdbc_connection_string => "jdbc:oracle:thin:@192.168.12.119:1522:ORCL10G"
      jdbc_user => "SPSS_MODEL"
      jdbc_password => "SPSS_MODEL"
      jdbc_driver_library => "/opt/logstash/ojdbc6.jar"
      jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
      jdbc_paging_enabled => "true"
      statement => "SELECT ID id, DATASETABLENAME dataSetTableName, NAME name, URLTYPE
                           urlType, REQUESTYPE requestType,
                                   OPERATOR operator, RELEASE_DATE releaseDate,
                           DATASETNAME dataSetName, URL url
                            from S_RELEASE_DATA where 1 = 1"
      schedule => "1 * * * *"
      type => "inter_info"
    }
}
filter{
   if[type] == "log"{
       mutate{
          lowercase=>["app"]
       }
   }
}
output{
    if[type] == "log"{
        elasticsearch {
            hosts => ["192.168.12.122:9200"]
            action => "index"
            index => "%{app}"
        }
    }else if[type] == "inter_info"{
        elasticsearch {
            index => "release_%{+YYYY.MM.dd}"
            hosts => ["192.168.12.122:9200"]
            document_id => "%{id}"
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值