Grok-exporter 正在运行,但未显示指标 [服务错误:配置无效]
Posted
技术标签:
【中文标题】Grok-exporter 正在运行,但未显示指标 [服务错误:配置无效]【英文标题】:Grok-exporter is active running, but metrics don't show up [service error: Invalid configuration] 【发布时间】:2021-12-26 10:02:59 【问题描述】:我的主要目的是在 prometheus 服务器中显示日志文件。为此,我正在使用 grok-exporter。
为此,我显示了日志文件路径并更改了指标类型和匹配项。如下图:
global:
config_version: 3
input:
type: file
path: /tmp/model.log
readall: true # Read from the beginning of the file? False means we start at>
fail_on_missing_logfile: true
imports:
- type: grok_patterns
dir: /opt/grok-exporter/patterns
grok_patterns:
- 'METRICS [a-zA-Z ]'
metrics:
- type: gauge
name: model_log
help: Average duration of model
match: '%DATE:date %TIME:time %METRICS:metrics %NUMBER:avg_hour'
value: '.avg_hour'
labels:
metrics: '.metrics'
server:
protocol: http
port: 9144
我的日志文件看起来像:
2021-11-09 15:18:17 avg_hour 0.9
2021-11-09 15:20:06 avg_hour 0.5
2021-11-09 15:20:06 avg_hour 0.4
当我在 9144 启动 grok-exporter.server 时,只启动了默认指标。 其中之一是“grok_exporter_line_processing_errors_total”。其中显示:
grok_exporter_line_processing_errors_totalmetrics="model_log" 0
这意味着我的错误为零。
但是,我在服务器中看不到我的指标“model_log”。 也许我的 grok 模式类型有误,或者 grok 无法访问“/tmp/”处的 model_log。但如果这是真的,应该会出现错误。
更新: 当我在命令行上写:
journalctl -eu grok-exporter
有一个错误:
... status =255/EXCEPTION
grok-exporter.service failed with results 'exit-code'
...
Failed to load ~/config.yml: invalid configuration: yaml: line 21: could not find expected ':'
...
但是:
systemctl status grok-exporter.service
正在运行。 可能是什么问题?我认为第 21 行的 ':' 没有问题。
【问题讨论】:
【参考方案1】:我认为问题在于您用于识别指标的模式 - github 页面 (http://github.com/fstab/grok_exporter/blob/master/CONFIG.md) 涉及到这一点,但似乎并没有很多东西可以解释这种行为。
Grok 需要可识别的模式,如果您尝试为日志中的列定义与尝试解析的数据不匹配的模式,Grok 不会对其采取行动。当您搜索 http://localhost:9145/metrics(或您托管目标的任何端口)并查找以下行时,这一点很明显:
grok_exporter_lines_matching_totalmetric="log_events_total_count" 0
在该示例中,我将指标称为“log_events_total_count”,而 Grok 无法根据以下内容识别模式:
grok_patterns:
- 'METRIC [a-zA-Z ]'
metrics:
- type: gauge
name: log_events_total_count
help: Average duration of model
match: '%DATE:date %TIME:time %METRIC:event %NUMBER:num'
value: '.num'
labels:
Event: '.event'
如果您删除“%NUMBER:num”并将您的仪表更改为计数器,您应该会发现事件标签只会出现“a”,类似于以下内容:
CONFIG SNIPPET:
grok_patterns:
- 'METRIC [a-zA-Z ]'
metrics:
- type: counter
name: log_events_total_count
help: Average duration of model
match: '%DATE:date %TIME:time %METRIC:event'
labels:
Event: '.event'
METRICS RESULT:
log_events_total_countEvent="a" 3
您的日志需要特别考虑两件事:
-
什么正则表达式标识了事件列的模式
哪个正则表达式最能代表最后一列中的值
我强烈推荐使用 regexr 网站,它允许您输入一些示例文本,然后尝试不同的正则表达式 >> https://regexr.com/
要解决您的 METRIC 模式,请将其更改为包含 w+ 以便尝试匹配“单词”:
grok_patterns:
- 'METRIC ([a-zA-Z])\w+'
对于您的数值,因为它是一个浮点数,您可以使用 NUMBER grok_pattern 并将其转换为表示小数点:
%NUMBER:num:float
设置好之后,仪表计数器应该会向您显示类似于以下内容的内容:
log_events_total_countEvent="avg_hour" 0.4
希望这会有所帮助!
【讨论】:
以上是关于Grok-exporter 正在运行,但未显示指标 [服务错误:配置无效]的主要内容,如果未能解决你的问题,请参考以下文章
ubuntu中Docker 容器正在运行,但未在 docker ps 中显示
我的项目正在使用 google colab 但未使用 pycharm