Expose hardware sensor data to Graphite / InfluxDB / Prometheus / Postgres / Timescaledb
Alternatives To Ohmgraphite
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
14 hours ago325gpl-3.0C
Real-time performance monitoring, done right! https://www.netdata.cloud
Grafana55,649252414 hours ago3,297September 23, 20223,625agpl-3.0TypeScript
The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
Victoriametrics8,625416 hours ago174September 08, 2022667apache-2.0Go
VictoriaMetrics: fast, cost-effective monitoring solution and time series database
Appmetrics2,1605143 months ago33November 26, 202193apache-2.0C#
App Metrics is an open-source and cross-platform .NET library used to record and report metrics within an application.
5 days ago55February 04, 202154apache-2.0Go
Open Source HTTP Reverse Proxy Cache and Time Series Dashboard Accelerator
7 days ago28November 12, 202149mitGo
Application: Collect ALL UniFi Controller, Site, Device & Client Data - Export to InfluxDB or Prometheus
Statsd_exporter8362114 days ago57July 08, 202219apache-2.0Go
StatsD to Prometheus metrics exporter
2 months ago5mitJava
Frostmourne(霜之哀伤监控平台)是基于Elasticsearch, Prometheus, SkyWalking, InfluxDB,Mysql/TiDB,ClickHouse, SqlServer, IoTDB数据的分布式监控报警系统. Monitor & alert & alarm for Elasticsearch,Prometheus data。主要使用springboot2 + vue-element-admin
Awesome Monitoring542
6 months ago2Go
12 years ago29November 18, 201964apache-2.0JavaScript
Manage & automate Grafana with easy wizzy
Alternatives To Ohmgraphite
Select To Compare

Alternative Project Comparisons



OhmGraphite is a Windows service that exposes hardware sensor data to a metric store, allowing one to create informative and beautiful dashboards in Grafana or another time series UI:


The above dashboard captures:

  • Power consumption of the CPU and GPU
  • CPU voltages and frequencies
  • Load breakdown on individual GPU components
  • CPU, GPU, disk, and motherboard temperature readings
  • Disk activity, space remaining, and error monitoring
  • Fan speed
  • Network consumption

Supported metric stores:

Hardware support is provided through LibreHardwareMonitor. Since detected sensors is hardware dependent, one can use the LibreHardwareMonitor GUI to preview a subset of metrics that will be exported by OhmGraphite. If a GUI of hardware sensors is all that is desired, and the thought of running and configuring Grafana and a metric store sounds overwhelming, I'd recommend HWINFO.


  • Create a directory that will be the home base for OhmGraphite (I use C:\Apps\OhmGraphite).
  • Download the latest zip and extract to our directory.
  • Update app configuration (located at OhmGraphite.exe.config). See configs for Graphite, InfluxDB, Prometheus, Timescale / Postgres
  • To install the app .\OhmGraphite.exe install. The command will install OhmGraphite as a Windows service (so you can manage it with your favorite powershell commands or services.msc)
  • To start the app after installation: .\OhmGraphite.exe start or your favorite Windows service management tool
  • If immediately installing the app is unnerving, the app can be ran interactively by executing .\OhmGraphite.exe run. Executing as administrator will most likely increase the number of sensors found (OhmGraphite will log how many sensors are found).

Congrats! Installation is done and you'll start seeing metrics flowing into your desired metric store.


  • Stop OhmGraphite service .\OhmGraphite.exe stop
  • Unzip latest release and copy OhmGraphite.exe to your installation directory.
  • Start OhmGraphite service .\OhmGraphite.exe start


  • Stop OhmGraphite service .\OhmGraphite.exe stop
  • Run uninstall command .\OhmGraphite.exe uninstall
  • Remove files


App configuration is located in the installation directory at OhmGraphite.exe.config.

Config updates require an app restart to take effect.

Graphite Configuration

The config below polls our hardware every 5 seconds and sends the results to a graphite server listening on localhost:2003.

<?xml version="1.0" encoding="utf-8" ?>
    <add key="host" value="localhost" />
    <add key="port" value="2003" />
    <add key="interval" value="5" />
    <add key="tags" value="false" />

