拓冰建站拓冰建站
首页 / 资讯中心 / 正文

sql_exporter Docker部署实战:多阶段构建、CONFIG环境变量与健康检查清单

sql_exporter Docker部署实战多阶段构建、CONFIG环境变量与健康检查清单【免费下载链接】sql_exporterDatabase agnostic SQL exporter for Prometheus项目地址: https://gitcode.com/gh_mirrors/sqle/sql_exportersql_exporter是一个数据库无关Database agnostic的 SQL 指标导出器专为Prometheus监控系统设计。本文带你用Docker 部署 sql_exporter看懂它的多阶段构建 Dockerfile掌握CONFIG 环境变量用法并附一份可落地的健康检查清单。 一、sql_exporter 是什么为什么值得用sql_exporter 是一个配置驱动的 Exporter它执行你定义的 SQL 查询把查询结果转换成 Prometheus 指标。它内置支持以下数据库只要有对应 Go 驱动就能扩展数据库DSN 格式示例MySQLmysql://user:passhost:3306/dbnamePostgreSQLpostgres://user:passhost:5432/dbnameSQL Serversqlserver://user:passhost:1433ClickHouseclickhouse://host:9000?usernameuserpasswordpass它的核心设计理念是指标和查询完全由配置定义。SQL 查询被分组到采集器Collector中——例如query stats、I/O stats或你自己的pricing data freshness。你可以快速定义自定义采集器来监控数据质量而不需要写任何代码。项目结构速览方便后文对照Dockerfile多阶段构建定义cmd/sql_exporter/main.go程序入口CONFIG 环境变量在这里生效config/config.go配置解析与校验逻辑examples/sql_exporter.yml开箱即用的配置示例examples/mssql_standard.collector.ymlSQL Server 标准采集器documentation/sql_exporter.yml完整带注释的参考配置Makefile构建脚本提供make docker一键构建镜像 二、Dockerfile 揭秘多阶段构建如何瘦身镜像打开项目根目录的Dockerfile你会发现这是一个教科书式的多阶段构建Multi-stage Build总共只有不到 15 行# 第一阶段构建阶段 FROM quay.io/prometheus/golang-builder AS builder ADD . /go/src/github.com/free/sql_exporter WORKDIR /go/src/github.com/free/sql_exporter RUN make # 第二阶段运行阶段 FROM quay.io/prometheus/busybox:glibc COPY --frombuilder /go/src/github.com/free/sql_exporter/sql_exporter /bin/sql_exporter EXPOSE 9399 ENTRYPOINT [ /bin/sql_exporter ]它的工作方式分两步构建阶段builder使用 Prometheus 官方的 Go 构建镜像quay.io/prometheus/golang-builder把源码拷贝进去并执行make编译出sql_exporter二进制文件。编译环境Go 工具链、依赖库等全部留在这个阶段。运行阶段切换到极简的quay.io/prometheus/busybox:glibc基础镜像只通过COPY --frombuilder把编译好的二进制拷贝到/bin/sql_exporter。多阶段构建带来的好处镜像小最终镜像不含 Go 编译器和依赖体积远小于单阶段构建更安全运行镜像里只有二进制和最小系统库攻击面小启动快静态编译的 Go 二进制直接作为ENTRYPOINT冷启动几乎是瞬间的此外还声明了EXPOSE 9399指标服务默认监听端口ENTRYPOINT [ /bin/sql_exporter ]容器启动即运行导出器后续参数如-web.listen-address会作为命令行参数传入⚡ 三、CONFIG 环境变量Docker 部署的关键一步很多新手部署时最大的困惑是容器里的配置放在哪 sql_exporter 的答案是CONFIG 环境变量。在入口文件cmd/sql_exporter/main.go中可以看到这段关键逻辑程序启动时会检查环境变量CONFIG如果设置了就用它覆盖-config.file的默认值sql_exporter.yml。优先级关系如下从高到低优先级方式说明1命令行参数-config.filexxx显式传参最高优先级2CONFIG 环境变量Docker 部署的推荐方式3默认值sql_exporter.yml未设置时生效这意味着你不需要修改 Dockerfile只需在运行时用-e CONFIG...指定容器内的配置文件路径即可。 四、Docker 部署 sql_exporter完整四步走第 1 步获取源码git clone https://gitcode.com/gh_mirrors/sqle/sql_exporter cd sql_exporter第 2 步准备配置文件参考examples/sql_exporter.yml创建你自己的配置下面是一个最小示例# 全局默认值 global: scrape_timeout_offset: 500ms min_interval: 0s max_connections: 3 max_idle_connections: 3 # 单目标模式target 与 jobs 二选一 target: data_source_name: sqlserver://prom_user:prom_passworddbserver1:1433 collectors: [mssql_standard] # 采集器定义文件支持通配符 collector_files: - *.collector.yml把配置和采集器文件如examples/mssql_standard.collector.yml放到同一目录例如./deploy/。注意配置中target单目标和jobs多任务多目标必须且只能定义其一否则启动即报错这个校验在config/config.go中实现。第 3 步构建并启动容器# 构建镜像也可直接使用官方发布的镜像 docker build -t sql-exporter:latest . # 启动挂载配置目录 CONFIG 环境变量 docker run -d \ --name sql_exporter \ -p 9399:9399 \ -v $(pwd)/deploy:/etc/sql_exporter \ -e CONFIG/etc/sql_exporter/sql_exporter.yml \ sql-exporter:latest各参数含义-p 9399:9399映射默认端口可用-web.listen-address参数修改-v $(pwd)/deploy:/etc/sql_exporter把宿主机配置目录挂载进容器-e CONFIG...告诉容器读取哪个配置文件第 4 步验证# 健康检查 curl http://localhost:9399/healthz # 拉取指标 curl http://localhost:9399/metrics✅ 五、健康检查清单Checklist部署完成后建议按以下清单逐项验证。所有端点均在cmd/sql_exporter/main.go中注册#检查项命令 / 地址预期结果1存活探针GET /healthz返回 200 OK2指标端点GET /metrics返回文本格式指标3数据库可达性查看/metrics的 HTTP 状态200 正常数据库不可达时返回 500Prometheus 会记录up04进程自身指标GET /sql_exporter_metrics返回 Go 运行时等调试指标5当前配置GET /config显示生效配置DSN 中的密码显示为secret6版本信息sql_exporter -version容器内执行打印版本与构建信息补充两个实战要点up0是数据库挂了不是exporter 挂了sql_exporter 设计上与数据库共享故障域。判断服务本体是否存活请用/healthz判断数据库是否可连请用/metrics的up指标。超时保护exporter 会自动读取 Prometheus 的抓取超时头X-Prometheus-Scrape-Timeout-Seconds并减去配置中的scrape_timeout_offset默认 500ms避免 Prometheus 先超时。该逻辑位于cmd/sql_exporter/promhttp.go。 六、常见问题快速排查Q1容器启动后立即退出先docker logs sql_exporter看日志。最常见原因是配置校验失败如target/jobs同时定义、采集器名称重复、DSN 缺失配置解析逻辑见config/config.go错误信息非常明确。Q2改了配置不生效确认CONFIG环境变量指向的路径与你挂载的目录一致且collector_files的通配符能匹配到采集器文件相对路径是相对于配置文件所在目录解析的。Q3想覆盖数据库连接串但不想改配置单目标模式下可用参数-config.data-source-name覆盖配置中的 DSN定义于exporter.go方便在不同环境复用同一份配置。 总结sql_exporter 用不到 15 行的多阶段构建 Dockerfile把 Go 编译环境挡在最终镜像之外产出了一个小巧、安全、秒启的监控组件CONFIG 环境变量让配置文件外部化实现零改 Dockerfile 的部署灵活性配合/healthz、/metrics、/sql_exporter_metrics三个端点就能搭建一套职责清晰的健康检查体系。按照本文的四步部署 六项检查清单你现在就可以把任意受支持的数据库接进 Prometheus 了。【免费下载链接】sql_exporterDatabase agnostic SQL exporter for Prometheus项目地址: https://gitcode.com/gh_mirrors/sqle/sql_exporter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门