#prometheus-metrics #memcached #prometheus #key #user #rules #pattern

bin+lib mkey_exporter

以 Prometheus 指标的形式导出符合正则表达式的 Memcached 键的数量和大小

2 个版本

0.1.2 2023 年 10 月 11 日
0.1.1 2023 年 9 月 21 日
0.1.0 2023 年 9 月 21 日

#12 in #memcached

GPL-3.0+

38KB
529

mkey_exporter

build status docs.rs crates.io

以 Prometheus 指标的形式导出符合正则表达式的 Memcached 键的数量和大小。

例如,对于以下 Memcached 键

thing-1:user-1:something
thing-1:user-1:something-different
thing-1:user-2:something
thing-1:user-3:something
thing-2:user-1:something
thing-2:user-1:something-else

以及 YAML 配置

name: demo
rules:
- pattern: '^(\w+):'
  label_name: 'thing'
  label_value: '$1'
- pattern: '^\w+:([\w\-]+):'
  label_name: 'user'
  label_value: '$1'

以下 Prometheus 指标将被导出

mkey_memcached_counts{user="user-1",thing="thing-1"} 2
mkey_memcached_counts{user="user-2",thing="thing-1"} 1
mkey_memcached_counts{user="user-3",thing="thing-1"} 1
mkey_memcached_counts{user="user-1",thing="thing-2"} 2

mkey_memcached_sizes{user="user-1",thing="thing-1"} 242
mkey_memcached_sizes{user="user-2",thing="thing-1"} 56
mkey_memcached_sizes{user="user-3",thing="thing-1"} 23
mkey_memcached_sizes{user="user-1",thing="thing-2"} 127

使用这些指标,您可以根据衡量您应用程序有意义的内容的规则来确定您的 Memcached 集群正在缓存什么。

功能

  • 导出 Memcached 集群中缓存条目的数量和大小。
  • 根据强大的 正则表达式 从键中提取 Prometheus 标签。
  • 易于理解的 YAML 配置格式。
  • 支持 TLS Memcached 连接。

安装

以下列出了安装 mkey_exporter 的多种方法。

二进制文件

为 GNU/Linux (x86_64)、Windows (x86_64) 和 MacOS (x86_64 和 aarch64) 发布了二进制文件,每个版本都有一个 版本

Docker

为 GNU/Linux (x86_64、arm64) 发布了 Docker 图像,每个版本都有一个 版本

Cargo

mkey_exporter 及其依赖项可以通过 Rust cargo 工具从源代码下载和构建。请注意,这需要您已安装 Rust 工具链。

安装

cargo install mkey_exporter

作为完全静态的二进制文件安装(仅限 Linux)

cargo install --target x86_64-unknown-linux-musl mkey_exporter 

卸载

cargo uninstall mkey_exporter

源代码

mkey_exporter 及其依赖项可以使用 Rust cargo 工具从 Github 上的最新源代码构建。请注意,这需要您已安装 Git 和 Rust 工具链。

获取源代码

git clone https://github.com/56quarters/mkey_exporter.git && cd mkey_exporter

从本地源安装

cargo install --path .

从本地源安装完全静态的二进制文件(仅限 Linux)

cargo install --path . --target x86_64-unknown-linux-musl

卸载

cargo uninstall mkey_exporter

用法

以下给出了运行和配置 mkey_exporter 的示例。

运行

mkey_exporter 有一个必需的参数:YAML 配置文件的路径。以下列出了使用各种选项调用 mkey_exporter 的示例。在每个示例中,config.yaml 是一个有效的 YAML 配置文件。示例配置文件列在 Config 部分,或者在该 仓库 中有一个示例。

您可以通过运行 mkey_exporter --help 来查找有关所有支持选项的信息。

连接到本地服务器

mkey_exporter config.yaml

连接到远程服务器

mkey_exporter --host cache01.example.com config.yaml

通过 TLS 连接到远程服务器

mkey_exporter --host cache01.example.com:11211 --tls-enabled --tls-ca memcached-ca-cert.pem --tls-cert memcached-client-cert.pem --tls-key memcached-client-key.pem config.yaml 

启用调试日志和更快的刷新间隔

mkey_exporter --log-level debug --refresh-secs 30 config.yaml

配置

mkey_exporter 使用您定义的规则,根据 Prometheus 标签对 Memcached 键进行分桶。规则解析 Memcached 键的部分内容,并将其转换为 Prometheus 标签名称和值。以下给出了一些示例配置以及生成的 Prometheus 指标。

mkey_exporter 配置文件中的每个规则都会从 Memcached 键解析特定 Prometheus 标签的值。规则按顺序评估。为特定标签名称设置值的第一个规则“胜出”,其他设置该标签名称的规则将不会为 Memcached 键评估。

配置格式如下

name: example                  # Name of this configuration, used for diagnostics.
rules:                         # Array of rules to apply, in order, for each Memcached key.
- pattern: '^(\w+):'           # Regular expression to apply to the Memcached key.
  label_name: 'store'          # Name of the label to emit, this may NOT contain regular expression captures.
  label_value: '$1'            # Value of the label to emit, this MAY contain regular expression captures.
- pattern: '^\w+:([\w\-]+):'   # You may include as many rules as you want, they will be evaluated in order
  label_name: 'user'           # for every Memcached key.
  label_value: '$1'

示例

以下示例中,为了简洁起见,仅显示了 mkey_memcached_counts 指标。


此配置根据 Memcached 键为指标设置两个标签。

user-profile:user-1:backup
user-profile:user-1:latest
user-profile:user-2:latest
user-profile:user-3:latest
user-cart:user-1:latest

规则

name: example
rules:
- pattern: '^(\w+):'
  label_name: 'store'
  label_value: '$1'
- pattern: '^\w+:([\w\-]+):'
  label_name: 'user'
  label_value: '$1'

指标

mkey_memcached_counts{user="user-1",store="user-profile"} 2
mkey_memcached_counts{user="user-2",store="user-profile"} 1
mkey_memcached_counts{user="user-3",store="user-profile"} 1
mkey_memcached_counts{user="user-1",store="user-cart"} 1

此配置使用多个规则为“store”标签设置值,根据 Memcached 键为指标设置两个标签。

up:user-1:backup
up:user-1:latest
up:user-2:latest
up:user-3:latest
uc:user-1:latest
uu:user-1:latest

规则

name: example
rules:
- pattern: '^up:'
  label_name: 'store'
  label_value: 'user-profile'
- pattern: '^uc:'
  label_name: 'store'
  label_value: 'user-cart'
- pattern: '^\w+:'
  label_name: 'store'
  label_value: 'unknown'
- pattern: '^\w+:([\w\-]+):'
  label_name: 'user'
  label_value: '$1'

指标

mkey_memcached_counts{user="user-1",store="user-profile"} 2
mkey_memcached_counts{user="user-2",store="user-profile"} 1
mkey_memcached_counts{user="user-3",store="user-profile"} 1
mkey_memcached_counts{user="user-1",store="user-cart"} 1
mkey_memcached_counts{user="user-1",store="unknown"} 1

限制

每次评估循环中,mkey_exporter 都会从 Memcached 服务器获取键的完整列表。这意味着每次更新所需的时间将根据服务器中键的数量而增加。我在运行在 mkey_exporter 进程所在服务器的本地服务器上测试了最多 350 万个键,并得到了不错的结果(大约 5 秒的更新时间)。

许可证

mkey_exporter 在 GPL,版本 3 的条款下提供。

贡献

您有意提交给作品以供包含的任何贡献应按照上述方式授权,不附加任何额外条款或条件。

依赖关系

~22–36MB
~666K SLoC