【问题标题】:How to get MinIO metrics (/minio/v2/metrics/cluster)?如何获取 MinIO 指标(/minio/v2/metrics/cluster)?
【发布时间】:2021-06-09 12:16:47
【问题描述】:

基于第 14 页的 MinIO documentation,以下 API 提到了 /minio/v2/metrics/cluster/minio/v2/metrics/node
但看起来这些 API 仅适用于“Prometheus”。而且我不知道让那些使用python的人。

当然,如果我尝试向http://<host>:<port>/minio/v2/metrics/cluster 发送请求,我会收到 403 错误:

<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AllAccessDisabled</Code><Message>All access to this bucket has been disabled.</Message><Resource>/minio/v2/metrics/cluster</Resource><RequestId></RequestId><HostId><uuid-here></HostId></Error>

我尝试生成预签名 URL(例如从存储桶获取对象),但即使签名结果与上述相同。

也许有人知道要访问该 API?
以及如何在没有“Prometheus”的情况下对这些端点进行正确的身份验证?

【问题讨论】:

    标签: python boto3 minio


    【解决方案1】:

    Prometheus 只请求一个 HTTP 资源,该资源以纯文本格式显示指标。您可以获取 prometheus 将使用的相同 URL,然后自己解析它。

    如果您查看this document,它描述了如何为指标端点配置身份验证。

    1. 为 Prometheus 指标配置身份验证类型

    MinIO 支持 Prometheus 的两种身份验证模式,jwt 或 public,默认情况下 MinIO 以 jwt 模式运行。允许公众访问 没有普罗米修斯指标的身份验证将环境设置为 跟随。

    export MINIO_PROMETHEUS_AUTH_TYPE="public" minio server ~/test
    

    如果您在jwt 模式(默认)下运行它,则以下 部分告诉您如何生成将向您展示的配置 用于身份验证的适当不记名令牌:

    3.1 认证的 Prometheus 配置

    如果 MinIO 配置为无需身份验证即可公开指标,您 不需要使用 mc 来生成 prometheus 配置。你可以跳过 进一步阅读并移至 3.2 部分。

    MinIO 中的 Prometheus 端点默认需要身份验证。 Prometheus 支持不记名令牌方法进行身份验证 prometheus 抓取请求,覆盖默认的 Prometheus 配置 使用 mc 生成的。生成 Prometheus 配置 别名,使用 mc 如下 mc admin prometheus generate .

    该命令将生成文件的 scrape_configs 部分 prometheus.yml 如下:

    scrape_configs:
    - job_name: minio-job
      bearer_token: <secret>
      metrics_path: /minio/v2/metrics/cluster
      scheme: http
      static_configs:
      - targets: ['localhost:9000']
    

    您可以只使用该配置中的不记名令牌和路径 访问您的指标。不记名令牌应该进入 Authorization 标头 (Authorization: Bearer &lt;token&gt;)。

    【讨论】:

    • 是的,但诀窍是:我也没有 Prometheus mc(MinIO Client) 实用程序。这就是为什么我想用 python 生成/检索 Bearer 令牌。
    • 你不需要普罗米修斯。为什么不抓取 minio 客户端生成不记名令牌?
    • 我找到了在没有“minio 客户端”(但基于其代码)的情况下生成此不记名令牌的方法 :) 回答问题“为什么不抓住 minio 客户端” - 运行它将运行的环境将无法安装其他软件包。
    【解决方案2】:

    解决方案:

    import jwt  # pyJWT
    import requests
    import datetime
    
    expired_at = (datetime.datetime.now() + datetime.timedelta(days=1)).timestamp()
    
    token = jwt.encode(
        payload={
            "exp": expired_at,
            "sub": "<AccessKey>",
            "iss": "prometheus",
        },
        key="<SecretKey>",
        algorithm="HS512"
    )
    
    headers = {
        "Authorization": f"Bearer {token.decode()}"
    }
    response = requests.get(
        url="<schema>://<host>:<port>/minio/prometheus/metrics",
        headers=headers
    )
    

    mc 实用程序如何生成我在 https://github.com/minio/mc/blob/master/cmd/admin-prometheus-generate.go 找到的不记名令牌

    在调用实用程序 mc admin prometheus generate test-minio 期间发现 URL /minio/prometheus/metrics

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多