
xperimental/nextcloud-exporter一个Prometheus导出器,用于获取Nextcloud服务器实例的相关指标。
使用nextcloud-exporter的推荐方式是运行提供的Docker镜像。目前可在Docker Hub和GitHub Container Registry获取:
plaindocker pull ghcr.io/xperimental/nextcloud-exporter:latest docker pull xperimental/nextcloud-exporter:latest
除了指向master分支当前版本的latest标签外,也提供带版本号的标签。
如果您有较新版本(>= 1.16)的Go环境和GNU Make,获取二进制文件的步骤如下:
bashgit clone [***] cd nextcloud-exporter make
完成后,当前目录下会生成nextcloud-exporter二进制文件。
导出器支持两种与Nextcloud服务器认证的方式:
如果您使用Nextcloud 22或更高版本,建议使用令牌认证,因为它不需要具有管理员权限的普通用户账户。
如果配置中同时指定了令牌和用户名/密码,令牌将优先生效。
Nextcloud 22及更高版本支持服务器信息的“令牌认证”。通过这种方式,访问服务器信息不需要具有管理员权限的普通用户账户。您可以将令牌设置为任意值,但建议设置为长随机数:
bash# 生成随机值(例如使用openssl) TOKEN=$(openssl rand -hex 32) # 设置令牌(使用occ控制台应用) occ config:app:set serverinfo token --value "$TOKEN"
然后,您可以在导出器配置中使用此生成的令牌,而非用户名和密码。
要访问serverinfo API,您需要管理员用户的凭证。建议为此创建一个单独的用户。导出器还可以生成“应用密码”,这样配置中就无需保存真实用户密码,且导出器会作为已连接的应用显示在用户的安全面板中。
要让nextcloud-exporter创建应用密码,请使用--login参数启动:
bashnextcloud-exporter --login --server [***]
导出器会生成一个登录URL,您需要在浏览器中打开。如果为导出器创建了专用用户,请确保使用该用户登录,因为应用密码将绑定到登录用户。在浏览器中授予访问权限后,导出器会输出需要填入配置的用户名和密码。
登录流程完成后,可以在用户设置中禁用生成令牌的文件系统访问权限:
!允许文件系统访问复选框
也可以使用Docker容器进行交互式登录:
bashdocker run --rm -it ghcr.io/xperimental/nextcloud-exporter --login --server [***]
登录流程至少需要Nextcloud 16才能正常工作。
plain$ nextcloud-exporter --help Usage of nextcloud-exporter: -a, --addr string 用于监听连接的地址。(默认值:":9205") --auth-token string 认证令牌。使用Nextcloud 22或更高版本时可替代用户名和密码。 -c, --config-file string YAML配置文件路径。 --login 使用交互式登录创建应用密码。 -p, --password string 连接Nextcloud的密码。 -s, --server string Nextcloud服务器URL。 -t, --timeout duration 获取服务器信息文档的超时时间。(默认值:5s) --tls-skip-verify 跳过Nextcloud服务器的证书验证。 -u, --username string 连接Nextcloud的用户名。 -V, --version 显示版本信息并退出。
启动后,服务器会在/metrics端点提供指标,可作为Prometheus的目标。
有三种配置nextcloud-exporter的方法(优先级从高到低):
所有设置也可通过环境变量指定:
| 环境变量 | 对应的命令行参数 |
|---|---|
NEXTCLOUD_SERVER | --server |
NEXTCLOUD_USERNAME | --username |
NEXTCLOUD_PASSWORD | --password |
NEXTCLOUD_AUTH_TOKEN | --auth-token |
NEXTCLOUD_LISTEN_ADDRESS | --addr |
NEXTCLOUD_TIMEOUT | --timeout |
NEXTCLOUD_TLS_SKIP_VERIFY | --tls-skip-verify |
可使用--config-file选项从YAML文件读取配置:
yaml# 必填 server: "[***]" # 令牌认证必填 authToken: "example-token" # 用户名/密码认证必填 username: "example" password: "example" # 可选 listenAddress: ":9205" timeout: "5s" tlsSkipVerify: false
认证令牌和密码均可选择从单独的文件读取,而非直接通过上述输入方法获取。
只需将值设置为文件路径并前缀@,例如:
bash# 认证令牌 nextcloud-exporter -c config-without-token.yml --auth-token @/path/to/tokenfile # 密码 nextcloud-exporter -c config-without-password.yml -p @/path/to/passwordfile
当密码或令牌通过其他配置方式(配置文件或环境变量)设置时,此方法同样适用。
导出器通过Nextcloud服务器的“serverinfo”API读取指标。您可以在管理员设置的“监控”部分找到此API的URL,格式如下:
plain[***]
路径会自动添加到您提供的服务器URL中,因此上述示例中只需设置--server [***]即可。
在浏览器中打开此URL,您将看到导出器将使用的XML结构信息。
导出器会在每次被Prometheus抓取时查询Nextcloud服务器。如果要减少Nextcloud服务器负载,需相应调整抓取间隔:
ymlscrape_configs: - job_name: 'nextcloud' scrape_interval: 90s static_configs: - targets: ['localhost:9205']
nextcloud-exporter导出以下指标:
| 名称 | 描述 |
|---|---|
| nextcloud_active_users_daily_total | 过去24小时的活跃用户数 |
| nextcloud_active_users_hourly_total | 过去1小时的活跃用户数 |
| nextcloud_active_users_total | 过去5分钟的活跃用户数 |
| nextcloud_apps_installed_total | 当前安装的应用数量 |
| nextcloud_apps_updates_available_total | 有可用更新的应用数量 |
| nextcloud_database_info | 包含数据库元信息的标签。值恒为1。 |
| nextcloud_database_size_bytes | 数据库引擎报告的数据库大小(字节) |
| nextcloud_exporter_info | 包含导出器元信息的标签。值恒为1。 |
| nextcloud_files_total | 实例提供的文件总数 |
| nextcloud_free_space_bytes | 数据目录的可用磁盘空间(字节) |
| nextcloud_php_info | 包含PHP元信息的标签。值恒为1。 |
| nextcloud_php_memory_limit_bytes | 配置的PHP内存限制(字节) |
| nextcloud_php_upload_max_size_bytes | 配置的最大上传大小(字节) |
| nextcloud_scrape_errors_total | 此收集器的抓取错误计数 |
| nextcloud_shares_federated_total | 联合共享数量,按方向sent(发送)/received(接收)划分 |
| nextcloud_shares_total | 共享数量,按类型划分:authlink:受密码保护的共享链接group:共享给群组link:所有共享链接user:共享给用户mail:通过邮件共享room:共享给房间 |
| nextcloud_system_info | 包含Nextcloud元信息的标签。值恒为1。 |
| nextcloud_up | 指示导出器是否成功抓取指标:1:成功0:失败(服务器宕机、不可达、凭证无效等) |
| nextcloud_users_total | 实例的用户总数 |
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务