Skip to main content

Grok Exporter

Grok exporter - экспортер для мониторинга логов. Он парсит логи применяя регулярки, и отдает prometheus метрики. Части строк логов можно мапить в качестве лейбла метрики, или даже ее значения.

Ссылка на репозиторий: https://github.com/fstab/grok_exporter


Пример конфига:

global:
  config_version: 3
input:
  type: file
  path: ./example/example.log
  readall: true
imports:
- type: grok_patterns
  dir: ./logstash-patterns-core/patterns
metrics:
- type: counter
  name: grok_example_lines_total
  help: Counter metric example with labels.
  match: '%{DATE} %{TIME} %{USER:user} %{NUMBER}'
  labels:
    user: '{{.user}}'
    logfile: '{{base .logfile}}'
server:
  port: 9144

Как можно увидеть в примере, grok уже содержит в себе определенные паттерны, предназначение которых - упростить написание выражения, и повысить читаемость конфига. 
Ознакомиться с этими паттернами можно в репозитории, либо на сервере, в папке с конфигом грока (/etc/grok_exporter/patterns).

Чтобы добавить свои паттерны, нужно включить в конфиг секцию grok_patterns:

grok_patterns:
  - 'EXIM_MESSAGE [a-zA-Z ]*'
  - 'EXIM_SENDER_ADDRESS F=<%{EMAILADDRESS}>'

Можно мониторить сразу несколько логов одним конфигов, если указать из словарем:

input:
  type: file
  paths:
    - /var/log/nginx/pay-api.digitalspb.com_access.log
    - /var/log/nginx/pay.digitalspb.com_access.log
  readall: false
  fail_on_missing_logfile: true

Пример реального конфига:

global:
  config_version: 3

input:
  type: file
  paths:
    - /var/log/nginx/pay-api.digitalspb.com_access.log
    - /var/log/nginx/pay.digitalspb.com_access.log
  readall: false
  fail_on_missing_logfile: true

imports:
  - type: grok_patterns
    dir: "/etc/grok_exporter/patterns"

grok_patterns:
  - 'PL3ENDPOINT (/Teko/callback\?type=refund %{DATA}|/Teko/callback\?type=payment %{DATA}|/Mts/PayClick/callback/tarif
fication/subscription %{DATA}|/Mts/MtsStream2/callback %{DATA}|/API/XML/InvoiceManagementService.ashx %{DATA})'

  - help: HTTP respcodes by endpoint
    labels:
      logfile: '{{base .logfile}}'
      request: '{{.rawrequest}}'
      method: '{{.method}}'
    value: '{{.response}}'
    match: '%{IPORHOST} %{DATA} \[%{HTTPDATE}\] %{WORD} "(?:%{WORD:method} %{PL3ENDPOINT:rawrequest})" %{NUMBER:response} %{NUMBER} %{DATA} %{DATA} "%{URIHOST}"'
    name: planet3_respcodes_by_endpoint
    type: gauge

server:
  host: 172.27.247.16
  protocol: http
  port: 9144

Ссылки:

  1. Более подробно с форматом конфиг-файла, типом метрик, и т.д можно ознакомиться в официальной документации.
  2. Для дебага выражений есть незаменимая тулза - Grok debugger.