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

Team City + Gallio 运行测试,但未显示结果

Sass watch 正在检测更改但未编译为 css

Android - 正在发生但未显示的视图