kafka_exporter_run.sh脚本解读

https://github.com/strimzi/strimzi-kafka-operator/blob/main/docker-images/kafka-based/kafka/exporter-scripts/kafka_exporter_run.sh


1. 脚本前言

#!/usr/bin/env bash
set -e
set +x
  • #!/usr/bin/env bash: 指定使用 Bash 解释器。
  • set -e: 遇到错误时退出脚本。
  • set +x: 禁用命令回显,防止敏感信息泄露(如环境变量)。

2. 配置 LOG_DIR

export LOG_DIR="$KAFKA_EXPORTER_HOME"
  • 作用: 设置 LOG_DIR 环境变量,避免脚本尝试创建日志目录。
  • 注意: LOG_DIR 并未真正用于日志管理,只是为了避免权限问题。

3. 正则过滤器配置

if [ -n "$KAFKA_EXPORTER_GROUP_REGEX" ]; then
    groupregex="--group.filter=\""${KAFKA_EXPORTER_GROUP_REGEX}"\""
fi
  • 作用: 检查 KAFKA_EXPORTER_GROUP_REGEX 是否设置,若设置,则赋值给 groupregex,用于配置消费者组正则过滤器。
  • 类似逻辑适用于其他变量:
    • KAFKA_EXPORTER_TOPIC_REGEX: 主题过滤器。
    • KAFKA_EXPORTER_GROUP_EXCLUDE_REGEX: 消费者组排除正则。
    • KAFKA_EXPORTER_TOPIC_EXCLUDE_REGEX: 主题排除正则。
  • 改进建议: 使用 printf 代替直接拼接,避免引号嵌套问题。

4. Sarama 日志启用

if [ "$KAFKA_EXPORTER_ENABLE_SARAMA" = "true" ]; then
    saramaenable="--log.enable-sarama"
fi
  • 作用: 根据 KAFKA_EXPORTER_ENABLE_SARAMA 的值,决定是否启用 Sarama 的调试日志。
  • Sarama: Kafka 的 Go 客户端库。

5. 显示所有偏移量

if [ "$KAFKA_EXPORTER_OFFSET_SHOW_ALL" = "false" ]; then
    allgroups="--no-offset.show-all"
fi
  • 作用: 如果 KAFKA_EXPORTER_OFFSET_SHOW_ALLfalse,则禁用显示所有偏移量的默认行为。

6. 设置日志级别

if [ -n "$KAFKA_EXPORTER_LOGGING" ]; then
    loglevel="--verbosity=${KAFKA_EXPORTER_LOGGING}"
fi
  • 作用: 允许用户通过环境变量 KAFKA_EXPORTER_LOGGING 设置日志详细级别。

7. 合并 CA 证书

CA_CERTS=/tmp/cluster-ca.crt
for cert in /etc/kafka-exporter/cluster-ca-certs/*.crt; do
  sed -z '$ s/\n$//' "$cert" >> "$CA_CERTS"
  echo "" >> "$CA_CERTS"
done
  • 作用:
    • 遍历 /etc/kafka-exporter/cluster-ca-certs 下的所有 .crt 文件。
    • 使用 sed 移除每个文件末尾的多余换行符并追加到 CA_CERTS
  • 改进建议:
    • 检查目标目录是否为空,避免 *.crt 匹配不到文件导致错误。
    • 使用 cat 更高效地合并文件:
      cat /etc/kafka-exporter/cluster-ca-certs/*.crt > "$CA_CERTS"
      

8. 配置 Kafka 参数

version="--kafka.version=\""$KAFKA_EXPORTER_KAFKA_VERSION"\""
kafkaserver="--kafka.server="$KAFKA_EXPORTER_KAFKA_SERVER
listenaddress="--web.listen-address=:9404"
tls="--tls.enabled --tls.ca-file=$CA_CERTS --tls.cert-file=/etc/kafka-exporter/kafka-exporter-certs/kafka-exporter.crt  --tls.key-file=/etc/kafka-exporter/kafka-exporter-certs/kafka-exporter.key"
  • 作用:
    • 配置 Kafka 版本、Kafka 服务器地址、监听地址以及 TLS 相关文件路径。
    • 这些选项通过对应的环境变量动态设置。

9. 生成运行脚本

cat <<EOT > /tmp/run.sh
$KAFKA_EXPORTER_HOME/kafka_exporter \
$groupregex \
$topicregex \
$groupExcludeRegex \
$topicExcludeRegex \
$tls \
$kafkaserver \
$saramaenable \
$listenaddress \
$allgroups \
$loglevel \
$version
EOT

chmod +x /tmp/run.sh
  • 作用:
    • 动态生成最终的 Kafka Exporter 启动脚本 /tmp/run.sh
    • 包含所有配置参数,方便调试或复用。

10. 执行脚本

exec /usr/bin/tini -w -e 143 -- /tmp/run.sh
  • 作用: 使用 tini(轻量级 init 系统)启动 Kafka Exporter,确保子进程信号处理和进程清理。
  • 选项说明:
    • -w: 等待子进程。
    • -e 143: 使用信号 143(SIGTERM)处理退出。

整体改进建议

  1. 变量验证: 增加环境变量的有效性检查,避免因未设置变量导致脚本中断。
  2. 日志管理: 考虑将日志输出到文件以便于调试。
  3. 错误处理: 为关键步骤(如文件操作)增加错误捕获机制,提供用户友好的错误提示。
  4. 参数打印: 在生成 /tmp/run.sh 前打印最终的命令,便于检查和调试。

这是一个设计良好的动态配置脚本,灵活地支持多种 Kafka Exporter 配置选项,同时通过 tini 提供可靠的进程管理支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值