# uos-uwsgi-exporter **Repository Path**: openeuler/uos-uwsgi-exporter ## Basic Information - **Project Name**: uos-uwsgi-exporter - **Description**: A Prometheus exporter for uwsgi. - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-07-14 - **Last Updated**: 2025-09-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: sig-ops ## README # uWSGI Exporter 一个用于监控 uWSGI 应用的 Prometheus Exporter,支持从多个 uWSGI socket 收集指标。 ## 功能特性 - 🔍 **多协议支持**: 支持 Unix socket 和 TCP 连接方式 - 📊 **Prometheus集成**: 将 uWSGI 指标转换为 Prometheus 格式 - ⚙️ **智能配置**: 支持命令行参数、配置文件和自动配置加载 - 🚀 **高性能**: 支持限流和并发处理 - 📝 **灵活日志**: 可配置的日志级别和输出 - 🛡️ **健康检查**: 提供健康检查接口 - 🔄 **优雅关闭**: 支持信号处理和优雅关闭 ## 收集的指标 - `uwsgi_listen_queue`: 监听队列长度 - `uwsgi_listen_queue_errors`: 监听队列错误数 - `uwsgi_worker_requests`: Worker处理的请求数 - `uwsgi_worker_exceptions`: Worker异常数 - `uwsgi_app_requests`: 应用处理的请求数 ## 快速开始 ### 安装 ```bash # 从源码编译 git clone cd uos_uwsgi_exporter go build -o uos_uwsgi_exporter # 或者使用 Makefile make build ``` ### 基本使用 ```bash # 使用默认配置(自动加载 config/example.yaml) ./uos_uwsgi_exporter # 使用命令行参数 ./uos_uwsgi_exporter -sockets "/tmp/uwsgi.sock,127.0.0.1:8000" # 使用配置文件 ./uos_uwsgi_exporter -config config.yaml ``` ### 访问指标 - 指标页面: http://localhost:9070/metrics - 健康检查: http://localhost:9070/healthz ## 配置说明 ### 配置方式 uWSGI Exporter 支持多种配置方式,按优先级从高到低: 1. **命令行参数**(最高优先级) 2. **指定的配置文件**(`-config` 参数) 3. **默认配置文件**(`config/example.yaml`) 4. **程序默认值**(最低优先级) #### 混合配置支持 程序现在支持**混合配置**功能: - 当有命令行参数时,会自动加载默认配置文件 - 命令行参数会覆盖配置文件中的对应值 - 未指定的参数使用配置文件中的值 ### 命令行参数 | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | `-address` | string | "0.0.0.0" | 监听地址 | | `-port` | int | 9070 | 监听端口 | | `-metrics-path` | string | "/metrics" | Prometheus 指标路径 | | `-config` | string | "" | 配置文件路径 | | `-sockets` | string | "" | uWSGI socket 列表,逗号分隔 | | `-log-level` | string | "info" | 日志级别 | | `-log-file` | string | "" | 日志文件路径 | | `-rate-limit` | int | 100 | 每秒请求限制 | | `-version` | bool | false | 显示版本信息 | | `-load-default` | bool | false | 强制加载默认配置文件 | ### 配置文件格式 支持 YAML 和 JSON 两种格式的配置文件: #### YAML 格式(推荐) ```yaml # 服务器配置 server: address: "0.0.0.0" port: 9070 metrics_path: "/metrics" # uWSGI socket 配置 uwsgi: sockets: - "/tmp/uwsgi.sock" - "127.0.0.1:8000" - "/var/run/uwsgi/app.sock" socket_types: "/tmp/uwsgi.sock": "unix" "127.0.0.1:8000": "tcp" "/var/run/uwsgi/app.sock": "unix" # 日志配置 logging: level: "info" file: "/var/log/uwsgi-exporter.log" # 限流配置 rate_limit: requests_per_second: 100 # 连接配置 connection: timeout: "30s" retry_attempts: 3 retry_delay: "1s" ``` #### JSON 格式 ```json { "server": { "address": "0.0.0.0", "port": 9070, "metrics_path": "/metrics" }, "uwsgi": { "sockets": [ "/tmp/uwsgi.sock", "127.0.0.1:8000" ], "socket_types": { "/tmp/uwsgi.sock": "unix", "127.0.0.1:8000": "tcp" } }, "logging": { "level": "info", "file": "/var/log/uwsgi-exporter.log" }, "rate_limit": { "requests_per_second": 100 } } ``` ### 自动配置加载 当命令行未提供参数时,程序会自动从 `config/example.yaml` 加载配置: ```bash # 自动加载 config/example.yaml ./uos_uwsgi_exporter ``` 程序会显示: ``` Info: Loaded configuration from config/example.yaml ``` ### 配置验证 程序启动时会自动验证配置: - ✅ 端口范围验证 (1-65535) - ✅ 日志级别验证 (debug, info, warn, error) - ✅ Socket 配置验证 - ✅ 限流配置验证 ### 使用示例 #### 开发环境 ```bash # 直接运行,使用默认配置 ./uos_uwsgi_exporter # 或使用示例配置 ./uos_uwsgi_exporter -config config/example.yaml ``` #### 生产环境 ```bash # 使用示例配置文件 ./uos_uwsgi_exporter -config config/example.yaml # 或使用自定义配置文件 ./uos_uwsgi_exporter -config /etc/uwsgi_exporter/example.yaml ``` #### 调试环境 ```bash # 使用配置文件,但覆盖特定参数 ./uos_uwsgi_exporter -config debug.yaml -port 8080 -log-level debug ``` #### 临时测试 ```bash # 直接使用命令行参数 ./uos_uwsgi_exporter -sockets "/tmp/test.sock" -port 9090 ``` #### 混合配置示例 ```bash # 使用默认配置,但覆盖端口 ./uos_uwsgi_exporter -port 8080 # 使用默认配置,但覆盖地址和日志级别 ./uos_uwsgi_exporter -address 127.0.0.1 -log-level debug # 强制加载默认配置(即使没有命令行参数) ./uos_uwsgi_exporter -load-default # 混合配置:使用默认配置,但覆盖多个参数 ./uos_uwsgi_exporter -port 8080 -address 127.0.0.1 -log-level debug ``` ### 配置文件示例 项目提供了多个配置文件示例: - `config/example.yaml` - 默认配置文件(自动加载) 您可以根据需要复制和修改这些配置文件。 📖 **详细配置说明请参考**: [配置指南](docs/CONFIG_GUIDE.md) ## Socket 类型说明 ### Unix Socket - **格式**: `/path/to/socket.sock` - **类型**: `unix` - **示例**: `/tmp/uwsgi.sock` ### TCP Socket - **格式**: `host:port` 或 `ip:port` - **类型**: `tcp` - **示例**: `127.0.0.1:8000`、`localhost:9000` ### 自动类型检测 如果没有在配置中指定 socket 类型,系统会根据 socket 路径自动判断: - 以 `/` 或 `./` 开头的路径被认为是 Unix socket - 其他格式被认为是 TCP socket ## 项目架构 ``` uos_uwsgi_exporter/ ├── main.go # 程序入口 ├── internal/ # 内部包 │ ├── config/ # 配置管理 │ ├── server/ # HTTP服务器 │ ├── exporter/ # 导出器核心 │ └── metrics/ # 指标收集和解析 ├── pkg/ # 公共包 │ ├── logger/ # 日志管理 │ ├── ratelimit/ # 限流中间件 │ └── utils/ # 工具函数 ├── config/ # 配置文件目录 │ └── example.yaml # 默认配置文件 └── test/ # 测试文件 ``` ## 开发 ### 运行测试 ```bash # 运行所有测试 go test ./... # 运行配置相关测试 go test ./internal/config -v # 运行测试并显示覆盖率 go test ./internal/config -cover ``` ### 构建 ```bash # 构建可执行文件 make build # 构建 Docker 镜像 make docker-build # 清理构建文件 make clean ``` ## 部署 ### Docker 部署 ```bash # 构建镜像 docker build -t uos_uwsgi_exporter . # 运行容器 docker run -d \ --name uwsgi_exporter \ -p 9070:9070 \ -v /path/to/config.yaml:/etc/uwsgi_exporter/config.yaml \ uos_uwsgi_exporter \ -config /etc/uwsgi_exporter/config.yaml ``` ### 系统服务 创建 systemd 服务文件 `/etc/systemd/system/uwsgi_exporter.service`: ```ini [Unit] Description=uWSGI Exporter After=network.target [Service] Type=simple User=uwsgi_exporter ExecStart=/usr/local/bin/uos_uwsgi_exporter -config /etc/uwsgi_exporter/config.yaml Restart=always [Install] WantedBy=multi-user.target ``` ## 故障排除 ### 常见问题 1. **配置文件不存在** ``` Warning: Could not load default config file config/example.yaml: config file not found ``` - 确保 `config/example.yaml` 文件存在 - 或使用 `-config` 参数指定配置文件 2. **配置文件格式错误** ``` Error loading configuration: failed to parse YAML config ``` - 检查 YAML 语法是否正确 - 使用在线 YAML 验证工具 3. **端口被占用** ``` Error: invalid port: 70000 ``` - 确保端口号在 1-65535 范围内 - 检查端口是否被其他程序占用 4. **Socket 连接失败** - 确保 uWSGI 服务正在运行 - 检查 socket 路径是否正确 - 验证 socket 文件权限 ### 日志级别 - `debug`: 详细的调试信息 - `info`: 一般信息(默认) - `warn`: 警告信息 - `error`: 错误信息 ## 许可证 // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: MIT