Foreman exporter is a small Python3 script exposing host metrics from The Foreman https://www.theforeman.org/. It uses API to get as much needed information about hosts statuses wrapping these in labels provided by The Foreman itself. It can be used as a stats tool for configuration applying status, hosts status, and potential errors
foreman_exporter_hosts
- Gauge - returns host list with their statusesforeman_exporter_hosts_request_time_seconds
- Gauge - returns time needed to do a/api/hosts
queryforeman_exporter_hosts_count
- Gauge - total number of hosts returned by queryforeman_exporter_dashboard_total_hosts
- Gauge - "Total hosts count"foreman_exporter_dashboard_bad_hosts
- Gauge - "Hosts with error state"foreman_exporter_dashboard_bad_hosts_enabled
- Gauge - "Hosts with error state and alerts enabled"foreman_exporter_dashboard_active_hosts
- Gauge - "Hosts which recently applied changes"foreman_exporter_dashboard_active_hosts_ok
- Gauge - "Hosts which recently applied changes successfully"foreman_exporter_dashboard_active_hosts_ok_enabled
- Gauge - "Hosts which recently applied changes successfully with alerts enabled"foreman_exporter_dashboard_ok_hosts
- Gauge - "Hosts without changes or errors"foreman_exporter_dashboard_ok_hosts_enabled
- Gauge - "Hosts without changes or errors, with alerts enabled"foreman_exporter_dashboard_disabled_hosts
- Gauge - "Hosts with alerts disabled"foreman_exporter_dashboard_pending_hosts
- Gauge - "Hosts that had pending changes"foreman_exporter_dashboard_pending_hosts_enabled
- Gauge - "Hosts that had pending changes with alerts enabled"foreman_exporter_dashboard_out_of_sync_hosts
- Gauge - "Out of sync hosts"foreman_exporter_dashboard_out_of_sync_hosts_enabled
- Gauge - "Out of sync hosts with alerts enabled"foreman_exporter_dashboard_good_hosts
- Gauge - "Hosts without errors"foreman_exporter_dashboard_good_hosts_enabled
- Gauge - "Hosts without errors, with alerts enabled"foreman_exporter_dashboard_percentage
- Gauge - "Hosts without errors percent"foreman_exporter_dashboard_reports_missing
- Gauge - "Hosts which are not reporting"foreman_exporter_dashboard_request_time_seconds
- Gauge - returns time needed to do a/api/dashboards
query
foreman api field | prometheus label |
---|---|
name | hostname |
domain_name | domain |
global_status_label | global_label |
configuration_status | configuration_status |
configuration_status_label | configuration_status_label |
puppet_status | puppet_status |
environment_name | puppet_environment |
operatingsystem_name | operatingsystem |
- | hostname |
- Foreman 2.0.x
- Foreman 2.2.x
- Foreman 1.22.x
- Foreman 1.23.x
To use access to API you need an user with at least 'viewer' role for hosts and access dashboard
role to read dashboards statuses.
Create a set of environment variables. All variables are required.
FOREMAN_REQUEST_URI=https://foreman.home.lan
FOREMAN_REQUEST_USER=api
FOREMAN_REQUEST_PASSWORD=api
FOREMAN_REQUEST_TLS_VERIFY=false
FOREMAN_REQUEST_TIMEOUT=60
FOREMAN_REQUEST_INTERVAL=120
version: "3.8"
services:
foreman_exporter:
image: marcinbojko/foreman_exporter:latest
ports:
- "8000:8000"
env_file:
./foreman_exporter.env
- job_name: 'foreman_exporter'
scrape_interval: 120s
honor_labels: true
metrics_path: '/'
scheme: http
static_configs:
- targets:
- 'foreman_exporter:8000'
labels:
app: "foreman-exporter"
env: "int"
team: "it"
Working example is available as ./foreman-exporter.yaml
To use:
-
Change ENV Variables in config section of a file:
--- apiVersion: v1 kind: ConfigMap metadata: name: foreman-exporter-env-config data: FOREMAN_REQUEST_INTERVAL: "120" FOREMAN_REQUEST_TIMEOUT: "60" FOREMAN_REQUEST_TLS_VERIFY: "false" FOREMAN_REQUEST_URI: https://foreman.sample.com FOREMAN_REQUEST_USER: api ---
-
Generate new secret for
FOREMAN_REQUEST_PASSWORD
echo -n newpassword|base64
apiVersion: v1 kind: Secret metadata: name: foreman-exporter-env-secret data: FOREMAN_REQUEST_PASSWORD: base64-password-here-from-above ---
-
Change ingress name or/and add tls section
--- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: foreman-exporter-ingress labels: name: foreman-exporter spec: rules: - host: foreman-exporter.sample.com http: paths: - pathType: Prefix path: "/" backend: serviceName: foreman-exporter-service servicePort: 8000
-
Run
kubectl apply -f foreman-exporter.yaml
If you'd like to expose your metrics to Prometheus Operator:
./k8s/foreman-exporter-custom-metrics.yaml
- add more API checks (facts maybe?)
Kubernetes setup- improve python skills
- pyreq
- isort
- flake8
- pylint
- pylance
That's a small side-project for me to learn Python3