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日

#162Unix API

每月 21 次下载

MIT 许可证

100KB
2K SLoC

Jail Exporter

Build Status

描述

Jail Exporter 是一个 Prometheus 导出器,用于导出由 FreeBSD 监狱的度量信息,这些信息由 rctl(8) 报告。

导出器是用 Rust 编写的,并使用 jailrctl 包来发现监狱并获得度量。

安装

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 部分中列出的资源。

时间序列 idnum 是基于其他信息计算的,并非直接来自 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