Files
zulip/puppet/kandra/manifests/prometheus/grok.pp
Alex Vandiver 840fa74854 kandra: Add a grok exporter to parse nginx logfiles.
This provides access logging metrics to Prometheus.  For cardinality
reasons, we cannot (nor would we want to) put every request path into
its own label value -- but we do separate out the most-frequent access
paths (as well as some low-frequency but high-interest ones) into
their own label values.

In order to differentiate accesses to https://zulip.com/ from
https://example.zulipchat.com/ (both of which appear at path `/`), we
use a `grok_exporter.realm_names_regex` value in `zulip.conf`, which
is expected to be set to match the hostname of all possible realms.
2025-03-27 21:56:54 -07:00

46 lines
1.5 KiB
Puppet

# @summary Parses nginx access_log files
#
class kandra::prometheus::grok {
include kandra::prometheus::base
include zulip::supervisor
$version = $zulip::common::versions['grok_exporter']['version']
$dir = "/srv/zulip-grok_exporter-${version}"
$bin = "${dir}/grok_exporter"
zulip::external_dep { 'grok_exporter':
version => $version,
url => "https://github.com/fstab/grok_exporter/releases/download/v${version}/grok_exporter-${version}.linux-${zulip::common::goarch}.zip",
tarball_prefix => "grok_exporter-${version}.linux-${zulip::common::goarch}",
bin => [$bin],
cleanup_after => [Service[supervisor]],
}
$realm_names_regex = zulipconf('grok_exporter', 'realm_names_regex', '__impossible__')
$include_dir = "${dir}/patterns"
file { '/etc/grok_exporter.yaml':
ensure => file,
owner => zulip,
group => zulip,
mode => '0644',
content => template('kandra/prometheus/grok_exporter.yaml.template.erb'),
notify => Service[supervisor],
}
kandra::firewall_allow { 'grok_exporter': port => '9144' }
file { "${zulip::common::supervisor_conf_dir}/prometheus_grok_exporter.conf":
ensure => file,
require => [
User[zulip],
Package[supervisor],
File[$bin],
File['/etc/grok_exporter.yaml'],
],
owner => 'root',
group => 'root',
mode => '0644',
content => template('kandra/supervisor/conf.d/prometheus_grok_exporter.conf.template.erb'),
notify => Service[supervisor],
}
}