#prometheus-exporter #service #state #systemd #linux #units #monitord

bin+lib monitord-exporter

monitord-exporter ... let prometheus know how happy your systemd is! 😊

4 releases (2 breaking)

0.4.1 Oct 19, 2024
0.4.0 Oct 10, 2024
0.3.0 Jun 5, 2024
0.1.0 Nov 15, 2022

#354 in Unix APIs

Download history 1/week @ 2024-07-22 10/week @ 2024-09-23 154/week @ 2024-10-07 190/week @ 2024-10-14 31/week @ 2024-10-21 6/week @ 2024-11-04

232 downloads per month

GPL-2.0-or-later

42KB
770 lines

monitord-exporter

Tell prometheus how happy your systemd is ! 😊

A prometheus exporter using monitord to export statistic to prometheus collectors.

Install

Install via cargo.

  • cargo install monitord-exporter
  • monitord-exporter --help
$ monitord-exporter --help
prometheus exporter to share how happy your systemd is ! 😊

Usage: monitord-exporter [OPTIONS]

Options:
  -d, --dbus-address <DBUS_ADDRESS>
          dbus address

          [default: unix:path=/run/dbus/system_bus_socket]

  -l, --log-level <LOG_LEVEL>
          Adjust the console log-level

          [default: Info]
          [possible values: error, warn, info, debug, trace]

      --no-networkd
          networkd stats disable

      --no-pid1
          pid1 stats disable

      --no-system-state
          system state stats disable

      --networkd-state-file-path <NETWORKD_STATE_FILE_PATH>
          network netif dir

          [default: /run/systemd/netif/links]

  -p, --port <PORT>
          TCP Port to listen on

          [default: 1]

  -s, --services <SERVICES>
          Services to get service stats for

  -h, --help
          Print help (see a summary with '-h')

  -V, --version
          Print version

Example Output

