Need help with OhmGraphite?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

nickbabcock
148 Stars 22 Forks Other 456 Commits 10 Opened issues

Description

Export Open Hardware sensor data to Graphite / InfluxDB / Prometheus / Postgres / Timescaledb

Services available

!
?

Need anything else?

Contributors list

# 13,465
Java
dropwiz...
restful...
F#
238 commits
# 2,933
query-l...
python-...
mvvm-fr...
wechat-...
4 commits
# 516,582
Python
C#
Shell
influxd...
3 commits
# 63,967
jenkins...
Git
port-sc...
network...
2 commits
# 300,924
Android
HTML
prometh...
carbon
2 commits

Build status

OhmGraphite

OhmGraphite takes the hard work of extracting hardware sensors from Open Hardware Monitor (technically LibreHardwareMonitor for most up to date hardware) and exports the data in a graphite (or InfluxdDB / Prometheus / TimescaleDB) compatible format. OhmGraphite is for those missing any of the following in Grafana or (other time series UI):

  • Breakdown of GPU utilization
  • Fan speed
  • Temperature for hard drives, CPU cores, GPU, Motherboard
  • Voltage readings

Who's this for?

  • People who are familiar with Graphite (or InfluxDB / Prometheus / TimescaleDB) / Grafana and may have an instance running on their home or cloud server. If you're not familiar with those applications, it may be overwhelming to setup and maintain them. If you're just looking for a UI for hardware sensors, I'd recommend HWINFO
  • People who know how to execute commands on Windows Command Prompt or other terminal
  • People who like lightweight (8MB of RAM and neglible CPU usage), portable (can run off usb), and straightforward applications

System Recommendations

  • Windows
  • .NET v4.6.1. If you have Windows 10 you are all set. If not, you may have to download a more recent version.
  • Administrator privileges

Introduction

OhmGraphite functions as a console app or a Windows service that periodically polls the hardware. My recommendation is that even though OhmGraphite can be run via Mono / Docker, many hardware sensors aren't available in those modes.

I use this every day to create beautiful dashboards. Keep in mind, Open Hardware Monitor supported components will determine what metrics are available. Below are graphs / stats made with OhmGraphite (couple of the panels are complemented with telegraf as demonstrated in Monitoring Windows system metrics with grafana)

dashboard

Getting Started (Windows)

  • 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
  • This config can be updated in the future, but will require a restart of the app for effect.
  • 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).
  • 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

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.
  
    
  

Grafana Configuration

While not necessary, there are dashboards tailored to OhmGraphite that one can use in Grafana to jump start their own dashboards:

Graphite Configuration

The config below polls our hardware every

5
seconds and sends the results to a graphite server listening on
localhost:2003
.
  
    
    
    
    
  

Starting with Graphite v1.1.0, Graphite supports tags (similar to InfluxDB's tags). When enabled in OhmGraphite the data format switches from

  
to
;tag1=a;tag2=b  
. 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:
  
    
    
    
    

  

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.
  
    
    

<!-- 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="*"></add>

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
:
global:
  scrape_interval: 15s
scrape_configs:
  - job_name: 'ohmgraphite'
    static_configs:
    - targets: ['10.0.0.200:4445']

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 (

10.0.0.200
).

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):

  
    
    
    
  

By leaving

timescale_setup
to
false
(the default) OhmGraphite can insert into any plain Postgres table that follows this table structure:
CREATE TABLE IF NOT EXISTS ohm_stats (
   time TIMESTAMPTZ NOT NULL,
   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:
CREATE USER ohm WITH PASSWORD 'xxx';
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
CREATE TABLE IF NOT EXISTS ohm_stats (
   time TIMESTAMPTZ NOT NULL,
   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.

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:
    

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:

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"

Upgrades

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

Uninstall

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

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
    

to

    
  • 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.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.