我在基于bitnami图表的kube集群上创建了一个Kafka服务。部署进行得很顺利。接下来,我安装了一个文件节拍来向该服务发送日志。在我看来,文件节拍与集群通信,但不吞食日志。实际上,在启动file节拍服务之后,我发现了一个名为“logs”的主题,它是由file节拍创建的。然而,这个话题仍然是空的。我的配置如下:
filebeat.inputs:
- type: filestream
enabled: true
paths:
- /var/log/test.log
fields:
level: debug
review: 1
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: true
setup.template.settings:
index.number_of_shards: 1
setup.kibana:
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~
output.kafka:
hosts: ["ip-172-31-26-181:30092"]
topic: "logs-topic"
codec.json:
pretty: false卡夫卡主题存在
I have no name!@kafka-release-client:/$ kafka-topics.sh --list --bootstrap-server kafka-release.default.svc.cluster.local:9092
.......
logs-topicsyslog输出
Dec 30 08:28:45 ip-172-31-23-248 filebeat[29968]: 2021-12-30T08:28:45.928Z#011INFO#011[file_watcher]#011filestream/fswatch.go:137#011Start next scan
Dec 30 08:28:53 ip-172-31-23-248 filebeat[29968]: 2021-12-30T08:28:53.186Z#011INFO#011[publisher]#011pipeline/retry.go:219#011retryer: send unwait signal to consumer
Dec 30 08:28:53 ip-172-31-23-248 filebeat[29968]: 2021-12-30T08:28:53.186Z#011INFO#011[publisher]#011pipeline/retry.go:223#011 done
Dec 30 08:28:55 ip-172-31-23-248 filebeat[29968]: 2021-12-30T08:28:55.927Z#011INFO#011[file_watcher]#011filestream/fswatch.go:137#011Start next scan发布于 2022-01-21 17:06:47
我已经找到了解决这个问题的办法,梅比,它会帮助其他人的。
我的问题和上面的文章描述的一样,我挣扎了很长一段时间,因为我没有从filebeat中找到任何日志,这说明了问题所在。此外,我也找不到一种方法来增加日志记录级别,而不是调试选项,例如:
filebeat -e -c filebeat.yml -v -d "publisher"
Kafka Broker日志指出了信息级别上的一些SSL握手失败:
journalctl -f -u kafka
Jan 22 18:18:22 kafka sh[15893]: [2022-01-22 18:18:22,604] INFO [SocketServer listenerType=ZK_BROKER, nodeId=1] Failed authentication with /172.20.3.10 (SSL handshake failed) (org.apache.kafka.common.network.Selector)同样,在配置了调试级别之后,我无法看到实际的问题。
我决定用python脚本生成一些数据,并能够重现这个问题:
from kafka import KafkaConsumer, KafkaProducer
import logging
logging.basicConfig(level=logging.DEBUG)
try:
topic = "test"
sasl_mechanism = "PLAIN"
username = "test"
password = "fake"
security_protocol = "SASL_SSL"
producer = KafkaProducer(bootstrap_servers='kafka.domain.com:9092',
security_protocol=security_protocol,
ssl_check_hostname=True,
ssl_cafile='ca.crt',
sasl_mechanism=sasl_mechanism,
sasl_plain_username=username,
sasl_plain_password=password)
producer.send(topic, "test".encode('utf-8'))
producer.flush()
print("Succeed")
except Exception as e:
print("Exception:\n\n")
print(e)输出:
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: Hostname mismatch, certificate is not valid for 'kafka'. (_ssl.c:1129)
DEBUG:kafka.producer.sender:Node 1 not ready; delaying produce of accumulated batch
WARNING:kafka.conn:SSL connection closed by server during handshake.
INFO:kafka.conn:<BrokerConnection node_id=1 host=kafka:9092 <handshake> [IPv4 ('198.168.1.11', 9092)]>: Closing connection. KafkaConnectionError: SSL connection closed by server during handshake=>主机名无法在证书中成功验证。我在Kafka的advertised.listeners中更改并添加了许多参数(listener /advertised.listeners/ host.name),无法配置将在元数据中返回给客户端的另一个/完整域名。它总是返回"kafka:9092",而这不是证书中所示的域名。
解决方案:
禁用双方(服务器/客户端)的主机名验证。
卡夫卡服务器:ssl.endpoint.identification.algorithm=
python:ssl_check_hostname=True
File节拍也能做到这一点,但并不是很清楚:
output.kafka:
ssl.verification_mode: certificate证书验证所提供的证书是否由受信任的机构(CA)签名,但不执行任何主机名验证。
来源:https://www.elastic.co/guide/en/beats/filebeat/current/configuration-ssl.html
https://stackoverflow.com/questions/70529171
复制相似问题