Skip to main content
Version: Next

Metrics

Prometheus formatted metrics endpoints can be configured for each container (including the OpenRemote Manager), you will either need Prometheus server running to scrape these endpoints or use a cloud provider service; here's an example using AWS Cloudwatch:

Refer to the website of each container app for details of metrics exposed and their meaning; here's an overview of the OpenRemote Manager metrics.

OpenRemote Manager

ComponentMetric nameTypeLabelsDescription
                                                                               
Artemisartemis_activegaugebroker: localhostIf the server is active
Artemisartemis_address_memory_usagegaugebroker: localhostMemory used by all the addresses on broker for in-memory messages
Artemisartemis_address_memory_usage_percentagegaugebroker: localhostMemory used by all the addresses on broker as a percentage of the global-max-size
Artemisartemis_address_sizegaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
The number of estimated bytes being used by all the queue(s) bound to this address; used to control paging and blocking
Artemisartemis_authentication_countgaugebroker: localhost
result: failure | success
Number of successful authentication attempts
Artemisartemis_authorization_countgaugebroker: localhost
result: failure | success
Number of successful authorization attempts
Artemisartemis_connection_countgaugebroker: localhostNumber of clients connected to this server
Artemisartemis_consumer_countgaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Number of consumers consuming messages from this queue
Artemisartemis_delivering_durable_message_countgaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Number of durable messages that this queue is currently delivering to its consumers
Artemisartemis_delivering_durable_persistent_sizegaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Persistent size of durable messages that this queue is currently delivering to its consumers
Artemisartemis_delivering_message_countgaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Number of messages that this queue is currently delivering to its consumers
Artemisartemis_delivering_persistent_sizegaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Persistent size of messages that this queue is currently delivering to its consumers
Artemisartemis_disk_store_usagegaugebroker: localhostFraction of total disk store used
Artemisartemis_durable_message_countgaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Number of durable messages currently in this queue (includes scheduled, paged, and in-delivery messages)
Artemisartemis_durable_persistent_sizegaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Persistent size of durable messages currently in this queue (includes scheduled, paged, and in-delivery messages)
Artemisartemis_limit_percentgaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
The % of memory limit (global or local) that is in use by this address
Artemisartemis_message_countgaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Number of messages currently in this queue (includes scheduled, paged, and in-delivery messages)
Artemisartemis_messages_acknowledgedgaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Number of messages acknowledged from this queue since it was created
Artemisartemis_messages_addedgaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Number of messages added to this queue since it was created
Artemisartemis_messages_expiredgaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Number of messages expired from this queue since it was created
Artemisartemis_messages_killedgaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Number of messages removed from this queue since it was created due to exceeding the max delivery attempts
Artemisartemis_number_of_pagesgaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
Number of pages used by this address
Artemisartemis_persistent_sizegaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Persistent size of all messages (including durable and non-durable) currently in this queue (includes scheduled, paged, and in-delivery messages)
Artemisartemis_replica_syncgaugebroker: localhostIf the initial replication synchronization process is complete
Artemisartemis_routed_message_countgaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
Number of messages routed to one or more bindings
Artemisartemis_scheduled_durable_message_countgaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Number of durable scheduled messages in this queue
Artemisartemis_scheduled_durable_persistent_sizegaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Persistent size of durable scheduled messages in this queue
Artemisartemis_scheduled_message_countgaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Number of scheduled messages in this queue
Artemisartemis_scheduled_persistent_sizegaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
queue: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
Persistent size of scheduled messages in this queue
Artemisartemis_session_countgaugebroker: localhostNumber of sessions on this server
Artemisartemis_total_connection_countgaugebroker: localhostTotal number of clients which have connected to this server since it was started
Artemisartemis_total_session_countgaugebroker: localhostTotal number of sessions created on this server since it was started
Artemisartemis_unrouted_message_countgaugeaddress: *.*.writeattribute.# | *.*.writeattributevalue.# | provisioning.*.request
broker: localhost
Number of messages not routed to any bindings
Executorsexecutor_active_threadsgaugename: ContainerExecutor | ContainerScheduledExecutorThe approximate number of threads that are actively executing tasks
Executorsexecutor_completed_tasks_totalcountername: ContainerExecutor | ContainerScheduledExecutorThe approximate total number of tasks that have completed execution
Executorsexecutor_idle_secondssummaryname: ContainerExecutor | ContainerScheduledExecutorIdle time of executor
Executorsexecutor_idle_seconds_maxgaugename: ContainerExecutor | ContainerScheduledExecutorMaximum idle time of executor
Executorsexecutor_pool_core_threadsgaugename: ContainerExecutor | ContainerScheduledExecutorThe core number of threads for the pool
Executorsexecutor_pool_max_threadsgaugename: ContainerExecutor | ContainerScheduledExecutorThe maximum allowed number of threads in the pool
Executorsexecutor_pool_size_threadsgaugename: ContainerExecutor | ContainerScheduledExecutorThe current number of threads in the pool
Executorsexecutor_queue_remaining_tasksgaugename: ContainerExecutor | ContainerScheduledExecutorThe number of additional elements that this queue can ideally accept without blocking
Executorsexecutor_queued_tasksgaugename: ContainerExecutor | ContainerScheduledExecutorThe approximate number of tasks that are queued for execution
Executorsexecutor_scheduled_once_totalcountername: ContainerExecutorTotal tasks scheduled once
Executorsexecutor_scheduled_repetitively_totalcountername: ContainerScheduledExecutorTotal tasks scheduled repetitively
Executorsexecutor_secondssummaryname: ContainerExecutor | ContainerScheduledExecutorMeasures executor task execution time
Executorsexecutor_seconds_maxgaugename: ContainerExecutor | ContainerScheduledExecutorMaximum execution time of executor tasks
Eventsor_attributes_totalcountersource: AgentService | AttributeLinkingService | EnergyOptimisationService | GatewayService | RulesEngine | none | ...Total attributes processed by source
Eventsor_attributes_secondssummary(none)Total time spent processing attribute events
Eventsor_attributes_seconds_maxgauge(none)Maximum time spent processing an attribute event
Eventsor_provisioning_secondssummary(none)Total time spent processing provisioning requests
Eventsor_provisioning_seconds_maxgauge(none)Maximum time spent processing provisioning requests
Rulesor_rules_secondssummary(none)Total time spent processing rules
Rulesor_rules_seconds_maxgauge(none)Maximum time spent processing rules

