Grok-exporter is active running, but metrics don't show up [service error: Invalid configuration]
Grok-exporter is active running, but metrics don't show up [service error: Invalid configuration]
我的主要目的是在 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_total{metrics="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 行中的 ':' 没有问题。
我认为问题在于您用来识别指标的模式 - github 页面 (http://github.com/fstab/grok_exporter/blob/master/CONFIG.md) 涉及到这一点,但似乎没有太多内容解释行为。
Grok 需要可识别的模式,如果您尝试为日志中的列定义模式,但该模式与尝试解析的数据不匹配,Grok 将不会对其进行操作。当您搜索 http://localhost:9145/metrics(或您托管目标的任何端口)并查找以下行时,这一点很明显:
grok_exporter_lines_matching_total{metric="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_count{Event="a"} 3
对于您的日志,有两点需要特别考虑:
- 什么正则表达式标识事件列的模式
- 哪个正则表达式最能代表最后一列中的值
我强烈推荐使用 regexr 网站,它允许您输入一些示例文本,然后尝试不同的正则表达式 >> https://regexr.com/
要解决您的 METRIC 模式,请将其更改为包含 w+ 以便尝试匹配“词”:
grok_patterns:
- 'METRIC ([a-zA-Z])\w+'
对于您的数值,因为它是一个浮点数,您可以使用 NUMBER grok_pattern 并将其转换为表示小数点:
%{NUMBER:num:float}
设置好后,仪表计数器应该会向您显示类似于此的内容:
log_events_total_count{Event="avg_hour"} 0.4
希望这对您有所帮助!
我的主要目的是在 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_total{metrics="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 行中的 ':' 没有问题。
我认为问题在于您用来识别指标的模式 - github 页面 (http://github.com/fstab/grok_exporter/blob/master/CONFIG.md) 涉及到这一点,但似乎没有太多内容解释行为。
Grok 需要可识别的模式,如果您尝试为日志中的列定义模式,但该模式与尝试解析的数据不匹配,Grok 将不会对其进行操作。当您搜索 http://localhost:9145/metrics(或您托管目标的任何端口)并查找以下行时,这一点很明显:
grok_exporter_lines_matching_total{metric="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_count{Event="a"} 3
对于您的日志,有两点需要特别考虑:
- 什么正则表达式标识事件列的模式
- 哪个正则表达式最能代表最后一列中的值
我强烈推荐使用 regexr 网站,它允许您输入一些示例文本,然后尝试不同的正则表达式 >> https://regexr.com/
要解决您的 METRIC 模式,请将其更改为包含 w+ 以便尝试匹配“词”:
grok_patterns:
- 'METRIC ([a-zA-Z])\w+'
对于您的数值,因为它是一个浮点数,您可以使用 NUMBER grok_pattern 并将其转换为表示小数点:
%{NUMBER:num:float}
设置好后,仪表计数器应该会向您显示类似于此的内容:
log_events_total_count{Event="avg_hour"} 0.4
希望这对您有所帮助!