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_ALL为false,则禁用显示所有偏移量的默认行为。
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。 - 包含所有配置参数,方便调试或复用。
- 动态生成最终的 Kafka Exporter 启动脚本
10. 执行脚本
exec /usr/bin/tini -w -e 143 -- /tmp/run.sh
- 作用: 使用
tini(轻量级 init 系统)启动 Kafka Exporter,确保子进程信号处理和进程清理。 - 选项说明:
-w: 等待子进程。-e 143: 使用信号 143(SIGTERM)处理退出。
整体改进建议
- 变量验证: 增加环境变量的有效性检查,避免因未设置变量导致脚本中断。
- 日志管理: 考虑将日志输出到文件以便于调试。
- 错误处理: 为关键步骤(如文件操作)增加错误捕获机制,提供用户友好的错误提示。
- 参数打印: 在生成
/tmp/run.sh前打印最终的命令,便于检查和调试。
这是一个设计良好的动态配置脚本,灵活地支持多种 Kafka Exporter 配置选项,同时通过 tini 提供可靠的进程管理支持。
1174

被折叠的 条评论
为什么被折叠?