PostgreSQL (via Query Exporter)

The following metrics are exposed by the Query Exporter, which connects directly to the OpenRemote PostgreSQL database to monitor TimescaleDB performance, connection limits, and general database health. The following is based on the default configuration found in /deployment/query-exporter/config.yaml.

Metric nameTypeLabelsDescription
pg_collation_mismatch_countgauge(none)Number of text indexes with collation version mismatches requiring a REINDEX
pg_cache_hit_percentagegauge(none)What percentage of data is being served instantly from RAM versus being slowly read from disk. You want this as high as possible
pg_connections_limitgauge(none)Count of connections max limit
pg_connections_usedgauge(none)Count of connections in use
pg_connections_freegauge(none)Count of connections available
pg_connections_stuckgauge(none)Count of connections with state of idle in transaction
pg_hot_update_percentgaugetable_nameTable percentage of updates that are HOT updates indicates good fillfactor
pg_dead_tuple_percentgaugetable_nameTable ratio of dead tuples to live ones a ratio > 10-20% indicates not aggressive enough autovacuum
pg_last_autovacuum_hoursgaugetable_nameTable hours since last auto vacuum run successfully
pg_last_autoanalyze_hoursgaugetable_nameTable hours since last auto analyze run successfully
pg_db_disk_sizegauge(none)DB size in MB
pg_datapoint_raw_data_sizegauge(none)Asset datapoint table raw uncompressed size in MB
pg_datapoint_indexes_sizegauge(none)Asset datapoint table indexes size in MB
pg_datapoint_toast_sizegauge(none)Asset datapoint TOAST table size in MB
pg_datapoint_disk_sizegauge(none)Asset datapoint table size in MB
pg_datapoint_chunk_countgauge(none)Asset datapoint table hypertable chunk count
pg_datapoint_uncompressed_chunk_countgauge(none)Asset datapoint table hypertable uncompressed chunk count
pg_datapoint_chunks_needing_compressiongauge(none)Asset datapoint table hypertable chunks needing compression count
pg_datapoint_chunk_start_weeksgauge(none)Asset datapoint table oldest hypertable chunk in weeks
pg_datapoint_chunk_end_weeksgauge(none)Asset datapoint table newest hypertable chunk in weeks
pg_datapoint_chunks_not_analyzedgauge(none)Asset datapoint table hypertable chunks not yet analyzed
pg_datapoint_largest_uncompressed_chunkgauge(none)Asset datapoint table largest uncompressed hypertable chunk in MB
pg_datapoint_uncompressed_cache_hit_ratiogauge(none)Asset datapoint table cache hit ratio for uncompressed chunks (Aim for 99%+)
pg_datapoint_uncompressed_blks_read_totalcounter(none)Asset datapoint total physical disk blocks read for uncompressed chunks (Monitor rate with spikes indicate RAM spillover)
pg_datapoint_compression_ratiogauge(none)Asset datapoint table compression ratio
pg_datapoint_querygauge(none)Dummy metric to get typical query time metric
pg_background_errorscounter(none)Count of errors in background worker processes
pg_timescale_job_total_runscounterjob_id | proc_nameTimescaleDB job total runs by job
pg_timescale_job_total_failurescounterjob_id | proc_nameTimescaleDB job total failures by job
pg_timescale_job_last_run_duration_secondsgaugejob_id | proc_nameTimescaleDB job last run duration in seconds
pg_timescale_job_next_start_secondsgaugejob_id | proc_nameSeconds until next scheduled run for each TimescaleDB job
pg_timescale_job_last_run_statusgaugejob_id | proc_name | last_run_statusTimescaleDB job last run status marker
pg_wal_totalcounter(none)Total WAL written since statistics reset in MB
pg_bgwriter_checkpoints_timed_totalcounter(none)Scheduled checkpoints executed
pg_bgwriter_checkpoints_req_totalcounter(none)Requested checkpoints executed
pg_bgwriter_checkpoint_write_time_seconds_totalcounter(none)Total time spent writing checkpoints in seconds
pg_bgwriter_checkpoint_sync_time_seconds_totalcounter(none)Total time spent syncing checkpoints in seconds
pg_table_bloat_countgauge(none)Number of tables where dead tuples > 30% of live rows
pg_index_bloat_countgauge(none)Number of indexes that are larger than 150% of table size
pg_long_running_queries_countgauge(none)Number of queries that have been running for longer than 30 seconds
pg_longest_query_duration_secondsgauge(none)Duration of the longest running query in seconds