求助:使用Flume 1.8.0将日志导入Elasticsearch5.0.0的配置及报错排查
解决Flume 1.8.0导入Elasticsearch 5.x的依赖与配置问题
兄弟,我太懂你这种只加了两个jar还是报错的崩溃了——Flume 1.8.0和Elasticsearch 5.x的适配可不是只靠两个jar就能搞定的,得把依赖、配置、环境都捋清楚。下面是你必须准备的所有条件:
1. 补全适配ES5.x的依赖包
Flume自带的Elasticsearch Sink默认适配的是ES2.x及更早版本,ES5.x重构了大量API,只加elasticsearch-5.0.0.jar和lucene-core-6.2.0.jar远远不够。你需要从Elasticsearch 5.0.0的lib目录里把这些jar包复制到<flume-HOME>/lib下:
elasticsearch-rest-client-5.0.0.jarelasticsearch-rest-high-level-client-5.0.0.jarjackson-core-2.8.1.jarjackson-databind-2.8.1.jarjackson-annotations-2.8.1.jarhttpclient-4.5.2.jarhttpcore-4.4.4.jarcommons-codec-1.10.jarcommons-logging-1.2.jar
⚠️ 重要提示:复制完后,一定要把Flume lib目录里和这些包冲突的旧版本删掉!比如旧的lucene、jackson系列jar,不然会出现类版本冲突,照样启动失败。
2. 调整Flume Sink的配置(关键!)
ES5.x不再推荐使用旧的Transport客户端,Flume 1.8.0已经支持REST客户端适配ES5+,所以你的配置文件必须做对应修改:
下面是一个基础的示例配置,你可以根据自己的需求调整:
# 定义Agent a1.sources = r1 a1.sinks = k1 a1.channels = c1 # Source配置(这里以Taildir Source为例,你可以换成自己的Source) a1.sources.r1.type = TAILDIR a1.sources.r1.positionFile = /var/flume/taildir_position.json a1.sources.r1.filegroups = f1 a1.sources.r1.filegroups.f1 = /var/log/*.log # Channel配置 a1.channels.c1.type = memory a1.channels.c1.capacity = 10000 a1.channels.c1.transactionCapacity = 1000 # Sink配置(重点是ES相关参数) a1.sinks.k1.type = elasticsearch a1.sinks.k1.hosts = http://你的ES主机IP:9200 a1.sinks.k1.index = 你的索引名(比如:flume-logs-%Y%m%d) a1.sinks.k1.index.type = _doc # ES5.x开始推荐用_doc作为类型名 a1.sinks.k1.cluster.name = 你的ES集群名(和elasticsearch.yml里的cluster.name一致) # 必须启用REST客户端,这是适配ES5+的核心 a1.sinks.k1.client.type = rest # 批量提交参数,根据日志量调整 a1.sinks.k1.batch.size = 100 a1.sinks.k1.batch.interval = 5000 # 绑定Source、Sink、Channel a1.sources.r1.channels = c1 a1.sinks.k1.channel = c1
3. 系统与环境权限检查
- 端口权限:CentOS 6.x的防火墙要开放ES的9200端口,执行
iptables -I INPUT -p tcp --dport 9200 -j ACCEPT,然后service iptables save;如果是测试环境,也可以临时关闭防火墙:service iptables stop。 - ES配置检查:修改Elasticsearch的
elasticsearch.yml,确保network.host设置为Flume能访问的IP(不要用默认的localhost,除非Flume和ES在同一机器),同时保证http.enabled: true,然后重启ES服务。 - Java版本一致:ES5.x要求必须用JDK8,Flume 1.8.0也推荐JDK8,所以要确保Flume和ES使用的是同一个版本的JDK,避免类加载异常。
4. 后续错误排查技巧
如果补完依赖、改完配置还是报错,你可以用debug模式启动Flume,查看详细的错误日志:
flume-ng agent -c conf -f 你的配置文件路径 -n a1 -Dlog4j.debug=true
这样能看到具体是哪个类缺失,再对应从ES的lib目录里找对应的jar包补充即可。
内容的提问来源于stack exchange,提问作者R wang
相关产品推荐
相关产品推荐

