在 Vector 配置中,${KAFKA_BOOTSTRAP_SERVERS} 和 ${KAFKA_TOPIC} 是环境变量占位符,需要在 Docker Compose 中设置。根据 Docker Compose 的最佳实践,有以下几种设置方式:
推荐方式一:使用 .env 文件(最常用)
在项目根目录创建 .env 文件:
# .env 文件内容
KAFKA_BOOTSTRAP_SERVERS=localhost:9092
KAFKA_TOPIC=my-logs-topic
然后在 docker-compose.yml 中引用:
services:
vector:
image: timberio/vector:latest-alpine
env_file:
- .env # 加载环境变量
volumes:
- ./vector.yaml:/etc/vector/vector.yaml:ro
优点:
- 配置与代码分离
- 不同环境使用不同
.env文件(如.env.dev、.env.prod) - 避免敏感信息硬编码
方式二:直接在 docker-compose.yml 中设置
services:
vector:
image: timberio/vector:latest-alpine
environment:
- KAFKA_BOOTSTRAP_SERVERS=kafka:9092
- KAFKA_TOPIC=application-logs
volumes:
- ./vector.yaml:/etc/vector/vector.yaml:ro
注意:不推荐用于敏感信息,因为会提交到版本控制。
方式三:从宿主机环境传递
services:
vector:
image: timberio/vector:latest-alpine
environment:
- KAFKA_BOOTSTRAP_SERVERS=${KAFKA_BOOTSTRAP_SERVERS}
- KAFKA_TOPIC=${KAFKA_TOPIC}
volumes:
- ./vector.yaml:/etc/vector/vector.yaml:ro
在启动前,先在 shell 中设置:
export KAFKA_BOOTSTRAP_SERVERS="kafka1:9092,kafka2:9092"
export KAFKA_TOPIC="production-logs"
docker compose up
生产环境最佳实践
1. 使用 .env 文件 + 版本控制忽略
# .gitignore
.env
.env.*
!.env.example
创建 .env.example 作为模板:
# .env.example
KAFKA_BOOTSTRAP_SERVERS=your-kafka-broker:9092
KAFKA_TOPIC=your-topic-name
2. Kafka 集群配置示例
对于生产环境,通常需要多个 broker:
# .env.production
KAFKA_BOOTSTRAP_SERVERS=kafka-broker-1:9092,kafka-broker-2:9092,kafka-broker-3:9092
KAFKA_TOPIC=app-logs-prod
3. 使用 Docker Secrets(高度敏感场景)
对于非常敏感的信息,可以使用 Docker Secrets:
services:
vector:
image: timberio/vector:latest-alpine
secrets:
- kafka_bootstrap_servers
- kafka_topic
environment:
- KAFKA_BOOTSTRAP_SERVERS_FILE=/run/secrets/kafka_bootstrap_servers
- KAFKA_TOPIC_FILE=/run/secrets/kafka_topic
secrets:
kafka_bootstrap_servers:
file: ./secrets/kafka_bootstrap_servers.txt
kafka_topic:
file: ./secrets/kafka_topic.txt
然后在 Vector 配置中使用 _FILE 后缀让 Vector 从文件读取:
bootstrap_servers: "${KAFKA_BOOTSTRAP_SERVERS_FILE}"
topic: "${KAFKA_TOPIC_FILE}"
总结建议
| 场景 | 推荐方式 | 示例 |
|---|---|---|
| 本地开发 | .env 文件 | KAFKA_BOOTSTRAP_SERVERS=localhost:9092 |
| CI/CD | Shell 环境变量 | export KAFKA_TOPIC=test-logs |
| 生产环境 | .env + Secrets | 敏感信息用 Docker Secrets |
| 多环境 | 环境特定 .env 文件 | .env.dev、.env.prod |
根据搜索结果,使用外部 .env 文件 是最推荐的方式,因为它:
- 集中管理配置
- 易于团队协作
- 安全性更好(可加入
.gitignore) - 便于不同环境切换