feat: add frr_exporter class #369

Merged
unkinben merged 1 commits from benvin/frr_exporter into develop 2025-08-03 16:15:30 +10:00
10 changed files with 140 additions and 0 deletions
Showing only changes of commit 9deeacce22 - Show all commits

View File

@ -2,6 +2,7 @@
hiera_include: hiera_include:
- profiles::selinux::setenforce - profiles::selinux::setenforce
- frrouting - frrouting
- exporters::frr_exporter
profiles::packages::include: profiles::packages::include:
cobbler: {} cobbler: {}
@ -35,6 +36,7 @@ networking::interfaces:
mtu: 1500 mtu: 1500
# frrouting # frrouting
exporters::frr_exporter::enable: true
frrouting::ospfd_router_id: "%{facts.networking.ip}" frrouting::ospfd_router_id: "%{facts.networking.ip}"
frrouting::ospfd_redistribute: frrouting::ospfd_redistribute:
- connected - connected
@ -46,6 +48,12 @@ frrouting::ospfd_interfaces:
frrouting::daemons: frrouting::daemons:
ospfd: true ospfd: true
# consul
profiles::consul::client::node_rules:
- resource: service
segment: frr_exporter
disposition: write
# additional repos # additional repos
profiles::yum::global::repos: profiles::yum::global::repos:
frr-extras: frr-extras:

View File

@ -2,6 +2,7 @@
hiera_include: hiera_include:
- frrouting - frrouting
- profiles::dhcp::server - profiles::dhcp::server
- exporters::frr_exporter
# networking # networking
anycast_ip: 198.18.19.18 anycast_ip: 198.18.19.18
@ -19,6 +20,7 @@ networking::interfaces:
mtu: 1500 mtu: 1500
# frrouting # frrouting
exporters::frr_exporter::enable: true
frrouting::ospfd_router_id: "%{facts.networking.ip}" frrouting::ospfd_router_id: "%{facts.networking.ip}"
frrouting::ospfd_redistribute: frrouting::ospfd_redistribute:
- connected - connected
@ -30,6 +32,12 @@ frrouting::ospfd_interfaces:
frrouting::daemons: frrouting::daemons:
ospfd: true ospfd: true
# consul
profiles::consul::client::node_rules:
- resource: service
segment: frr_exporter
disposition: write
# additional repos # additional repos
profiles::yum::global::repos: profiles::yum::global::repos:
frr-extras: frr-extras:

View File

@ -1,6 +1,7 @@
--- ---
hiera_include: hiera_include:
- frrouting - frrouting
- exporters::frr_exporter
profiles::dns::master::ns_role: roles::infra::dns::master profiles::dns::master::ns_role: roles::infra::dns::master
profiles::dns::master::use_ns: region profiles::dns::master::use_ns: region
@ -178,6 +179,7 @@ networking::interfaces:
mtu: 1500 mtu: 1500
# frrouting # frrouting
exporters::frr_exporter::enable: true
frrouting::ospfd_router_id: "%{facts.networking.ip}" frrouting::ospfd_router_id: "%{facts.networking.ip}"
frrouting::ospfd_redistribute: frrouting::ospfd_redistribute:
- connected - connected
@ -189,6 +191,12 @@ frrouting::ospfd_interfaces:
frrouting::daemons: frrouting::daemons:
ospfd: true ospfd: true
# consul
profiles::consul::client::node_rules:
- resource: service
segment: frr_exporter
disposition: write
# additional repos # additional repos
profiles::yum::global::repos: profiles::yum::global::repos:
frr-extras: frr-extras:

View File

@ -1,6 +1,7 @@
--- ---
hiera_include: hiera_include:
- frrouting - frrouting
- exporters::frr_exporter
profiles::dns::resolver::acls: profiles::dns::resolver::acls:
acl-main.unkin.net: acl-main.unkin.net:
@ -228,6 +229,7 @@ networking::interfaces:
mtu: 1500 mtu: 1500
# frrouting # frrouting
exporters::frr_exporter::enable: true
frrouting::ospfd_router_id: "%{facts.networking.ip}" frrouting::ospfd_router_id: "%{facts.networking.ip}"
frrouting::ospfd_redistribute: frrouting::ospfd_redistribute:
- connected - connected
@ -239,6 +241,12 @@ frrouting::ospfd_interfaces:
frrouting::daemons: frrouting::daemons:
ospfd: true ospfd: true
# consul
profiles::consul::client::node_rules:
- resource: service
segment: frr_exporter
disposition: write
# additional repos # additional repos
profiles::yum::global::repos: profiles::yum::global::repos:
frr-extras: frr-extras:

View File

@ -2,6 +2,7 @@
hiera_include: hiera_include:
- frrouting - frrouting
- profiles::haproxy::server - profiles::haproxy::server
- exporters::frr_exporter
# networking # networking
anycast_ip: 198.18.19.17 anycast_ip: 198.18.19.17
@ -19,6 +20,7 @@ networking::interfaces:
mtu: 1500 mtu: 1500
# frrouting # frrouting
exporters::frr_exporter::enable: true
frrouting::ospfd_router_id: "%{facts.networking.ip}" frrouting::ospfd_router_id: "%{facts.networking.ip}"
frrouting::ospfd_redistribute: frrouting::ospfd_redistribute:
- connected - connected
@ -69,6 +71,9 @@ profiles::consul::client::node_rules:
- resource: service - resource: service
segment: haproxy-metrics segment: haproxy-metrics
disposition: write disposition: write
- resource: service
segment: frr_exporter
disposition: write
# haproxy # haproxy
profiles::haproxy::peers::enable: true profiles::haproxy::peers::enable: true

