目前公司采用ELK来存放以及利用日志,采用filebeat将日志发送至Kafka,之后再写一个python脚本作为消费者把Kafka内的日志拉取下来并打入到elasticsearch中,供后期查询检索使用。

本来这是一套比较完备的流程,但由于最近接了新的业务,而新产生的日志在对方的机器上,也就是说我们需要把Kafka端口开放至公网,供外部机器写入消息;

在确认Kafka端口开放后,远程主机可以连接Kafka并建立topic,但是却无法写日志;中间折腾了好几个小时才折腾出来,觉得有必要记录一下,避免后人踩坑。

首先分别修改kafka集群内机器配置文件如下:

config/server.properties:

  • advertised.host=PUBLIC_IP
  • host.name=HOST_NAME
  • host.port=9092

config/producer.properties:

  • metadata.broker.list=PUBLIC_IP

这样设置之后,远程主机仍然无法写数据,这是因为远程主机无法直接连接HOST_NAME;由此想到修改远程主机的/etc/hosts,修改如下:

/etc/hosts:

  • PUBLIC_IP1 HOST_NAME1
  • PUBLIC_IP2 HOST_NAME2
  • PUBLIC_IP3 HOST_NAME3
  • PUBLIC_IPn HOST_NAMEn

综上,经过上面的这些配置,现在filebeat就可以向Kafka打日志了~