解决“logstash同步oracle数据到ES时,刚启动就shut down”的问题

项目需求,在win7下搭建了ELK,并且将Oracle数据导入ES中,之前通过logstash将oracle中的数据导入es都没有问题,后来突然用同样的命令启动logstash后就shut down了,很奇怪,多次启动都shut down后,开始排除问题。

报错信息主要为:

 Error registering plugin {:pipeline_id=>"main", :plugin=>"
……………………………………………………
……………………………………………………
……………………………………………………
……………………其他信息在此省略………………………………
……………………主要看下面………………………………
……………………………………………………
:error=>"(<unknown>): 'reader' unacceptable code point '\u0000' (0x0) special characters are not allowed\nin \"'reader'\", position 0 at line 0 column 0", :thread=>"#<Thread:0x670f2a35 run>"}

上述错误出现'\u0000' (0x0) special characters are not allowed,不允许特殊字符,那么就检查自己的conf文件。

1、是不是conf文件的内容书写错误

我的conf内容为

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

input {
  stdin {
  }
  jdbc {
	jdbc_driver_library => "D:/logstash-6.8.6/logstash-core/lib/jars/ojdbc6-11.2.0.3.jar"
	jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"
	jdbc_connection_string => "jdbc:oracle:thin:@ip:1521:orcl"
	jdbc_user => "用户名"
	jdbc_password => "123456"	
	jdbc_paging_enabled => "true"
	jdbc_page_size => "50000"
	statement_filepath => "D:/logstash-6.8.6/bin/sql/XXX.sql"
	schedule => "* * * * *"
	  }
}

filter {
	json {
		source => "message"
		remove_field => ["message"]
	}
}

output {
  elasticsearch {
    hosts => ["ip:9200"]
    # index => "%{es_index}_index"
	index => "smq"
	document_type => "doc"
    document_id => "%{id}"
  }
  stdout {
	codec => json_lines
  }
}

conf内容书写检查了好几遍,甚至删除了所有空格,都不行,拷贝了同事的conf文件(他的能正常启动),也不行。

2、是不是conf文件的编码错误

我用EditPlus打开conf文件查看编码格式,发现不是UTF-8,(心里有点欣喜,估计改了编码就行了)将conf文件改为了UTF-8编码,启动logstash,结果又shut down了。(无奈)

解决:

上网找,大多数解释都没有参考价值,CSDN上几乎没有解决方法,最后在https://stackoverflow.com/questions/49840865/logstash-pipeline-error-error-registering-jdbc-plugin网站上找到了相关解释,这篇解释的最后,这样一句话引起了我的注意:

If your config is valid, then looks at $USER_HOME/.logstash_jdbc_last_run file, probably that file exists but isn't valid YAML. Fix what's broken about the file, or just delete it.

        意思就是看看你的用户文件路径下是否存在.logstash_jdbc_last_run文件,可能存在但不是有效的yaml,修复或者删除它。然后我进入C盘的用户路径下,果然有这个文件,但是打开什么都没有,果断删了,然后再启动logstash,这次启动成功,Oracle的数据也导入到ES了。

        然后返回看C盘的用户路径,logstash_jdbc_last_run文件又生成了,打开看里面其实就是一个启动logstash的UTC时间(世界协调时间)。

        有时间再研究stackoverflow网站吧,感觉挺有用。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值