View File

@ -7,6 +7,7 @@ hiera_include:
- profiles::ceph::node - profiles::ceph::node
- profiles::ceph::client - profiles::ceph::client
- profiles::storage::cephfsvols - profiles::storage::cephfsvols
- exporters::frr_exporter
# FIXME: puppet-python wants to try manage python-dev, which is required by the ceph package # FIXME: puppet-python wants to try manage python-dev, which is required by the ceph package
python::manage_dev_package: false python::manage_dev_package: false
@ -75,6 +76,9 @@ profiles::consul::client::node_rules:
- resource: service - resource: service
segment: cephmgr segment: cephmgr
disposition: write disposition: write
- resource: service
segment: frr_exporter
disposition: write
# additional repos # additional repos
profiles::yum::global::repos: profiles::yum::global::repos:
@ -147,6 +151,7 @@ networking::interfaces:
mtu: 1500 mtu: 1500
# frrouting # frrouting
exporters::frr_exporter::enable: true
frrouting::ospfd_router_id: "%{hiera('networking_loopback0_ip')}" frrouting::ospfd_router_id: "%{hiera('networking_loopback0_ip')}"
frrouting::ospfd_redistribute: frrouting::ospfd_redistribute:
- connected - connected

View File

@ -4,6 +4,7 @@ hiera_include:
- frrouting - frrouting
- profiles::ceph::node - profiles::ceph::node
- profiles::ceph::client - profiles::ceph::client
- exporters::frr_exporter
# FIXME: puppet-python wants to try manage python-dev, which is required by the ceph package # FIXME: puppet-python wants to try manage python-dev, which is required by the ceph package
python::manage_dev_package: false python::manage_dev_package: false
@ -90,7 +91,14 @@ networking::interfaces:
netmask: 255.255.255.255 netmask: 255.255.255.255
mtu: 1500 mtu: 1500
# consul
profiles::consul::client::node_rules:
- resource: service
segment: frr_exporter
disposition: write
# frrouting # frrouting
exporters::frr_exporter::enable: true
frrouting::ospfd_router_id: "%{hiera('networking_loopback0_ip')}" frrouting::ospfd_router_id: "%{hiera('networking_loopback0_ip')}"
frrouting::ospfd_redistribute: frrouting::ospfd_redistribute:
- connected - connected

View File

@ -1,6 +1,7 @@
--- ---
hiera_include: hiera_include:
- frrouting - frrouting
- exporters::frr_exporter
profiles::consul::server::members_lookup: true profiles::consul::server::members_lookup: true
profiles::consul::server::data_dir: /data/consul profiles::consul::server::data_dir: /data/consul
@ -38,6 +39,11 @@ profiles::nginx::simpleproxy::nginx_aliases:
profiles::nginx::simpleproxy::proxy_port: 8500 profiles::nginx::simpleproxy::proxy_port: 8500
profiles::nginx::simpleproxy::proxy_path: '/' profiles::nginx::simpleproxy::proxy_path: '/'
# consul
profiles::consul::client::node_rules:
- resource: service
segment: frr_exporter
disposition: write
profiles::consul::prepared_query::rules: profiles::consul::prepared_query::rules:
vault: vault:
ensure: 'present' ensure: 'present'
@ -116,6 +122,7 @@ networking::interfaces:
mtu: 1500 mtu: 1500
# frrouting # frrouting
exporters::frr_exporter::enable: true
frrouting::ospfd_router_id: "%{facts.networking.ip}" frrouting::ospfd_router_id: "%{facts.networking.ip}"
frrouting::ospfd_redistribute: frrouting::ospfd_redistribute:
- connected - connected

View File

@ -0,0 +1,68 @@
class exporters::frr_exporter (
Boolean $enable = false,
String $user = 'frr_exporter',
String $group = 'frr_exporter',
Boolean $manage_user = true,
Boolean $manage_service = true,
Stdlib::Port $port = 9342,
Stdlib::Absolutepath $exec_path = '/usr/bin/frr_exporter',
Stdlib::Absolutepath $socket_dir = '/var/run/frr',
){
if $enable {
# install required package
package {'frr_exporter':
ensure => installed,
}
# manage the user/group
if $manage_user {
group { $group:
ensure => present,
}
user { $user:
ensure => present,
shell => '/usr/sbin/nologin',
groups => [$group, 'frrvty'],
managehome => true,
}
}
# manage the systemd service
if $manage_service {
# Use these in notifications or file resources
systemd::unit_file { 'frr_exporter.service':
content => template('exporters/frr_exporter.service.erb'),
enable => true,
active => true,
subscribe => Package['frr_exporter'],
}
}
# manage consul service
consul::service { 'frr_exporter':
service_name => 'frr_exporter',
address => $facts['networking']['ip'],
port => $port,
tags => [
'metrics',
'metrics_scheme=http',
'metrics_job=frr',
],
checks => [
{
id => 'frr_exporter_http_check',
name => 'frr_exporter HTTP Check',
http => "http://${facts['networking']['fqdn']}:${port}/metrics",
method => 'GET',
tls_skip_verify => true,
interval => '10s',
timeout => '1s',
},
],
}
}
}

View File

@ -0,0 +1,15 @@
[Unit]
Description=Prometheus frr_exporter
Wants=network-online.target
After=network-online.target
[Service]
User=<%= @user %>
Group=<%= @group %>
ExecStart=<%= @exec_path %> --frr.socket.dir-path="<%= @socket_dir %>"
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
[Install]
WantedBy=multi-user.target