Initial commit
This commit is contained in:
commit
0fdb74a9a2
7 changed files with 168 additions and 0 deletions
36
files/opnsense-dhcp-exporter
Executable file
36
files/opnsense-dhcp-exporter
Executable file
|
|
@ -0,0 +1,36 @@
|
|||
#!/usr/bin/python3
|
||||
import time
|
||||
import urllib3
|
||||
import requests
|
||||
import json
|
||||
import os
|
||||
from prometheus_client import start_http_server, PROCESS_COLLECTOR, PLATFORM_COLLECTOR, GC_COLLECTOR
|
||||
from prometheus_client.core import GaugeMetricFamily, CounterMetricFamily, REGISTRY
|
||||
from prometheus_client.registry import Collector
|
||||
|
||||
urllib3.disable_warnings()
|
||||
|
||||
class CustomCollector(Collector):
|
||||
def collect(self):
|
||||
api_host = os.environ['OPNSENSE_EXPORTER_OPS_API']
|
||||
api_key = os.environ['OPNSENSE_EXPORTER_OPS_API_KEY']
|
||||
api_secret = os.environ['OPNSENSE_EXPORTER_OPS_API_SECRET']
|
||||
result = requests.get(f'https://{api_host}/api/dhcpv4/leases/searchLease', verify=False, auth=(api_key, api_secret))
|
||||
leases = {}
|
||||
for lease in result.json()['rows']:
|
||||
if lease['state'] == 'active' and lease['type'] == 'dynamic':
|
||||
leases.setdefault(lease['if_descr'], set()).add(lease['mac'])
|
||||
opnsense_dhcpv4_active_leases_count = GaugeMetricFamily('opnsense_dhcpv4_active_leases_count', 'Number of active DHCPv4 leases per interface', labels=['interface'])
|
||||
for if_descr, macs in leases.items():
|
||||
opnsense_dhcpv4_active_leases_count.add_metric([if_descr], len(macs))
|
||||
yield opnsense_dhcpv4_active_leases_count
|
||||
|
||||
REGISTRY.unregister(PROCESS_COLLECTOR)
|
||||
REGISTRY.unregister(PLATFORM_COLLECTOR)
|
||||
REGISTRY.unregister(GC_COLLECTOR)
|
||||
REGISTRY.register(CustomCollector())
|
||||
|
||||
if __name__ == '__main__':
|
||||
start_http_server(addr='127.0.0.1', port=int(os.environ['OPNSENSE_DHCP_EXPORTER_PORT']))
|
||||
while True:
|
||||
time.sleep(100)
|
||||
33
files/prometheus-opnsense-dhcp-exporter.service
Normal file
33
files/prometheus-opnsense-dhcp-exporter.service
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
[Unit]
|
||||
Description=Prometheus exporter for OPNsense DHCPv4 metrics
|
||||
Requires=network-online.target
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
DynamicUser=yes
|
||||
User=opnsense-exporter
|
||||
Restart=on-failure
|
||||
EnvironmentFile=-/etc/default/prometheus-opnsense-exporter
|
||||
ExecStart=/usr/local/sbin/opnsense-dhcp-exporter
|
||||
|
||||
LockPersonality=yes
|
||||
MemoryDenyWriteExecute=yes
|
||||
NoNewPrivileges=true
|
||||
PrivateDevices=yes
|
||||
PrivateTmp=disconnected
|
||||
PrivateUsers=yes
|
||||
ProcSubset=pid
|
||||
ProtectClock=yes
|
||||
ProtectControlGroups=strict
|
||||
ProtectHome=yes
|
||||
ProtectHostname=yes
|
||||
ProtectKernelLogs=yes
|
||||
ProtectKernelModules=yes
|
||||
ProtectKernelTunables=yes
|
||||
ProtectProc=invisible
|
||||
ProtectSystem=strict
|
||||
RestrictNamespaces=yes
|
||||
RestrictRealtime=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
33
files/prometheus-opnsense-exporter.service
Normal file
33
files/prometheus-opnsense-exporter.service
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
[Unit]
|
||||
Description=Prometheus exporter for OPNsense metrics
|
||||
Requires=network-online.target
|
||||
After=network-online.target
|
||||
|
||||
[Service]
|
||||
DynamicUser=yes
|
||||
User=opnsense-exporter
|
||||
Restart=on-failure
|
||||
EnvironmentFile=-/etc/default/prometheus-opnsense-exporter
|
||||
ExecStart=/usr/local/sbin/opnsense-exporter $OPNSENSE_EXPORTER_ARGS
|
||||
|
||||
LockPersonality=yes
|
||||
MemoryDenyWriteExecute=yes
|
||||
NoNewPrivileges=true
|
||||
PrivateDevices=yes
|
||||
PrivateTmp=disconnected
|
||||
PrivateUsers=yes
|
||||
ProcSubset=pid
|
||||
ProtectClock=yes
|
||||
ProtectControlGroups=strict
|
||||
ProtectHome=yes
|
||||
ProtectHostname=yes
|
||||
ProtectKernelLogs=yes
|
||||
ProtectKernelModules=yes
|
||||
ProtectKernelTunables=yes
|
||||
ProtectProc=invisible
|
||||
ProtectSystem=strict
|
||||
RestrictNamespaces=yes
|
||||
RestrictRealtime=yes
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Loading…
Add table
Add a link
Reference in a new issue