Starting with Graphite v1.1.0, Graphite supports tags (similar to InfluxDB's tags). When enabled in OhmGraphite the data format switches from <name> <value> <timestamp> to <name>;tag1=a;tag2=b <value> <timestamp>. Since tags are such a new feature, OhmGraphite has it disabled by default to prevent cumbersome usage with Graphite 0.9 and 1.0 installations.

Examples of types of tags used (same for InfluxDB):

  • sensor_type: temperature, load, watts, rpms
  • hardware_type: cpu, gpu, hdd
  • host: my-pc
  • app: ohm
  • hardware: Nvidia GTX 970, Intel i7 6700k
  • raw_name (sensor name): CPU DRAM, CPU graphics

For any serious interest in tags, make sure to use external db like postgres, mysql, or redis, as sqlite won't cut it.

InfluxDB Configuration

Graphite is the default export style, but if you're an InfluxDB user you can change the type to influxdb and fill out InfluxDB specific options:

<?xml version="1.0" encoding="utf-8" ?>
    <add key="type" value="influxdb" />
    <add key="interval" value="5" />
    <add key="influx_address" value="http://localhost:8086" />
    <add key="influx_db" value="mydb" />
    <add key="influx_user" value="myuser" />
    <add key="influx_password" value="mypassword" />
    <add key="interval" value="5" />

If OhmGraphite will be connecting to InfluxDB 2, the configuration will need to be changed accordingly.

<?xml version="1.0" encoding="utf-8" ?>
    <add key="type" value="influx2" />
    <add key="influx2_address" value="http://localhost:8086" />
    <add key="influx2_org" value="myorg" />
    <add key="influx2_bucket" value="mydb" />
    <add key="influx2_token" value="thisistheinfluxdbtoken" />
    <add key="interval" value="5" />

Prometheus Configuration

Configuring the Prometheus exporter will create a server that listens on prometheus_port. Instead of creating outbound data like the other exporters, OhmGraphite's Prometheus config creates inbound data. OhmGraphite will only poll the hardware sensors when scraped by the Prometheus service.

<?xml version="1.0" encoding="utf-8" ?>
    <add key="type" value="prometheus" />
    <add key="prometheus_port" value="4445" />
    <!-- This is the host that OhmGraphite listens on.
         `*` means that it will listen on all interfaces.
         Consider restricting to a given IP address -->
    <add key="prometheus_host" value="*" />

Then you'll need add the OhmGraphite instance to your Prometheus config. This can be done with the method of your choosing but for the sake of example here is a possible prometheus.yml:

  scrape_interval: 15s
  - job_name: 'ohmgraphite'
    - targets: ['']

In the above example, the Prometheus server and OhmGraphite are not on the same machine, so Prometheus accesses OhmGraphite through the machine that is hosting OhmGraphite via the IP address (

If the Prometheus service accessing OhmGraphite is not on the same machine, one may have to enable the port through the windows firewall.

Here's one example of enabling it in powershell. Note that there are further ways to configure the firewall for additional tightening of access (ie: only allow certain IPs to connect).

New-NetFirewallRule -DisplayName "Allow port 4445 for OhmGraphite" -Direction Inbound -LocalPort 4445 -Protocol TCP -Action Allow

TimescaleDB Configuration

One can configure OhmGraphite to send to Timescale / Postgres with the following (configuration values will differ depending on your environment):

<?xml version="1.0" encoding="utf-8" ?>
    <add key="type" value="timescale" />
    <add key="timescale_connection" value="Host=vm-ubuntu;Username=ohm;Password=123456;Database=postgres" />
    <add key="timescale_setup" value="false" />

By leaving timescale_setup to false (the default) OhmGraphite can insert into any plain Postgres table that follows this table structure:

   host TEXT,
   hardware TEXT,
   hardware_type TEXT,
   identifier TEXT,
   sensor TEXT,
   sensor_type TEXT,
   sensor_index INT,
   value REAL

Ensure that the OhmGraphite user that inserts the metrics (ohm in our example) has appropriate permissions:

GRANT INSERT ON ohm_stats TO ohm;

If timescale_setup is true then OhmGraphite will create the following schema, so make sure Timescale is enabled on the server and the user connecting has appropriate permissions

   host TEXT,
   hardware TEXT,
   hardware_type TEXT,
   identifier TEXT,
   sensor TEXT,
   sensor_type TEXT,
   sensor_index INT,
   value REAL

SELECT create_hypertable('ohm_stats', 'time', if_not_exists => TRUE);
CREATE INDEX IF NOT EXISTS idx_ohm_host ON ohm_stats (host);
CREATE INDEX IF NOT EXISTS idx_ohm_identifier ON ohm_stats (identifier);

Currently the schema and the columns are not configurable.

Hostname Resolution

When OhmGraphite sends metrics to the desired sink, it includes the computers hostname for additional context to allow scenarios where one has a grafana template variable based on hostname. There are three possible ways for OhmGraphite to resolve the hostname: NetBIOS (the default), DNS, and a static user-configured name.

NOTE: It's hard to say exactly how a machine's NetBIOS name and internet host name will differ, but to give an example, a NetBIOS name of TINI can have a host name of Tini.

To switch to DNS hostname resolution, update the configuration to include name_lookup, else any other value will be assumed to be a custom static name.

<?xml version="1.0" encoding="utf-8" ?>
    <add key="name_lookup" value="dns" />

Prometheus setups are unaffected by name_lookup, as Prometheus automatically creates the instance label when scraping. If renaming is desired, you'll want to change the instance label by either hardcoding the alias in the Prometheus config or using DNS.

Metric Name Aliasing

It is possible that the sensor names exposed through OhmGraphite are not descriptive enough. For instance, "Fan #2" could have RPM exposed, but you know that a more descriptive name would be "CPU Fan". To have OhmGraphite export the sensor under the "CPU Fan" name, one will need to add the mapping from sensor id (+ /name suffix) to the desired name like so:

    <add key="/lpc/nct6792d/fan/1/name" value="CPU Fan" />

Hiding Sensors

There may be a sensor that is faulty on a given machine. Maybe it reports negative temperatures. This can throw off monitoring software or make it harder to maintain with all the special cases. OhmGraphite allows one to exclude a sensor from being exported by modifying the OhmGraphite config and adding the /hidden suffix to the sensor id like so:

<add key="/lpc/nct6792d/temperature/1/hidden" />

One can use globs to ignore a group of sensors. For instance, to hide all power sensors and hide clock sensors from an AMD CPU:

<add key="/amdcpu/*/clock/*/hidden" />
<add key="/*/power/*/hidden" />

Determine Sensor Id

There are several ways to determine the sensor id of a metric:

  • Postgres / Timescale and Influxdb users can examine their data store for the sensor id
  • Perform the rename in LibreHardwareMonitor and copy and paste the line from LibreHardwareMonitor.config into OhmGraphite.exe.config.
  • Search the OhmGraphite.log for the sensor's name that you'd like to rename (in the example, I'd search for "Fan #2"):
Sensor added: /lpc/nct6792d/fan/1 "Fan #2"

Disabling Hardware

By default, all hardware sensor collection is enabled to allow for minimal configuration in common use cases. However, some hardware may be susceptible to instability when polled. Hiding all of the sensors from unstable hardware isn't sufficient as sensor name filtering occurs after querying hardware. Thus there is configuration to determine what hardware is enabled.

The snippet below shows all the options that can be used to disable hardware.

<add key="/cpu/enabled" value="FaLsE" />
<add key="/gpu/enabled" value="false" />
<add key="/motherboard/enabled" value="false" />
<add key="/ram/enabled" value="false" />
<add key="/network/enabled" value="false" />
<add key="/storage/enabled" value="false" />
<add key="/controller/enabled" value="false" />
<add key="/psu/enabled" value="false" />
<add key="/battery/enabled" value="false" />

Since disabling sensors at the hardware level is more efficient than a glob to hide desired sensors, disabling hardware is desirable even if the underlying hardware is stable.

When hardware is disabled, all instances of that hardware are disabled. For instance, if one has multiple storage devices and only one is unstable, disabling storage hardware will halt sensor collection from all of them.


When connecting to a service that presents a self signed certificate, one can specify certificate_verification

<?xml version="1.0" encoding="utf-8" ?>
    <add key="certificate_verification"
         value="C:\apps\OhmGraphite\influxdb-selfsigned.crt" />

The possible values:

  • True (the default): all certificates are verified
  • False: No certificates are verified (INSECURE)
  • a file path of a certificate that the server is allowed to return and still be considered a valid request (useful for self signed certificates). Recommended to be an absolute file path.

Debugging Tips

Something wrong? Try these steps

  • Enter the directory where OhmGraphite is installed
  • Examine OhmGraphite.log, do you see any lines with an "ERROR"? Fix the error.
  • If not, enable more verbose logging in NLog.config. Change the following line
    <logger name="*" minlevel="Info" writeTo="file" />


    <logger name="*" minlevel="Debug" writeTo="file" />
  • Restart OhmGraphite for the logging changes to take effect
  • At the bottom of OhmGraphite.log DEBUG statements should be present informing one of all the hardware sensors detected and whenever metrics are pushed somewhere.
  • Stumped? Open an issue with relevant parts of the log included.
Popular Prometheus Projects
Popular Influxdb Projects
Popular Operations Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
C Sharp