I Put TrueNAS on a Grafana Dashboard. Then It Showed 12.7 PB of ARC.

Monitor truenas with grafana

I recently finished building a new TrueNAS configuration for use with my Proxmox VE server for additional iSCSI storage in the home lab. Take a look at my build post that I just posted detailing the configuration on my TerraMaster F8 SSD Plus: I Built My Ultimate TrueNAS Storage Setup for Proxmox. I wanted to experiment with getting my TrueNAS configuration monitored with Grafana to have visibility on my VDEVs and the hardware running my NAS. Let me take you through my configuration to monitor TrueNAS with Grafana

Overview of my configuration

In the post I linked to in the beginning, you can see all the details of the build. But just a brief overview of that I reloaded my Terramaster F8 SSD Plus with TrueNAS and running (6) Samsung 980 Pro 2TB NVMe drives for data. I did something a little bit different with the configuration. I decided to do (3) two-drive mirrors for VDEVs. The cool thing is Proxmox stores the data across all the VDEVs in the pool. So, it shows up as a single storage location. T/his config performs better than just putting them all in a RAIDZ config. I lose capacity, but I was after the best performance I could get.

I took benchmarks of the performance inside a test VM that was running in Proxmox and backed by the TrueNAS storage provisioned with the new TrueNAS storage plugin. The benchmarks showed the storage to be super responsive and performant. But I am all about the “real” performance and behavior I see when I have lots of workloads running.

I knew that TrueNAS has native reporting with the Graphite exporter. So I wanted to get this exporting into Graphite and have Grafana displaying the relevant metrics from the environment.

Why I used Grafana and Graphite

TrueNAS has a reporting configuration that integrates natively with Graphite. So this was an obvious choice for ease of configuration. It sends the metrics to Graphite’s Carbon receiver. Graphite then stores the metrics. This acts as the “data source” that Grafana needs as a place to query data to display and graph.

I think eventually I will introduce Prometheus for TrueNAS. But I will need to have a Graphite to Prometheus conversion in the middle. Prometheus is the more modern solution for aggregating data. But, for this first pass I wanted to get the native TrueNAS export working and see what data it provided. So, it is a good setup to monitor TrueNAS with Grafana.

Where I deployed Grafana and Graphite

I already had a Grafana instance up and running in my Talos Linux Kubernetes cluster that helps me monitor many other things in the home lab. However, I didn’t have Graphite running. So I spun this up as well inside my Kubernetes cluster. This turned out to work really well in my environment. Kubernetes is really built for running things like Grafana, Prometheus, Graphite and other monitoring suites.

Grafana running inside my talos linux kubernetes cluster
Grafana running inside my talos linux kubernetes cluster

Overview of how I stood up the monitoring stack in Kubernetes

So I have Grafana deployed in my Talos Linux Kubernetes cluster. I decided this is where I would also run Graphite. This also makes connections between the two much easier since it allows Grafana to connect to the data source inside the Kubernetes network.

Running graphite in talos linux kubernetes in the home lab
Running graphite in talos linux kubernetes in the home lab

I have both of these solutions with persistent volumes on my Ceph RDB storage that is part of my Ceph storage solution running in my Proxmox cluster. I assigned the following:

Then, I have both web interfaces exposed with Traefik in my Kubernetes cluster. Then I have services that ingress into the pods with my proper domain names and SSL certificate termination. The traffic follows a couple of paths. TrueNAS sends data to my internal IP address 10.1.149.240:2003. The port is Graphite’s Carbon receiver. Grafana then queries the Graphite web service over the Kubenetes network.

When configuring the connection from Grafana to Graphite, I use the internal Kuernetes DNS name for Graphite:

http://graphite.graphite.svc.cluster.local:80
Connecting grafana to graphite in kubernetes
Connecting grafana to graphite in kubernetes to monitor TrueNAS with Grafana

This is the most efficient path since it keeps Grafana from having to go out through the public Graphite hostname and back through Traefik when both applications already had cluster services. Then I just ran the Save and Test which was successful as you can see below.

Save and test the configuration in grafana for graphite
Save and test the configuration in grafana for graphite

Configuring the exporter in TrueNAS

On the TrueNAS side, it was easy to configure the integration between it and Graphite. The configuration dialog box was pretty straightforward. You just navigate in the TrueNAS interface to Reporting > Exporters and then I added a new exporter.

Below are the settings that I entered in for my environment that will give you an idea of what needs to be configured here:

SettingValue
TypeGraphite
EnabledYes
Destination IP10.1.149.240
Destination port2003
Prefixtruenas
Namespacetruenas
Update every10 seconds
Matching charts*
Graphite exporter settings in truenas
Graphite exporter settings in truenas

With this configuration, using truenas for the prefix and namespace gave me metric paths that had the naming format of truenas.truenas. That was ok in my configuration, but I had to tweak an existing Grafana dashboard from the Grafana dashboards marketplace as I will show below. I had to match the Graphite paths and capitalization that the queries used for the dashboard.

