Grafana Mimirtool
Mimirtool 是一个命令行工具,运维人员和租户可以使用它来执行涉及 Grafana Mimir 或 Grafana Cloud Metrics 的一些常见任务。
alertmanager
命令使您能够在 Grafana Mimir Alertmanager 或 Grafana Cloud Metrics 中创建、更新和删除租户配置。有关
alertmanager
命令的更多信息,请参阅Alertmanager。rules
命令使您能够验证和 Lint Prometheus 规则文件,并将它们转换为 Grafana Mimir 中使用。您还可以在 Grafana Mimir 或 Grafana Cloud Metrics 中创建、更新和删除规则组。有关
rules
命令的更多信息,请参阅Rules。remote-read
子命令使您能够从 remote-read API 获取统计信息和系列。您可以将 remote-read API 的系列数据写入本地 TSDB 文件,然后将其加载到 Prometheus 中。有关 remote-read 命令的更多信息,请参阅Remote-read。
analyze
命令从 Grafana 或 Hosted Grafana 实例提取指标使用情况的统计信息。您还可以从 Grafana dashboard JSON 文件或 Prometheus 规则 YAML 文件中提取相同的指标。有关
analyze
命令的更多信息,请参阅Analyze。bucket-validation
命令验证对象存储 bucket 是否适合作为 Grafana Mimir 的后端存储。有关
bucket-validation
命令的更多信息,请参阅Bucket validation。acl
命令生成在 Grafana Enterprise Metrics 和 Grafana Cloud Metrics 中使用的基于标签的访问控制头部。有关
acl
命令的更多信息,请参阅ACL。config
命令帮助将配置文从 Cortex 转换为 Grafana Mimir。有关
config
命令的更多信息,请参阅Configbackfill
命令将现有 Prometheus TSDB blocks 上传到 Grafana Mimir。有关
backfill
命令的更多信息,请参阅Backfill
Mimirtool 与以下项交互
- Grafana Mimir 提供的面向用户的 API。
- 包含 Grafana Mimir 数据的后端存储组件。
安装
要在 macOS 上使用 Homebrew 安装 Mimirtool,请运行 brew install mimirtool
。
要在其他环境中安装 Mimirtool,请从最新发布页下载适用于您的操作系统和架构的相应二进制文件,并使其可执行。
或者,使用命令行工具(如 curl
)下载 mimirtool
。例如,对于 AMD64 架构的 Linux,使用以下命令:
curl -fLo mimirtool https://github.com/grafana/mimir/releases/latest/download/mimirtool-linux-amd64
chmod +x mimirtool
配置选项
为了让 Mimirtool 与 Grafana Mimir、Grafana Enterprise Metrics、Prometheus 或 Grafana 交互,请设置以下环境变量或 CLI 标志。
环境变量 | 标志 | 描述 |
---|---|---|
MIMIR_ADDRESS | --address | 设置 Grafana Mimir 集群 API 的地址。 |
MIMIR_API_USER | --user | 设置基本认证用户名。如果此变量为空且 MIMIR_API_KEY 已设置,系统将改为使用 MIMIR_TENANT_ID 。如果您使用的是 Grafana Cloud,此变量是您的实例 ID。 |
MIMIR_API_KEY | --key | 设置基本认证密码。如果您使用的是 Grafana Cloud,此变量是您的 API 密钥。 |
MIMIR_TENANT_ID | --id | 设置 Mimirtool 交互的 Grafana Mimir 实例的租户 ID。 |
MIMIR_EXTRA_HEADERS | --extra-headers | 以 header=value 格式添加到请求中的额外头部。您可以多次指定此标志。环境变量值必须使用换行符分隔。 |
还可以使用以下环境变量或 CLI 标志设置 TLS 相关选项
环境变量 | 标志 | 描述 |
---|---|---|
MIMIR_TLS_CA_PATH | --tls-ca-path | 设置用于验证与 Grafana Mimir 集群连接的 CA 证书路径。 |
MIMIR_TLS_CERT_PATH | --tls-cert-path | 设置用于向 Grafana Mimir 集群进行认证的客户端证书路径。 |
MIMIR_TLS_KEY_PATH | --tls-key-path | 设置用于向 Grafana Mimir 集群进行认证的私钥路径。 |
MIMIR_TLS_INSECURE_SKIP_VERIFY | --tls-insecure-skip-verify | 如果为 true ,则禁用对 Grafana Mimir 集群 TLS 证书的验证。这是不安全的,不建议使用。 |
命令
以下部分概述了可以针对 Grafana Mimir 和 Grafana Cloud Metrics 运行的命令。
Alertmanager
以下命令与 Grafana Mimir Alertmanager 配置和告警模板文件交互。
注意
Mimir Alertmanager 基于您通过
-server.path-prefix
标志设置的路径公开配置 API;它不使用-http.alertmanager-http-prefix
标志的路径。如果您使用默认配置(即
-server.path-prefix
默认值为/
)运行 Mimir,则只需为mimirtool
命令的--address
标志设置主机名即可;不要设置特定路径的地址。例如,
/
是正确的,而/alertmanager
是不正确的。
获取 Alertmanager 配置
以下命令显示当前的 Alertmanager 配置。
mimirtool alertmanager get
或者,您可以将配置和模板文件输出到一个文件夹中,以便稍后将其重新加载到 Alertmanager 中。例如,以下命令将文件输出到名为 am
的文件夹中:
mimirtool alertmanager get --output-dir="am"
配置文件命名为 config.yaml
,模板文件以 .tpl
结尾,每个模板都写入到单独的文件中。请注意,使用 --output-dir
标志只会将输出写入文件,而不再将配置打印到控制台。
加载 Alertmanager 配置
以下命令将 Alertmanager 配置加载到 Alertmanager 实例中。
mimirtool alertmanager load <config_file>
mimirtool alertmanager load <config_file> <template_files>...
示例
mimirtool alertmanager load ./example_alertmanager_config.yaml ./example_alertmanager_template.tpl
./example_alertmanager_config.yaml
:
route:
receiver: "example_receiver"
group_by: ["example_groupby"]
receivers:
- name: "example_receiver"
templates:
- example_template.tpl
./example_alertmanager_template.tpl
:
{{ define "alert_customer_env_message" }}
[{{ .CommonLabels.alertname }} | {{ .CommonLabels.customer }} | {{ .CommonLabels.environment }}]
{{ end }}
[<template_files>...]
的输入接受通配符,例如 *.tpl
将包含所有以 .tpl
结尾的模板文件。如果我们已经使用先前的命令将配置和模板导出到目录,则可以加载它们:
# assuming we have written the files out to the folder am
# mimirtool alertmanager get --output-dir="am"
mimirtool alertmanager load am/config.yaml am/*.tpl
删除 Alertmanager 配置
以下命令删除 Grafana Mimir Alertmanager 中的 Alertmanager 配置。
mimirtool alertmanager delete
为 Mimir 2.12 及更高版本迁移 Alertmanager 配置以支持 UTF-8
这需要 mimirtool 2.12 或更高版本。要检查您的 mimirtool 版本,请运行 mimirtool version
。
根据 prometheus/prometheus#13095 和 prometheus/alertmanager#3486 的规定,Mimir 正在添加对 UTF-8 的支持。为了在告警、路由、静默和抑制规则中支持 UTF-8,Alertmanager 添加了一个新的匹配器解析器,其中包含许多向后不兼容的更改。有关这些更改的更多信息,请参阅此处。
migrate-utf8 命令迁移现有 Alertmanager 配置,为在 Mimir 安装中启用 UTF-8 做准备。为此,它将与 UTF-8 不兼容的匹配器转换为兼容的等效匹配器。此转换是向后兼容的,不会更改现有匹配器的行为,并且即使在未启用 UTF-8 的 Mimir 安装中也能工作。
是否需要迁移 Alertmanager 配置取决于它是否包含与 UTF-8 不兼容的匹配器。您可以通过运行 verify 命令来验证现有 Alertmanager 配置是否需要为 UTF-8 进行迁移:
mimirtool alertmanager verify <config_file> [template_files...]
如果命令成功且没有任何警告,则配置与 UTF-8 兼容,您无需进行迁移。
但是,如果命令打印以下警告,则需要使用 migrate-utf8 命令迁移 Alertmanager 配置。
Alertmanager is moving to a new parser for labels and matchers, and this input is incompatible. Alertmanager has instead parsed the input using the classic matchers parser as a fallback. To make this input compatible with the UTF-8 matchers parser please make sure all regular expressions and values are double-quoted. If you are still seeing this message please open an issue.
该命令接受现有配置和模板文件作为输入,并输出迁移后的配置和模板文件:
mimirtool alertmanager migrate-utf8 <config_file> [template_files...]
您还可以将迁移后的配置和模板文件输出到一个文件夹中,以便稍后将其重新加载到 Alertmanager 中之前进行审查。建议您将迁移后的文件输出到与原始文件不同的文件夹中,以便您始终保留原始文件作为备份。例如,以下命令将迁移后的配置和模板文件输出到名为 migrated
的文件夹中:
mimirtool alertmanager migrate-utf8 <config_file> [template_files...] --output-dir="migrated"
在输出目录中,配置文件命名为 config.yaml
,模板文件以 .tpl
结尾,每个模板都写入到单独的文件中。
注意
当您使用
--output-dir
标志时,命令只将输出写入文件,而不会将配置打印到控制台。
迁移 Alertmanager 配置后,使用 verify 命令进行验证:
mimirtool alertmanager verify <config_file> [template_files...]
它应该成功且没有警告。
您还可以使用 --utf8-strict-mode
标志运行 verify 命令,以验证 Alertmanager 配置是否与 UTF-8 兼容:
mimirtool alertmanager verify <config_file> [template_files...] --utf8-strict-mode
使用此标志时,verify 命令会打印一个带有文本 UTF-8 mode enabled
的警告,以告知您该命令正在使用 UTF-8 严格模式验证 Alertmanager 配置。与省略该标志不同,如果配置与 UTF-8 不兼容,它不会打印警告。相反,命令将以错误退出。例如:
level=warn msg="UTF-8 strict mode enabled"
mimirtool: error: end of input: expected label value, try --help
如果命令成功退出且没有错误,并且您对迁移后的配置和模板文件所做的更改感到满意,则可以使用 load
命令重新加载它。
验证 Alertmanager 配置
以下命令验证 Alertmanager 配置文件。它不会将配置加载到 Alertmanager 实例中。
mimirtool alertmanager verify <config_file> [template_files...]
告警验证
以下命令验证 Alertmanager 集群中的告警是否去重。此命令对于在从 Prometheus 迁移到 Grafana Mimir 告警评估时验证正确配置非常有用。
mimirtool alerts verify
渲染模板
您可以使用 render
命令渲染您的 Alertmanager 模板。
--template.glob
选项的参数是一个 glob 模式,它展开到告警模板路径。
--template.data
选项的参数是一个包含 Alertmanager 模板数据的 JSON 文件。
--template.text
选项的参数是一个 Go 模板。命令将使用通过展开 --template-glob
找到的模板来渲染此模板。
以下命令渲染模板并将其打印到终端。它假设您已将模板写入 templates
目录。
mimirtool alertmanager render --template.glob 'templates/*' --template.data alert_data1.json --template.text '{{ template "my_message" . }}'
规则
rules 命令包含用于处理 Prometheus 规则文件以及 Grafana Mimir ruler 中 API 的子命令。
本节中的命令使您能够执行以下操作:
- 加载和显示 Prometheus 规则文件
- 与 Mimir ruler 中的单个规则组交互
- 操作本地规则文件
mimirtool rules
提供的一些功能也可以作为 GitHub Action 使用。有关更多信息,请参阅 Mimirtool Github Action 的文档。
与 rules 命令相关的配置选项
标志 | 描述 |
---|---|
--auth-token | Bearer token 或 JWT 认证的认证 token。 |
列出规则
以下命令检索 Grafana Mimir 实例中所有规则组的名称并将其打印到终端。
mimirtool rules list
打印规则
以下命令检索 Grafana Mimir 实例中的所有规则组并将其打印到终端。
mimirtool rules print
要保存所有规则以便编辑和重新上传到 Mimir,请使用 --output-dir
选项。默认输出目录是当前目录。输出文件的格式符合 mimirtool rules load
或 mimirtool rules sync
的要求。
例如,要将文件保存在 rules
子目录中:
mimirtool rules print --output-dir=rules
获取规则组
以下命令检索单个规则组并将其打印到终端。
mimirtool rules get <namespace> <rule_group_name>
要保存规则组以便编辑和重新上传到 Mimir,请使用 --output-dir
选项。默认输出目录是当前目录。输出文件的格式符合 mimirtool rules load
或 mimirtool rules sync
的要求。
例如,要将文件保存在 rules
子目录中:
mimirtool rules get <namespace> <rule_group_name> --output-dir=rules
删除规则组
以下命令删除一个规则组。
mimirtool rules delete <namespace> <rule_group_name>
加载规则组
以下命令将文件中的每个规则组加载到 Grafana Mimir 中。此命令会覆盖所有同名规则组。
mimirtool rules load <file_path>...
示例
mimirtool rules load ./example_rules_one.yaml
./example_rules_one.yaml
:
namespace: my_namespace
groups:
- name: example
interval: 5m
rules:
- record: job:http_inprogress_requests:sum
expr: sum by (job) (http_inprogress_requests)
此命令与其它 rules
子命令一样,可以一次加载多个规则组:
mimirtool rules load ./example_rules_one.yaml ./example_rules_two.yaml
删除命名空间
以下命令删除命名空间中的所有规则组,包括命名空间本身:
mimirtool rules delete-namespace <namespace>
Lint
lint
命令在规则文件中提供 YAML 和 PromQL 表达式格式化。
此命令会原地编辑规则文件。要执行不进行更改的试运行,可以使用 dry run 标志 (-n
)。
注意
此命令不验证查询是否正确,也不与您的 Grafana Mimir 集群交互。
mimirtool rules lint <file_path>...
文件的格式与rules load中所示的格式相同。
准备
此 prepare
命令准备要上传到 Grafana Mimir 的规则文件。它会 Lint 所有 PromQL 表达式,并在文件中的 PromQL 查询聚合中添加一个标签。文件的格式与rules load中所示的格式相同。
注意
此命令不与您的 Grafana Mimir 集群交互。
mimirtool rules prepare <file_path>...
配置
标志 | 描述 |
---|---|
-i , --in-place | 原地编辑文件。如果未设置,系统将生成一个带有扩展名 .result 的新文件,其中包含结果。 |
-l , --label="cluster" | 指定聚合的标签。默认情况下,标签设置为 cluster 。 |
--label-excluded-rule-groups | 逗号分隔的规则组名称列表,用于在聚合中包含配置的标签时排除。 |
--rule-dirs | 逗号分隔的包含规则 yaml 文件的目录路径列表。将解析目录中所有带有 .yml 或 .yaml 后缀的文件。 |
示例
mimirtool rules prepare ./example_rules_one.yaml
./example_rules_one.yaml
:
namespace: my_namespace
groups:
- name: example
interval: 5m
rules:
- record: job:http_inprogress_requests:sum
expr: sum by (job) (http_inprogress_requests)
./example_rules_one.yaml.result
:
namespace: my_namespace
groups:
- name: example
interval: 5m
rules:
- record: job:http_inprogress_requests:sum
# note the added cluster label
expr: sum by(job, cluster) (http_inprogress_requests)
命令运行后,输出消息会指示操作是否成功:
INFO[0000] SUCCESS: 1 rules found, 0 modified expressions
检查
check
命令根据 最佳实践 检查规则。此命令不与您的 Grafana Mimir 集群交互。
mimirtool rules check <file_path>...
示例
mimirtool rules check rules.yaml
rules.yaml
namespace: my_namespace
groups:
- name: example
interval: 5m
rules:
- record: job_http_inprogress_requests_sum
expr: sum by (job) (http_inprogress_requests)
ERRO[0000] bad recording rule name error="recording rule name does not match level:metric:operation format, must contain at least one colon" file=rules.yaml rule=job_http_inprogress_requests_sum ruleGroup=example
文件的格式与rules load中所示的格式相同。
差异对比
以下命令将本地规则与 Grafana Mimir 集群中的规则进行比较。
mimirtool rules diff <file_path>...
文件的格式与rules load中所示的格式相同。
要限制受影响的命名空间,请使用 --namespaces
和 --ignore-namespaces
参数,以及它们的 RegEx 变体 --namespaces-regex
和 --ignore-namespaces-regex
。
配置
标志 | 描述 |
---|---|
--namespaces | 差异对比期间要检查的命名空间逗号分隔列表 |
--ignored-namespaces | 差异对比期间要忽略的命名空间逗号分隔列表 |
--namespaces-regex | 差异对比期间匹配命名空间的正则表达式 |
--ignored-namespaces-regex | 差异对比期间忽略的命名空间正则表达式 |
只能指定一个命名空间选择标志。
同步
sync
命令将本地规则与 Grafana Mimir 集群中的规则进行比较。该命令将任何差异应用到您的 Grafana Mimir 集群。
mimirtool rules sync <file_path>...
文件的格式与rules load中所示的格式相同。
配置
标志 | 描述 |
---|---|
--namespaces | 同步期间要检查的命名空间逗号分隔列表 |
--ignored-namespaces | 同步期间要忽略的命名空间逗号分隔列表 |
--namespaces-regex | 同步期间匹配命名空间的正则表达式 |
--ignored-namespaces-regex | 同步期间忽略的命名空间正则表达式 |
只能指定一个命名空间选择标志。
Remote-read
Grafana Mimir 公开了一个 remote read API,它允许系统访问存储的系列。mimirtool
的 remote-read
子命令使您能够与该 API 交互,并确定存储了哪些系列。
Stats
remote-read stats
命令总结了匹配选择器的存储系列的统计信息。
示例
mimirtool remote-read stats --selector '{job="node"}' --address http://demo.robustperception.io:9090 --remote-read-path /api/v1/read
运行命令会产生以下输出:
INFO[0000] Create remote read client using endpoint 'http://demo.robustperception.io:9090/api/v1/read'
INFO[0000] Querying time from=2020-12-30T14:00:00Z to=2020-12-30T15:00:00Z with selector={job="node"}
INFO[0000] MIN TIME MAX TIME DURATION NUM SAMPLES NUM SERIES NUM STALE NAN VALUES NUM NAN VALUES
INFO[0000] 2020-12-30 14:00:00.629 +0000 UTC 2020-12-30 14:59:59.629 +0000 UTC 59m59s 159480 425 0 0
Dump
remote-read dump
命令打印所有匹配选择器的系列和样本。
示例
mimirtool remote-read dump --selector 'up{job="node"}' --address http://demo.robustperception.io:9090 --remote-read-path /api/v1/read
运行命令会产生以下输出:
{__name__="up", instance="demo.robustperception.io:9100", job="node"} 1 1609336914711
{__name__="up", instance="demo.robustperception.io:9100", job="node"} NaN 1609336924709 # StaleNaN
...
Export
remote-read export
命令将所有匹配选择器的系列和样本导出到本地 TSDB。您可以使用本地工具(如 prometheus
和 promtool
)进一步分析 TSDB。
# Use Remote Read API to download all metrics with label job=name into local tsdb
mimirtool remote-read export --selector '{job="node"}' --address http://demo.robustperception.io:9090 --remote-read-path /api/v1/read --tsdb-path ./local-tsdb
运行命令会产生以下输出:
INFO[0000] Create remote read client using endpoint 'http://demo.robustperception.io:9090/api/v1/read'
INFO[0000] Created TSDB in path './local-tsdb'
INFO[0000] Using existing TSDB in path './local-tsdb'
INFO[0000] Querying time from=2020-12-30T13:53:59Z to=2020-12-30T14:53:59Z with selector={job="node"}
INFO[0001] Store TSDB blocks in './local-tsdb'
INFO[0001] BLOCK ULID MIN TIME MAX TIME DURATION NUM SAMPLES NUM CHUNKS NUM SERIES SIZE
INFO[0001] 01ETT28D6B8948J87NZXY8VYD9 2020-12-30 13:53:59 +0000 UTC 2020-12-30 13:59:59 +0000 UTC 6m0.001s 15950 429 425 105KiB867B
INFO[0001] 01ETT28D91Z9SVRYF3DY0KNV41 2020-12-30 14:00:00 +0000 UTC 2020-12-30 14:53:58 +0000 UTC 53m58.001s 143530 1325 425 509KiB679B
本地 TSDB 示例
以下命令使用 promtool 分析文件内容。
promtool tsdb analyze ./local-tsdb
以下命令转储 TSDB 的所有值。
promtool tsdb dump ./local-tsdb
以下命令使用本地 TSDB 运行本地 Prometheus。
prometheus --storage.tsdb.path ./local-tsdb --config.file=<(echo "")
ACL
acl
命令生成在 Grafana Enterprise Metrics 和 Grafana Cloud Metrics 中使用的基于标签的访问控制头部。
生成头部
以下命令使您能够生成一个头部,您可以使用它在 Grafana Enterprise Metrics 或 Grafana Cloud 中实施访问控制规则。
注意
Grafana Mimir 不支持 ACL。
mimirtool acl generate-header --id=<tenant_id> --rule=<promql_selector>
示例
mimirtool acl generate-header --id=1234 --rule='{namespace="A"}'
示例输出
The header to set:
X-Prom-Label-Policy: 1234:%7Bnamespace=%22A%22%7D
分析
您可以分析您的 Grafana 或 Hosted Grafana 实例,以确定使用了哪些指标以及导出了哪些指标。您还可以从仪表盘 JSON 文件和规则 YAML 文件中提取指标。
Grafana
以下命令针对您的 Grafana 实例运行,下载其仪表盘,并提取其中查询中使用的 Prometheus 指标。输出是一个 JSON 文件。您可以将此文件与 analyze prometheus --grafana-metrics-file
一起使用。
mimirtool analyze grafana --address=<url>
配置
环境变量 | 标志 | 描述 |
---|---|---|
GRAFANA_ADDRESS | --address | 设置 Grafana 实例的地址。. |
GRAFANA_API_KEY | --key | 设置 Grafana 实例的 API Key。要创建密钥,请参阅Authentication API。 |
- | --output | 设置输出文件路径,默认值为 metrics-in-grafana.json 。 |
- | --folder-title | 设置文件夹过滤器,以根据确切的文件夹标题限制对仪表盘的分析,用于查找未使用的指标。当重复出现时,将分析任何匹配的文件夹。 |
示例输出文件
{
"metricsUsed": [
"apiserver_request:availability30d",
"workqueue_depth",
"workqueue_queue_duration_seconds_bucket"
],
"dashboards": [
{
"slug": "",
"uid": "09ec8aa1e996d6ffcd6817bbaff4db1b",
"title": "Kubernetes / API server",
"metrics": [
"apiserver_request:availability30d",
"apiserver_request_total",
"cluster_quantile:apiserver_request_duration_seconds:histogram_quantile",
"workqueue_depth",
"workqueue_queue_duration_seconds_bucket"
],
"parse_errors": ["unsupported panel type: \"news\""]
}
]
}
Ruler
以下命令针对您的 Grafana Mimir、Grafana Enterprise Metrics 或 Grafana Cloud Prometheus 实例运行。该命令获取规则组并提取规则查询中使用的 Prometheus 指标。输出是一个 JSON 文件。您可以将此文件与 analyze prometheus --ruler-metrics-file
一起使用。
mimirtool analyze ruler --address=<url> --id=<tenant_id>
配置
环境变量 | 标志 | 描述 |
---|---|---|
MIMIR_ADDRESS | --address | 设置 Prometheus 实例的地址。 |
MIMIR_TENANT_ID | --id | 设置基本认证用户名。如果您使用的是 Grafana Cloud,此变量是您的实例 ID,也设置为租户 ID。 |
MIMIR_API_KEY | --key | 设置基本认证密码。如果您使用的是 Grafana Cloud,此变量是您的 API 密钥。 |
MIMIR_AUTH_TOKEN | --auth-token | 设置 Mimir 集群使用此方法认证所需的 bearer 或 JWT token。 |
- | --output | 设置输出文件路径,默认值为 metrics-in-ruler.json 。 |
示例输出文件
{
"metricsUsed": [
"apiserver_request_duration_seconds_bucket",
"container_cpu_usage_seconds_total",
"scheduler_scheduling_algorithm_duration_seconds_bucket"
],
"ruleGroups": [
{
"namspace": "prometheus_rules",
"name": "kube-apiserver.rules",
"metrics": [
"apiserver_request_duration_seconds_bucket",
"apiserver_request_duration_seconds_count",
"apiserver_request_total"
],
"parse_errors": null
}
]
}
仪表盘
以下命令接受 Grafana dashboard JSON 文件作为输入,并提取查询中使用的 Prometheus 指标。输出是一个 JSON 文件。您可以将输出文件与 analyze prometheus --grafana-metrics-file
一起使用。
mimirtool analyze dashboard <file>...
配置
环境变量 | 标志 | 描述 |
---|---|---|
- | --output | 设置输出文件路径,默认值为 metrics-in-grafana.json 。 |
规则文件
以下命令接受 Prometheus 规则 YAML 文件作为输入,并提取查询中使用的 Prometheus 指标。输出是一个 JSON 文件。您可以将输出文件与 analyze prometheus --ruler-metrics-file
一起使用。
mimirtool analyze rule-file <file>
配置
环境变量 | 标志 | 描述 |
---|---|---|
- | --output | 设置输出文件路径,默认值为 metrics-in-ruler.json 。 |
Prometheus
以下命令针对您的 Grafana Mimir、Grafana Metrics Enterprise、Prometheus 或 Cloud Prometheus 实例运行。该命令使用之前运行 analyze grafana
、analyze dashboard
、analyze ruler
或 analyze rule-file
的输出,显示 Prometheus 实例中在仪表盘或规则中(或两者中)使用的系列数量。此命令还显示 Grafana Cloud 中存在但未在仪表盘或规则中使用的指标。输出是一个 JSON 文件。
注意
该命令会为 Prometheus 实例中的每个活动系列发送一个请求。对于具有大量活动系列的 Prometheus 实例,此命令可能需要一些时间才能完成。
mimirtool analyze prometheus --address=<url> --id=<tenant_id>
配置
环境变量 | 标志 | 描述 |
---|---|---|
MIMIR_ADDRESS | --address | 设置 Prometheus 实例的地址。 |
MIMIR_TENANT_ID | --id | 设置基本认证用户名。如果您使用的是 Grafana Cloud,此变量是您的实例 ID,也设置为租户 ID。 |
MIMIR_API_KEY | --key | 设置基本认证密码。如果您使用的是 Grafana Cloud,此变量是您的 API 密钥。 |
MIMIR_AUTH_TOKEN | --auth-token | 设置 Mimir 集群使用此方法认证所需的 bearer 或 JWT token。 |
- | --grafana-metrics-file | mimirtool analyze grafana 或 mimirtool analyze dashboard 输出文件,默认值为 metrics-in-grafana.json 。 |
- | --ruler-metrics-file | mimirtool analyze ruler 或 mimirtool analyze rule-file 输出文件,默认值为 metrics-in-ruler.json 。 |
- | --output | 设置输出文件路径,默认值为 prometheus-metrics.json 。 |
- | --prometheus-http-prefix | 设置 Prometheus API 将在其下提供的 HTTP URL 路径。 |
示例输出
{
"total_active_series": 38184,
"in_use_active_series": 14047,
"additional_active_series": 24137,
"in_use_metric_counts": [
{
"metric": "apiserver_request_duration_seconds_bucket",
"count": 11400,
"job_counts": [
{
"job": "apiserver",
"count": 11400
}
]
},
{
"metric": "apiserver_request_total",
"count": 684,
"job_counts": [
{
"job": "apiserver",
"count": 684
}
]
}
],
"additional_metric_counts": [
{
"metric": "etcd_request_duration_seconds_bucket",
"count": 2688,
"job_counts": [
{
"job": "apiserver",
"count": 2688
}
]
}
]
}
Bucket 验证
以下命令验证对象存储 bucket 是否工作正常。
mimirtool bucket-validation
标志 | 描述 |
---|---|
--object-count | 设置创建和删除对象的数量。默认值为 2000。 |
--report-every | 设置打印操作进度报告的操作数量。默认值为 100。 |
--test-runs | 设置测试运行的次数。默认值为 1。 |
--prefix | 设置在对象存储中用于测试对象的路径前缀。 |
--retries-on-error | 设置在对象存储返回错误时重试的次数。 |
--bucket-config | 设置用于配置存储 bucket 的 CLI 参数。 |
--bucket-config-help | 显示解释如何使用 -bucket-config 参数的帮助文本。 |
Config
转换
config convert 命令将适用于 Cortex v1.10.0 及更高版本的配置参数转换为适用于 Grafana Mimir v2.0.0 的参数。它支持转换 CLI 标志和YAML 配置文件。
配置
标志 | 描述 |
---|---|
--yaml-file | 要转换的 YAML 配置文件。 |
--flags-file | 一个包含换行符分隔的 CLI 标志列表的文件,用于转换。 |
--yaml-out | 用于转换后的 YAML 配置的文件。如果未设置,则输出到 stdout 。 |
--flags-out | 用于转换后的 CLI 标志列表的文件。如果未设置,则输出到 stdout 。 |
--update-defaults | 如果您设置了此标志,并且将配置参数设置为 Mimir 2.0 中已更改的默认值,则该参数将更新为新的默认值。 |
--include-defaults | 如果您设置了此标志,所有默认值都将包含在输出 YAML 中,无论您是否在输入文件中显式设置了这些值。 |
-v , --verbose | 如果您设置了此标志,则旧配置中存在但新配置中不存在的 CLI 标志和 YAML 路径将打印到 stderr 。此标志还会打印旧配置和新配置之间已更改的默认值。 |
--gem | 如果您设置此标志,该工具将从 Grafana Metrics Enterprise (GEM) v1.7.x 转换为 v2.0.0。 |
默认值的变化
mimirtool config convert
帮助您从 Cortex 迁移到 Grafana Mimir。Mimir v2.0.0 中一些配置参数的默认值发生了变化,您可能不希望在迁移过程中使用这些变化:
参数 | Cortex/GEM 1.7 默认值 | Mimir/GEM 2.0 默认值 |
---|---|---|
blocks_storage.backend | s3 | filesystem |
ruler_storage.backend | s3 | filesystem |
alertmanager_storage.backend | s3 | filesystem |
server.http_listen_port | 80 | 8080 |
activity_tracker.filepath | ./active-query-tracker | ./metrics-activity.log |
alertmanager.data_dir | data/ | ./data-alertmanager/ |
blocks_storage.filesystem.dir | <空> | blocks |
compactor.data_dir | ./data | ./data-compactor/ |
ruler.rule_path | /rules | ./data-ruler/ |
ruler_storage.filesystem.dir | <空> | ruler |
(仅 GEM) auth.type | trust | enterprise |
(仅 GEM) graphite.querier.schemas.backend | s3 | filesystem |
对于这些参数,即使在输入配置中未显式设置配置参数,mimirtool config convert
也会输出 Cortex 的默认值。如果在输入配置中显式设置了 Cortex 的默认值,并且提供了 --update-defaults
标志,则 mimirtool config convert
不会将值更新为 Mimir 的默认值。
示例
以下示例显示了将 Cortex query-frontend YAML 配置文件和 CLI 标志转换为 Mimir 兼容的 YAML 和 CLI 标志的命令。
mimirtool config convert --yaml-file=cortex.yaml --flags-file=cortex.flags --yaml-out=mimir.yaml --flags-out=mimir.flags
cortex.yaml
输入文件
query_range:
results_cache:
cache:
memcached:
expiration: 10s # Expiration was removed in Grafana Mimir, so this parameter will be missing from the output YAML
batch_size: 2048
parallelism: 10
memcached_client:
max_idle_conns: 32
cortex.flags
输入文件
-frontend.background.write-back-concurrency=45
运行命令后,转换后的输出应为:
mimir.yaml
转换后的输出文件
frontend:
results_cache:
memcached:
max_get_multi_batch_size: 2048
max_get_multi_concurrency: 10
max_idle_connections: 32
server:
http_listen_port: 80
注意
作为预防措施,输出文件包含
server.http_listen_port
。Grafana Mimir 中的默认值从 80 更改为 8080。除非您在输入配置中明确设置了端口,否则该工具会输出原始默认值。
mimir.flags
转换后的输出文件
-query-frontend.results-cache.memcached.max-async-concurrency=45
详细输出
当您设置 --verbose
标志时,输出会解释哪些配置参数已被移除,以及哪些默认值已更改。详细输出会打印到 stderr
。
输出包含以下条目:
field is no longer supported: <yaml_path>
此参数在输入的 Cortex YAML 文件中使用过,但已从输出配置中移除。
flag is no longer supported: <flag_name>
此参数在输入的 Cortex CLI 标志文件中使用过,但该参数已在 Grafana Mimir 中移除。该工具已从输出配置中移除此 CLI 标志。
using a new default for <yaml_path>: <new_value> (used to be <old_value>)
Grafana Mimir 中配置参数的默认值发生了更改。输入配置文件中未明确设置此参数。当您使用
mimirtool config convert
的输出配置运行 Grafana Mimir 时,Grafana Mimir 将使用新的默认值。<yaml_path> 的默认值已更改:<new_value>(以前是 <old_value>);未更新
Grafana Mimir 中,输入配置文件中设置的配置参数的默认值已更改。该工具未将旧的默认值转换为新的默认值。要将默认值自动更新为新的默认值,请传递
--update-defaults
标志。
从 Jsonnet 中提取标志
使用 Grafana Mimir Jsonnet 库时,所有配置都使用设置为对象成员键值对的标志。要使用 mimirtool 执行转换,您首先需要从 Jsonnet 评估产生的 JSON 中提取标志。
使用以下 bash 脚本从特定组件中提取参数
#!/usr/bin/env bash
set -euf -o pipefail
function usage {
cat <<EOF
Extract the CLI flags from individual components.
Usage:
$0 <resources JSON> <component>
Examples:
$0 resources.json ingester
$0 <(tk eval environments/default) distributor
$0 <(jsonnet environments/default/main.jsonnet) query-frontend
EOF
}
if ! command -v jq &>/dev/null; then
echo "jq command not found in PATH"
echo "To download jq, refer to https://stedolan.github.io/jq/download/."
fi
if [[ $# -ne 2 ]]; then
usage
exit 1
fi
jq -rf /dev/stdin -- "$1" <<EOF
..
| if type == "object" and .metadata.name == "$2" then .spec.template.spec.containers[]?.args[] else null end
| select(. != null)
EOF
脚本的第一个参数是包含 Kubernetes 资源的 JSON 文件。脚本的第二个参数是容器的名称。
要从 Tanka 环境的分发器中检索参数
<PATH TO SCRIPT> <(tk eval environments/default) distributor
脚本输出的结果类似于以下内容
-consul.hostname=consul.cortex-to-mimir.svc.cluster.local:8500
-distributor.ha-tracker.enable=false
-distributor.ha-tracker.enable-for-all-users=true
-distributor.ha-tracker.etcd.endpoints=etcd-client.cortex-to-mimir.svc.cluster.local.:2379
-distributor.ha-tracker.prefix=prom_ha/
-distributor.ha-tracker.store=etcd
-distributor.health-check-ingesters=true
-distributor.ingestion-burst-size=200000
-distributor.ingestion-rate-limit=10000
-distributor.ingestion-rate-limit-strategy=global
-distributor.remote-timeout=20s
-distributor.replication-factor=3
-distributor.ring.consul.hostname=consul.cortex-to-mimir.svc.cluster.local:8500
-distributor.ring.prefix=
-distributor.shard-by-all-labels=true
-mem-ballast-size-bytes=1073741824
-ring.heartbeat-timeout=10m
-ring.prefix=
-runtime-config.file=/etc/cortex/overrides.yaml
-server.grpc.keepalive.max-connection-age=2m
-server.grpc.keepalive.max-connection-age-grace=5m
-server.grpc.keepalive.max-connection-idle=1m
-server.grpc.keepalive.min-time-between-pings=10s
-server.grpc.keepalive.ping-without-stream-allowed=true
-target=distributor
-validation.reject-old-samples=true
-validation.reject-old-samples.max-age=12h
使用脚本的输出作为输入来运行 mimirtool
配置转换。
转换后,您可以使用以下脚本将转换后的标志转换回 JSON
#!/usr/bin/env bash
set -euf -o pipefail
function usage {
cat <<EOF
Transform Go flags into JSON key value pairs
Usage:
$0 <flags file>
Examples:
$0 flags.flags
EOF
}
if [[ $# -ne 1 ]]; then
usage
exit 1
fi
key_values=$(sed -E -e 's/^-*(.*)=(.*)$/ "\1": "\2",/' "$1")
printf "{\n%s\n}" "${key_values::-1}"
脚本的唯一参数是一个包含标志的文件,每个标志占一行。
回填
backfill
命令通过使用 压缩器组件公开的块上传 API 将 Prometheus TSDB 块上传到 Grafana Mimir 中。
如果命令被中断,您可以重新启动它。Mimirtool 会检测哪些块已上传,并只上传未完成或新的块。
块上传功能默认禁用。要为用户或整个系统启用块上传功能,请参阅配置 TSDB 块上传。如果用户未启用块上传,则 mimirtool backfill
将失败。
示例
mimirtool backfill --address=http://mimir-compactor/ --id=anonymous /var/prometheus/{01G803NFXZ0MVKN71GT91HMV3Z,01G8BQ8PRR4TAP7EXZVBNTRBZ4,01G8CB7GTTC5ZXY23WTXHSYQXQ}
backfill
命令的结果如下
INFO[0000] Backfilling blocks="/var/prometheus/01G803NFXZ0MVKN71GT91HMV3Z,/var/prometheus/01G8BQ8PRR4TAP7EXZVBNTRBZ4,/var/prometheus/01G8CB7GTTC5ZXY23WTXHSYQXQ" user=anonymous
INFO[0000] making request to start block upload block=01G803NFXZ0MVKN71GT91HMV3Z file=meta.json path=/var/prometheus/01G803NFXZ0MVKN71GT91HMV3Z
WARN[0000] block already exists on the server path=/var/prometheus/01G803NFXZ0MVKN71GT91HMV3Z
INFO[0000] making request to start block upload block=01G8BQ8PRR4TAP7EXZVBNTRBZ4 file=meta.json path=/var/prometheus/01G8BQ8PRR4TAP7EXZVBNTRBZ4
INFO[0000] uploading block file block=01G8BQ8PRR4TAP7EXZVBNTRBZ4 file=index path=/var/prometheus/01G8BQ8PRR4TAP7EXZVBNTRBZ4 size=259867
INFO[0000] uploading block file block=01G8BQ8PRR4TAP7EXZVBNTRBZ4 file=chunks/000001 path=/var/prometheus/01G8BQ8PRR4TAP7EXZVBNTRBZ4 size=5024391
INFO[0000] block uploaded successfully block=01G8BQ8PRR4TAP7EXZVBNTRBZ4 path=/var/prometheus/01G8BQ8PRR4TAP7EXZVBNTRBZ4
INFO[0000] making request to start block upload block=01G8CB7GTTC5ZXY23WTXHSYQXQ file=meta.json path=/var/prometheus/01G8CB7GTTC5ZXY23WTXHSYQXQ
INFO[0000] uploading block file block=01G8CB7GTTC5ZXY23WTXHSYQXQ file=index path=/var/prometheus/01G8CB7GTTC5ZXY23WTXHSYQXQ size=151181
INFO[0000] uploading block file block=01G8CB7GTTC5ZXY23WTXHSYQXQ file=chunks/000001 path=/var/prometheus/01G8CB7GTTC5ZXY23WTXHSYQXQ size=1986792
INFO[0000] block uploaded successfully block=01G8CB7GTTC5ZXY23WTXHSYQXQ path=/var/prometheus/01G8CB7GTTC5ZXY23WTXHSYQXQ
INFO[0001] finished uploading blocks already_exists=1 failed=0 succeeded=2
许可
本软件根据 AGPLv3 许可。有关更多信息,请参见 LICENSE。