# HELP monitord_networkd_address_state Protocol independent address states (Need to find a better explanation)
# TYPE monitord_networkd_address_state gauge
monitord_networkd_address_state{interface_name="eth0"} 3
monitord_networkd_address_state{interface_name="wg0"} 3
# HELP monitord_networkd_admin_state Is the interface configured to be operational (Double check)
# TYPE monitord_networkd_admin_state gauge
monitord_networkd_admin_state{interface_name="eth0"} 4
monitord_networkd_admin_state{interface_name="wg0"} 4
# HELP monitord_networkd_carrier_state Does the link have physical signal or not
# TYPE monitord_networkd_carrier_state gauge
monitord_networkd_carrier_state{interface_name="eth0"} 5
monitord_networkd_carrier_state{interface_name="wg0"} 5
# HELP monitord_networkd_ipv4_address_state Deprecated IP on the interface operational state
# TYPE monitord_networkd_ipv4_address_state gauge
monitord_networkd_ipv4_address_state{interface_name="eth0"} 3
monitord_networkd_ipv4_address_state{interface_name="wg0"} 3
# HELP monitord_networkd_ipv6_address_state IPv6 on the interface operational state
# TYPE monitord_networkd_ipv6_address_state gauge
monitord_networkd_ipv6_address_state{interface_name="eth0"} 3
monitord_networkd_ipv6_address_state{interface_name="wg0"} 3
# HELP monitord_networkd_managed_interfaces Count of interfaces networkd manages
# TYPE monitord_networkd_managed_interfaces gauge
monitord_networkd_managed_interfaces 2
# HELP monitord_networkd_oper_state Interface overall operational state
# TYPE monitord_networkd_oper_state gauge
monitord_networkd_oper_state{interface_name="eth0"} 9
monitord_networkd_oper_state{interface_name="wg0"} 9
# HELP monitord_networkd_required_for_online Bool state of systemd being configured to wait for this interface to come online before network online target.
# TYPE monitord_networkd_required_for_online gauge
monitord_networkd_required_for_online{interface_name="eth0"} 1
monitord_networkd_required_for_online{interface_name="wg0"} 1
# HELP monitord_pid1_cpu_time_kernel CPU time used by PID1
# TYPE monitord_pid1_cpu_time_kernel gauge
monitord_pid1_cpu_time_kernel 189
# HELP monitord_pid1_cpu_user_kernel CPU user space time used by PID1
# TYPE monitord_pid1_cpu_user_kernel gauge
monitord_pid1_cpu_user_kernel 268
# HELP monitord_pid1_fd_count Open file descriptors for PID1
# TYPE monitord_pid1_fd_count gauge
monitord_pid1_fd_count 169
# HELP monitord_pid1_memory_usage_bytes Memory usage in bytes for PID1
# TYPE monitord_pid1_memory_usage_bytes gauge
monitord_pid1_memory_usage_bytes 10289152
# HELP monitord_pid1_tasks Processes / threads of PID1
# TYPE monitord_pid1_tasks gauge
monitord_pid1_tasks 1
# HELP monitord_service_active_enter_timestamp Active enter timestamp
# TYPE monitord_service_active_enter_timestamp gauge
monitord_service_active_enter_timestamp{service_name="ssh.service"} 1717037801690678
# HELP monitord_service_active_exit_timestamp Active exti timestamp
# TYPE monitord_service_active_exit_timestamp gauge
monitord_service_active_exit_timestamp{service_name="ssh.service"} 0
# HELP monitord_service_cpuuage_nsec CPU usage nano seconds
# TYPE monitord_service_cpuuage_nsec gauge
monitord_service_cpuuage_nsec{service_name="ssh.service"} 3257412922000
# HELP monitord_service_inactive_exit_timestamp Inactive exit timestamp
# TYPE monitord_service_inactive_exit_timestamp gauge
monitord_service_inactive_exit_timestamp{service_name="ssh.service"} 1717037801646233
# HELP monitord_service_ioread_bytes IO bytes read
# TYPE monitord_service_ioread_bytes gauge
monitord_service_ioread_bytes{service_name="ssh.service"} -1
# HELP monitord_service_ioread_operations IO Opertations
# TYPE monitord_service_ioread_operations gauge
monitord_service_ioread_operations{service_name="ssh.service"} -1
# HELP monitord_service_memory_available Memory available
# TYPE monitord_service_memory_available gauge
monitord_service_memory_available{service_name="ssh.service"} 771878912
# HELP monitord_service_memory_current Memory currently in use
# TYPE monitord_service_memory_current gauge
monitord_service_memory_current{service_name="ssh.service"} 6971392
# HELP monitord_service_nrestarts Count of automatic restarts of the service
# TYPE monitord_service_nrestarts gauge
monitord_service_nrestarts{service_name="ssh.service"} 0
# HELP monitord_service_processes Count of processes
# TYPE monitord_service_processes gauge
monitord_service_processes{service_name="ssh.service"} 1
# HELP monitord_service_restart_usec Restart time in usecs
# TYPE monitord_service_restart_usec gauge
monitord_service_restart_usec{service_name="ssh.service"} 100000
# HELP monitord_service_state_chage_timestamp Last unit state change timestamp
# TYPE monitord_service_state_chage_timestamp gauge
monitord_service_state_chage_timestamp{service_name="ssh.service"} 1717037801690678
# HELP monitord_service_status_errno Status error number
# TYPE monitord_service_status_errno gauge
monitord_service_status_errno{service_name="ssh.service"} 0
# HELP monitord_service_tasks_current Tasks current (processes + threads)
# TYPE monitord_service_tasks_current gauge
monitord_service_tasks_current{service_name="ssh.service"} 1
# HELP monitord_service_timeout_clean_usec Clean timeout usecs
# TYPE monitord_service_timeout_clean_usec gauge
monitord_service_timeout_clean_usec{service_name="ssh.service"} -1
# HELP monitord_service_watchdog_usec Watchdog runtime usecs
# TYPE monitord_service_watchdog_usec gauge
monitord_service_watchdog_usec{service_name="ssh.service"} 0
# HELP monitord_system_state systemd system state - Refer to monitord enum for meaning
# TYPE monitord_system_state gauge
monitord_system_state 3
# HELP monitord_units_active_units Count of all active units
# TYPE monitord_units_active_units gauge
monitord_units_active_units 306
# HELP monitord_units_automount_units Count of all automount units
# TYPE monitord_units_automount_units gauge
monitord_units_automount_units 2
# HELP monitord_units_device_units Count of device units
# TYPE monitord_units_device_units gauge
monitord_units_device_units 79
# HELP monitord_units_failed_units Count of failed units - delete or fix
# TYPE monitord_units_failed_units gauge
monitord_units_failed_units 0
# HELP monitord_units_inactive_units Count of inactive units
# TYPE monitord_units_inactive_units gauge
monitord_units_inactive_units 169
# HELP monitord_units_jobs_queued systemd jobs queued - Add what a job is ...
# TYPE monitord_units_jobs_queued gauge
monitord_units_jobs_queued 0
# HELP monitord_units_loaded_units Count of loaded units
# TYPE monitord_units_loaded_units gauge
monitord_units_loaded_units 431
# HELP monitord_units_masked_units Count of masked units
# TYPE monitord_units_masked_units gauge
monitord_units_masked_units 3
# HELP monitord_units_mount_units Count of mount units
# TYPE monitord_units_mount_units gauge
monitord_units_mount_units 40
# HELP monitord_units_not_found_units Count of not found units
# TYPE monitord_units_not_found_units gauge
monitord_units_not_found_units 41
# HELP monitord_units_path_units Count of path units
# TYPE monitord_units_path_units gauge
monitord_units_path_units 6
# HELP monitord_units_scope_units Count of scope units
# TYPE monitord_units_scope_units gauge
monitord_units_scope_units 17
# HELP monitord_units_service_units Count of service units
# TYPE monitord_units_service_units gauge
monitord_units_service_units 179
# HELP monitord_units_slice_units Count of slice units
# TYPE monitord_units_slice_units gauge
monitord_units_slice_units 8
# HELP monitord_units_socket_units Count of socket units
# TYPE monitord_units_socket_units gauge
monitord_units_socket_units 24
# HELP monitord_units_target_units Count of target units
# TYPE monitord_units_target_units gauge
monitord_units_target_units 49
# HELP monitord_units_timer_units Count of timer units
# TYPE monitord_units_timer_units gauge
monitord_units_timer_units 17
# HELP monitord_units_total_units Count of total systemd units
# TYPE monitord_units_total_units gauge
monitord_units_total_units 475
# HELP prometheus_exporter_request_duration_seconds The HTTP request latencies in seconds.
# TYPE prometheus_exporter_request_duration_seconds histogram
prometheus_exporter_request_duration_seconds_bucket{le="0.005"} 0
prometheus_exporter_request_duration_seconds_bucket{le="0.01"} 0
prometheus_exporter_request_duration_seconds_bucket{le="0.025"} 3
prometheus_exporter_request_duration_seconds_bucket{le="0.05"} 3
prometheus_exporter_request_duration_seconds_bucket{le="0.1"} 3
prometheus_exporter_request_duration_seconds_bucket{le="0.25"} 3
prometheus_exporter_request_duration_seconds_bucket{le="0.5"} 3
prometheus_exporter_request_duration_seconds_bucket{le="1"} 3
prometheus_exporter_request_duration_seconds_bucket{le="2.5"} 3
prometheus_exporter_request_duration_seconds_bucket{le="5"} 3
prometheus_exporter_request_duration_seconds_bucket{le="10"} 3
prometheus_exporter_request_duration_seconds_bucket{le="+Inf"} 3
prometheus_exporter_request_duration_seconds_sum 0.044447549
prometheus_exporter_request_duration_seconds_count 3
# HELP prometheus_exporter_requests_total Number of HTTP requests received.
# TYPE prometheus_exporter_requests_total counter
prometheus_exporter_requests_total 3
# HELP prometheus_exporter_response_size_bytes The HTTP response sizes in bytes.
# TYPE prometheus_exporter_response_size_bytes gauge
prometheus_exporter_response_size_bytes 9439

Development

To do test runs (requires systemd and optionally systemd-networkd installed)

  • cargo run -- -p 1234 -l debug
    • -l for logging level. Recommend debug when developing
    • -p > 1024 to run as non root / with capabilities
    • root is required to read procfs stats of PID 1

Ensure the following pass before submitting a PR (CI checks):

  • cargo test
  • cargo clippy
  • cargo fmt

Dependencies

~20–33MB
~497K SLoC