0
点赞
收藏
分享

微信扫一扫

logstash定时抓取oracle数据

Ichjns 2022-04-21 阅读 69

使用logstash 连接mysql挺顺利的,oracle就坑多了。文章后面会提一下历经的坑
logstash版本7.9.3  
oracle版本11.2.0.4
环境准备就不多说了
本篇在您已经安装了java、logstash前提下
安装logstash-input-jdbc:
准备好ojdbc6-11.2.0.4.jar 官网下载 https://download.oracle.com/otn/utilities_drivers/jdbc/11204/ojdbc6.jar?AuthParam=1650434732_cc89f63b3a9b47835308eefe131aa97e 
准备好 dms.jar 在oracle安装目录下 $ORACLE_HOME/oc4j/lib/dms.jar
假设你两个文件放在 /home/oracle-jars/ 下面

首先在logstash.conf添加 jdbc的部分
input {
    stdin{
    }
    jdbc{
        id=>"id"
        type=>"type"
        jdbc_connection_string=> "jdbc:oracle:thin:@x.x.x.x:1521/[servername]"
        jdbc_user=> "**"
        jdbc_password=> "**"
        jdbc_driver_library=> "/home/oracle-jars"
        jdbc_driver_class=> "Java::oracle.jdbc.driver.OracleDriver"
        statement=> " select * from table where id=1"
        jdbc_fetch_size=>50
        jdbc_paging_enabled => "true"
        jdbc_page_size => "1000"
        #定时执行
        schedule => "* 0/5 * * *"
    }
}
output{
    # 一个触发条件 type=上面定义的type值
    if [type]== "type" {
            stdout{}
    }
}

顺利的配置千篇一律,不顺的配置原因各有不同。
第一个坑就是报错 Error: Java:oracle.jdbc.driver.OracleDriver not loaded. Are you sure you've included the correct jdbc driver in :jdbc_driver_library?
我花在这上面的时间有好几个小时,看到这个错 首先一个字母一个字母对去看是否拼错单词,路径是否正确。
然后百度查询。说要用oracle安装目录下的ojdbc.jar替换一下,我都照做了 还是不行。
然后我就开始弯路了..找了ojdbc5、6、7.jar全部试了一遍 我又找toad oracle下面的ojdbc.jar 那上面是个ojdbc8.jar。然而toad oracle可以用,我在这里用不了
在经历N次怀疑和检查后,我又专门去查了一下oracle的版本,11.2.0.4。我又试着搜了一下11.2.0.4对应的ojdbc。很幸运,搜到了。
原来oracle11g有两个大版本11.1.X和11.2.X。 jdbc乍以为都是ojdbc6.jar 其实还有个ojdbc6-11.2.0.4.jar
放上去 ,终于不再报那个错了。
不过变成了另外一个错误:java.lang.NoClassDefFoundError: oracle/dms/console/DMSConsole
然后又百度,这个不好查。没有logstash报这个错,都是别tomcat ,weblogic啥的,最后查到个说把dms.jar放到$JAVA_HOME/jre/lib/ext下面。我就试着放进去。 很好..起作用了
最后一个错是:ORA-12514, TNS:listener does not currently know of service requested in connect descriptor
这个一看就是跟oracle server有关的,因为我前面已经查询了N多配置了,我上去就把jdbc_connection_string这个改了
原来配的是jdbc_connection_string=> "jdbc:oracle:thin:@x.x.x.x:1521:[servername]" 
改成jdbc_connection_string=> "jdbc:oracle:thin:@x.x.x.x:1521/[servername]"
这个是oracle server 跟sid的区别.
至此 终于成功了。耗时9个小时.... 心里大喊XXX我去年买了个表,再硬啊?
 

举报

相关推荐

0 条评论