10 个版本 (破坏性更新)
0.16.1 | 2023年4月19日 |
---|---|
0.15.1 | 2021年10月11日 |
0.14.0 | 2021年1月11日 |
0.13.0 | 2020年6月20日 |
0.9.9 | 2019年6月8日 |
#162 在 Unix API
每月 21 次下载
100KB
2K SLoC
Jail Exporter
描述
Jail Exporter 是一个 Prometheus 导出器,用于导出由 FreeBSD 监狱的度量信息,这些信息由 rctl(8)
报告。
导出器是用 Rust 编写的,并使用 jail 和 rctl 包来发现监狱并获得度量。
安装
pkg(8)
和端口
jail_exporter
可在 FreeBSD 端口树中以 sysutils/jail_exporter
的形式获得。可以通过使用 pkg install jail_exporter
的二进制包来安装,也可以在端口树中编译该包。
Cargo 安装
该库也可以通过 crates.io 获取,可以使用 cargo install
命令进行安装。然而,强烈建议通过 pkg(8)
或端口树安装导出器。
$ cargo install jail_exporter
使用此方法安装时,您可能希望将安装的二进制文件移动到 /usr/local/sbin
并获取适当的 rc(8)
以在系统启动时启动导出器。您可以这样做:
# Performed as root.
$ mv ~/.cargo/bin/jail_exporter /usr/local/sbin/
$ chown root:wheel /usr/local/sbin/jail_exporter
$ jail_exporter --rc-script | tee /usr/local/etc/rc.d/jail_exporter
$ chmod 755 /usr/local/etc/rc.d/jail_exporter
在系统启动时启用
您可以通过 rc.conf(5)
启用 jail_exporter
以在系统启动时启动。
# Either edit /etc/rc.conf directly or use the following command
sysrc jail_exporter_enable=YES
构建
构建 Jail Exporter 至少需要
- Rust v1.64.0 (MSRV)
- Cargo
BSD make(1)
Makefile 已提供以方便使用,如果您已经安装了 Rust 和 Cargo,则执行 make
将在 target/debug/jail_exporter
构建Jail Exporter的调试发布版。执行 make release
将在 target/release/jail_exporter
构建发布版本。
如果您不想使用 make(1)
,则通常的 cargo build
命令也应该可以正常工作。
配置
配置可以通过命令行参数或环境变量执行。如果为同一选项提供了环境变量和命令行参数,则将使用命令行参数进行配置。
命令行参数
参数 | 默认值 | 目的 |
---|---|---|
--output.file-路径 |
N/A | 将度量标准输出到文件而不是运行 HTTPd。 |
--rc-script |
N/A | 输出适当的 rc.d 脚本 |
--web.auth-config |
N/A | HTTP 基本认证配置文件。 |
--web.listen-address |
127.0.0.1:9452 |
用于公开度量标准和 Web 界面的地址。 |
--web.telemetry-路径 |
/metrics |
公开度量标准的路径。 |
环境变量
变量 | 等效参数 |
---|---|
OUTPUT_FILE_PATH |
output.file-路径 |
WEB_AUTH_CONFIG |
web.auth-config |
WEB_LISTEN_ADDRESS |
web.listen-address |
WEB_TELEMETRY_PATH |
web.telemetry-路径 |
HTTP Basic Authentication
当库使用 auth
功能编译时,可提供 HTTP Basic Authentication。此功能默认启用。
配置文件格式与在 exporter-toolkit
中指定的格式相同。
---
basic_auth_users:
username: 'bcrypt hashed secret'
another_user: 'bcrypt hashed secret'
如果没有指定配置,或者配置已指定但不包含用户,则将禁用身份验证。
在加载配置时,用户名将根据 RFC7617 进行检查。如果检测到任何无效用户名,jail_exporter
将会出错并拒绝启动。
用户密码是 bcrypt 加密密钥,可以使用 bcrypt
子命令生成,如果 jail_exporter
是通过带有 bcrypt_cmd
功能(默认启用)编译的。
# Generate a password by specifying it on the CLI
$ jail_exporter bcrypt foobar
Hash: $2b$12$kSOSps7NIQaEQi2CXb.Ll.qYQZ3pCK7NDWKUH7QvHzprUyLHL6tsq
# Generate a password via an interactive prompt
# The password will be prompted for and then confirmed
$ jail_exporter bcrypt
Password: [hidden]
Hash: $2b$12$/5ghhZFShmhrq5W4tE1hnubk/xgGH0MmixxQeKwSGx0g7kjDFL2hq
# Generate a random password
# The random plaintext password will also be output.
$ jail_exporter bcrypt --random
Password: TiFRz4rg6JHdRunnIFm2aB3uNa0OnlU7
Hash: $2b$12$dyK2iA1Yq1ToA9AWtjg96exmvLABj05DuB1V5a4haUOZvu2.Hvbo2
密码加密的成本可以通过 --cost
参数来控制,默认值为 12
。这个默认值来自 bcrypt crate,应该根据将要运行加密的计算机进行调整,因为这个成本将在每次进行身份验证时支付。
运行
导出器需要以 root
权限运行,以便拥有足够的权限执行 rctl_get_racct(2)
调用。如果不是以 root
运行,它将报错并退出。
由于导出器生命周期内可能存在和消失的jail,因此导出器导出的时间序列也会如此。如果您希望对已消失的jail的资源使用情况进行会计,您可能希望使用 Prometheus 记录规则 来跟踪所有jail的总资源使用情况。
导出器可以通过两种不同的方式运行。默认方式是运行一个持久的网络守护进程供 Prometheus 抓取。导出器不会将自己守护起来,相反,建议使用像 daemon(8)
这样的工具。请参阅包含的 rc.d/jail_exporter.in
的示例。
第二种方式是将抓取的指标输出到文本文件。这种模式旨在与 node_exporter
Textfile Collector 配对。
目前还没有可用的端口,但很快就会有。
公开指标
此导出器是在 FreeBSD 11.1 下开发的,目前导出所有在 rctl(8)
的 RESOURCES
部分中列出的资源。
时间序列 id
和 num
是基于其他信息计算的,并非直接来自 rctl(8)
。指标名称根据 Prometheus 的最佳实践添加了适当的单位,基于 指标和标签命名。
所有导出的指标都以前缀 jail
开头,并有一个 name
标签表示jail的名称。因此,期望jail名称是唯一的。
指标描述在适用的情况下取自 rctl(8)
手册页。
rctl(8)
指标
指标 | rctl(8) 名称 |
描述 |
---|---|---|
coredumpsize_bytes |
coredumpsize |
核心转储大小,以字节为单位 |
cputime_seconds_total |
cputime |
CPU 时间,以秒为单位 |
datasize_bytes |
datasize |
数据大小,以字节为单位 |
maxproc |
maxproc |
进程数量 |
memorylocked_bytes |
memorylocked |
锁定内存,以字节为单位 |
memoryuse_bytes |
memoryuse |
常驻集大小,以字节为单位 |
msgqqueued |
msgqqueued |
队列的 SysV 消息数量 |
msgqsize_bytes |
msgqsize |
SysV 消息队列大小,以字节为单位 |
nmsgq |
nmsgq |
SysV 消息队列数量 |
nsem |
nsem |
SysV 信号量数量 |
nsemop |
nsemop |
单个 semop(2) 调用中修改的 SysV 信号量数量 |
nshm |
nshm |
SysV 共享内存段数量 |
nthr |
nthr |
线程数量 |
openfiles |
openfiles |
文件描述符表大小 |
pcpu_used |
pcpu |
%CPU,以单个 CPU 核心的百分比表示 |
pseudoterminals |
pseudoterminals |
PTY 数量 |
readbps |
readbps |
每秒文件系统读取,以字节为单位 |
readiops |
readiops |
每秒文件系统读取,以操作为单位 |
shmsize_bytes |
shmsize |
SysV 共享内存大小,以字节为单位 |
stacksize_bytes |
stacksize |
堆栈大小,以字节为单位 |
swapuse_bytes |
swapuse |
可能保留或使用的交换空间,以字节为单位 |
vmemoryuse_bytes |
vmemoryuse |
地址空间限制,以字节为单位 |
wallclock_seconds_total |
wallclock |
墙钟时间,以秒为单位 |
writebps |
writebps |
每秒文件系统写入,以字节为单位 |
writeiops |
writeiops |
每秒文件系统写入,以操作为单位 |
非 rctl(8)
指标
指标 | 描述 |
---|---|
exporter_build_info |
用于构建导出器的 Rust 版本以及导出器的版本。 |
id |
命名监狱的 ID |
num |
当前运行监狱的数量 |
crate 功能
功能 | 默认值 | 描述 |
---|---|---|
auth |
true |
启用 HTTP Basic 认证 |
bcrypt_cmd |
true |
启用 bcrypt 子命令以帮助对 HTTP Basic 认证的密码进行散列 |
rc_script |
true |
启用 --rc-script CLI 标志将 rc(8) 脚本输出到 stdout |
备注
rc_script
功能默认启用,以便通过 cargo install
安装的用户受益。在 FreeBSD 端口默认禁用,因为 rc(8)
脚本已包含在端口树中。
依赖关系
~14-26MB
~405K SLoC