logstash output到kafka 配置SSL 加密

本文详细介绍了如何使用keytool为Kafka集群生成密钥和证书,并配置SSL加密。此外,还提供了配置Logstash将数据输出到Kafka的具体步骤,包括解决过程中可能遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 使用keytool来为集群的每台机器生成密钥和证书。

1. 先执行下面的脚本

会要输入很多次密码建议密码都一样

#!/bin/bash
#Step 1
#以下注意修改时间  默认时间365
keytool -keystore server.keystore.jks -alias localhost -validity 365 -keyalg RSA -genkey
#Step 2
openssl req -new -x509 -keyout ca-key -out ca-cert -days 365
keytool -keystore server.truststore.jks -alias CARoot -import -file ca-cert
keytool -keystore client.truststore.jks -alias CARoot -import -file ca-cert
#Step 3
keytool -keystore server.keystore.jks -alias localhost -certreq -file cert-file
#得修改时间和密码 -passin pass:你的密码
openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days 365 -CAcreateserial -passin pass:123456
keytool -keystore server.keystore.jks -alias CARoot -import -file ca-cert
keytool -keystore server.keystore.jks -alias localhost -import -file cert-signed
#Step 4
keytool -keystore client.keystore.jks -alias localhost -validity 365 -keyalg RSA -genkey

在这里插入图片描述

2. 参数解释

  • keystore: 密钥仓库的位置
  • ca-cert: CA的证书
  • ca-key: CA的私钥
  • ca-password: CA的密码
  • cert-file: 出口,服务器的未签名证书
  • cert-signed: 已签名的服务器证书

2. 配置kafka

注意: 内网传输未配置ssl 加密, 使用ssl 加密会影响性能

  1. 在server.properties 中增加以下配置
#改为自己的主机名或ip
listeners=PLAINTEXT://host.name:9092,SSL://host.name:9093
#记得修改路径为你秘钥的路径
ssl.keystore.location=/export/servers/kafka_2.11-2.4.1/bin/cart/server.keystore.jks
ssl.keystore.password=123456
ssl.key.password=123456
#记得修改路径为你秘钥的路径
ssl.truststore.location=/export/servers/kafka_2.11-2.4.1/bin/cart/server.truststore.jks
ssl.truststore.password=123456
  1. 注释掉以下内容
advertised.listeners=PLAINTEXT://node01:9092
  1. 进入kafka bin目录重启kafka,注意观察是否报错
bin/kafka-server-start.sh ./config/server.properties

3. 遇到的问题

  1. cluster.id 不正确解决

进入kafka的logs 目录, 也就是server.properties 中配置的log.dir 的路径
找到meta.properties 修改为报错中的值

  1. 连接被拒绝
  1. kafka 内部问题
  2. 9093端口未开放
  3. 主机hosts 问题 映射成指定的主机名

4. 配置logstash输出到kafka的output

把之前通过keytool 生成的 server.keystore.jks 和 server.truststore.jks 文件拷贝到 logstash 节点

output {
        kafka {
        codec => json
        topic_id => "logstash_test"
        ssl_keystore_location => "/opt/cart/server.keystore.jks"
        ssl_keystore_password => "123456"
        ssl_keystore_type => "JKS"
        ssl_truststore_location => "/opt/cart/server.truststore.jks"
        ssl_truststore_password => "123456"
        ssl_truststore_type => "JKS"
        ssl_key_password => "123456"
        bootstrap_servers => "host.name:9093"
        security_protocol => "SSL"
        # 不以主机名作为判断不加会连接不上
        ssl_endpoint_identification_algorithm => ""
      }
}

5. 最后

欢迎在评论区留言探讨。

参考链接

https://www.orchome.com/171
### Zabbix 集成 Kafka 的数据传输配置 为了将 Zabbix 中的数据导入到 Apache Kafka,可以通过编写自定义脚本或者利用现有的工具完成这一过程。以下是详细的说明: #### 1. 使用 Logstash 实现 Zabbix 到 Kafka 的数据传递 Logstash 是一种强大的开源服务器端数据处理管道,能够从多个源接收数据,并将其发送至指定的目标位置。通过 Logstash 插件,可以从 Zabbix 接收告警事件或其他监控数据,并将其转发给 Kafka。 - **安装 Logstash 和相关插件** 安装 Logstash 并启用 `logstash-input-zabbix` 输入插件以及 `logstash-output-kafka` 输出插件[^2]。 - **配置文件示例** 下面是一个简单的 Logstash 配置文件示例,用于从 Zabbix 获取数据并将它们推送到 Kafka: ```plaintext input { zabbix { url => "http://your_zabbix_server/api_jsonrpc.php" user => "Admin" password => "zabbix_password" hostids => ["10084"] } } output { kafka { bootstrap_servers => "localhost:9092" topic_id => "zabbix_topic" } } ``` #### 2. 编写 Python 脚本来实现 Zabbix-Kafka 数据同步 如果不想依赖第三方工具,也可以开发一个轻量级的 Python 脚本来定期抓取 Zabbix API 提供的数据,并发布这些数据到 Kafka 主题上。 - **Python 示例代码** 这里提供了一个基本框架,展示如何使用 `pyzabbix` 库获取 Zabbix 数据并通过 `confluent_kafka` 发布到 Kafka 上。 ```python from pyzabbix import ZabbixAPI from confluent_kafka import Producer # 初始化 Zabbix API 对象 zapi = ZabbixAPI("http://your_zabbix_server") zapi.login("Admin", "password") # 创建 Kafka 生产者实例 producer = Producer({'bootstrap.servers': 'localhost:9092'}) def publish_to_kafka(topic, message): producer.produce(topic, value=message.encode('utf-8')) producer.flush() items = zapi.item.get(output='extend', monitored=True) for item in items: data_point = f"{item['hostid']} {item['key_']}: {item['lastvalue']}" publish_to_kafka("zabbix_data", data_point) ``` #### 3. 确保安全性和扩展性 无论选择哪种方法,在实际部署过程中都需要考虑系统的安全性与可扩展性。例如,确保所有网络通信都经过 SSL/TLS 加密;设置严格的访问权限控制机制以保护敏感信息不被未授权访问[^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值