After I saved my exporter configuration, I gave it a little bit of time and looked in the metric tree. It took it a bit, but eventually TrueNAS started sending and the truenas tree showed up.

Viewing metrics in graphite for truenas
Viewing metrics in graphite for truenas

No data appeared in the imported dashboard from Grafana

Instead of reinventing the wheel here, I decided to look at the dashboards available from Grafana. I settled on Grafana dashboard 20439 since it was built for Graphite and Grafana. The dashboard loaded up just fine.

Importing the community dashboard for truenas and graphite
Importing the community dashboard for truenas and graphite

But, I noticed an issue. The panels were empty. I could see my metrics in Graphite, so I knew the data was making it there. So I figured it must be something with the paths that it expected.

No data displayed in the dashboard due to the mismatched paths
No data displayed in the dashboard due to the mismatched paths

Sure enough, in checking the imported dashboard, it expected paths like:

  • TrueNAS.*.zfs.arc_size.arcsz
  • TrueNAS.*.cpu.cpu0.idle

My exporter was sending paths under truenas.truenas, including truenas_arcstats and truenas_cpu_usage. So, ultimately, there were two differences. First, the dashboard expected TrueNAS with capital letters (remember Linux is case sensitive) and my prefix was lowercase. Second, the dashboard’s chart names were meant for a different TrueNAS metric layout. My current export used names like truenas_pool, truenas_meminfo, and truenas_disk_stats. The older dashboard expected different ones here.

So, what I did was remapped the dashboard queries to the metrics that were being sent.

  • Pool panels use: truenas_pool.usage
  • CPU panels use truenas_cpu_usage
  • disk activity uses truenas_disk_stats
  • ARC panels use truenas_arcstats

I also mapped the available disk temperature, system load, uptime, and network series. I would say the quickest way to troubleshoot a dashboard that says No data is to go back to Explore in Graphite. If the graphs are populating in graphite then there is probably just a mismatch somewhere in these areas I have described here.

The 12.7 PB ARC reading was a unit problem

One other odd thing I found was that after I remapped the dashboard queries, panels were displaying odd numbers. The one that especially stood out was my ZFS ARC size. It was displaying as 12.7 PB. Which I wish I had that amount!!! But, unfortunately, it should have been around 12 GB. My NAS only physically has 16 GB of RAM.

I found the panel was formatting that value as though it represented megabytes instead of bytes. So definitely made it exaggerate the total. So I set the Grafana unit to bytes and this got the result back to roughly 12 GB.

Anomalies in the data displayed once the paths were fixed in the query for truenas metrics
Anomalies in the data displayed once the paths were fixed in the query in my attempt to monitor TrueNAS with Grafana

I would recommend before relying on the information that you are seeing in Grafana to actually look at some of the information inside of TrueNAS to make sure the formatting in the dashboard is correct. This includes panels like Pool capacity, installed memory, disk temperature, and network throughput, just to name a few that I would spot check.

So, finally, I got the board lined out and it looked like below which is nice.

Dashboard displaying correctly and formatting the information correctly in grafana
Dashboard displaying correctly and formatting the information correctly in grafana

Below, I have scrolled down on the same dashboard and viewing the network statistics here.

More metrics including networking for truenas in grafana
More metrics including networking for truenas in grafana

What would I watch for Proxmox storage?

The best thing the graphs can do is explain what you are seeing with your VMs, if you are experiencing slowness or lagginess in performance. Metrics that I would watch are:

  • Pool usage
  • Disk reads and writes
  • Busy time
  • Temperatures
  • ZFS ARC behavior and trends

Using this to monitor TrueNAS with Grafana I think is a great way to trend these types of values in a way that you might not spot by just looking sporadically in the TrueNAS dashboard. Having historical data is really a great way to keep a check on your storage running in TrueNAS.

Wrapping up

All in all, this was a good exercise to monitor TrueNAS with Grafana and getting data exporting from TrueNAS. I think if I repeated this setup, it would go more smoothly as I would be familiar with some of the gotchas up front. The next thing that I am going to do is put Prometheus in the middle for a more modern metrics export to Grafana solution. How about you? Are you monitoring your TrueNAS configuration inside of Grafana using the same type of setup I am using here? Do you know a better way that I am missing?

Google
Add as a preferred source on Google

Google is updating how articles are shown. Don’t miss our leading home lab and tech content, written by humans, by setting Virtualization Howto as a preferred source.

About The Author

Brandon Lee

Brandon Lee

Brandon Lee is the Senior Writer, Engineer and owner at Virtualizationhowto.com, and a 7-time VMware vExpert, with over two decades of experience in Information Technology. Having worked for numerous Fortune 500 companies as well as in various industries, He has extensive experience in various IT segments and is a strong advocate for open source technologies. Brandon holds many industry certifications, loves the outdoors and spending time with family. Also, he goes through the effort of testing and troubleshooting issues, so you don't have to.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted