As I have continued to learn and build up my Proxmox lab environment, I have been looking at different options for me to be able to more closely keep track of various metrics within my lab. Ultimately, I decided that I was intent on getting Grafana up and running.
Even prior to my migration to Proxmox, Grafana had always seemed appealing. With my employer also using Grafana in a production setting, it was just another incentive to get the ball rolling on this project to get it set up at home.
Fortunately for me, and you as well if you are running Proxmox, the process of setting this up was a bit easier than I had previously anticipated due to the out of the box integration of InfluxDB within Proxmox.
Let's get started!
Installing InfluxDB and Grafana
To start, you will need a host that is running docker, as well as docker-compose. Assuming those prerequisites are met, utilize this following docker-compose file in order to spin up InfluxDB and Grafana:
version: "3" services: grafana: image: grafana/grafana container_name: grafana_container restart: always ports: - 3000:3000 networks: - monitoring_network volumes: - grafana-volume:/var/lib/grafana influxdb: image: influxdb container_name: influxdb_container restart: always ports: - 8086:8086 - 8089:8089/udp networks: - monitoring_network volumes: - influxdb-volume:/var/lib/influxdb networks: monitoring_network: volumes: grafana-volume: external: true influxdb-volume: external: true
You will also need to create the docker volumes referenced above:
docker volume create influxdb-volume docker volume create grafana-volume
As well as creating the monitoring network that Grafana and InfluxDB will share:
docker network create monitoring_network
Once done, it should simply be a matter of running
docker-compose up -d in order to bring both containers up.
Once your containers are online, visit
<hostname>:8086, specify an organization name and a bucket name. For my purposes, I set my organization name to
Homelab and bucket name to
proxmox. Make note of these, as you will need them for later steps.
Once configured, you will need to visit the following screen under the "Data" tab and then click on the "API Tokens" tab at the top:
Here, your user should have a token created with your user's name (which was defined on the setup screen). Click on it and then copy your token, as it will be needed in the next step.
Setting up InfluxDB within Proxmox
Now that you have InfluxDB created, with your API token copied, it is time to go back to your Proxmox instance:
Clicking on the Datacenter tab on the left side, you will then have the option to visit the "Metric Server" section of the settings pane. Here, click on "Add" and then select "InfluxDB"
Here you will need to plug in all of the fields with their corresponding values that we have gathered previously.
Name, you can choose whatever name you would like.
Server needs to be populated with either the IP or DNS name of the host running your InfluxDB server.
Port should correspond with the port of the InfluxDB container you created in the earlier step and should be
Protocol will need to be switched from
HTTP, unless you're utilizing SSL, in which case it would need to be
Bucket, these are simply the values you had defined when creating the InfluxDB instance.
Lastly, for the
Token, simply paste your user's token from InfluxDB into this field.
Confirming Data is Flowing
Before we move on, let's go back into InfluxDB and insure data is flowing into it from Proxmox.
To ensure your data is flowing properly, click on the "Explore" tab on the left side and explore the various options within your
proxmox bucket. If they look similar to what is displayed above, you should be good to go. If you are not seeing data similar to what is shown above, revisit the previous step and ensure your values are correct.
Now it is time to visit Grafana on
<hostname>:3000. After logging in with the default credentials of
admin/admin and choosing a new password, navigate to the "Configuration" tab, shown above, and select "Data sources"
Select "Add data source"
Select InfluxDB from the provided list
Upon being taken to the configuration page for InfluxDB, the first thing you will need to do is change the query language from "InfluxQL" to "Flux". "Flux" is the new language being used by InfluxDB and, while still in beta, has been entirely stable for me.
Next comes the rest of the InfluxDB configuration. To start, provide the hostname or IP and port of InfluxDB in the "URL" field, disable "Basic auth", enable "Skip TLS Verify", and finally, populate the "InfluxDB Details" with the same data that you used previously to set up InfluxDB on Proxmox.
Once done, select "Save & test". If everything was plugged in correctly, you will be provided with a green checkmark and a message indicating how many buckets Grafana found within your InfluxDB instance.
Querying and Visualizing Data in Grafana
Now that Proxmox is feeding into InfluxDB and InfluxDB is linked up with Grafana, we are ready to start querying data from the database and visualizing it with Grafana!
With us having chosen to use the Flux language, you will want to use this dashboard that someone has already made in order to visualize your data.
On the site for this pre-made page, simply click to copy the ID for the dashboard
Next, within Grafana, hover over the plus icon and select "Import", as shown above
Paste in the ID you copied previously and select "Load" next to the field you pasted in
Lastly, you are able to configure a few settings for this dashboard. Make sure to set the dropdown menu at the bottom to utilize your InfluxDB instance. Other than that, I have chosen to leave the remaining values as their defaults.
The very last step in order to get your dashboard up and running is to now select the bucket type, as shown above. Ensure that your
proxmox bucket from InfluxDB is chosen.
With that, you should now have a working Grafana dashboard! This has definitely been one of the more exciting projects I have completed. I have always wanted to get Grafana up and running but up until now, haven't gotten around to it.
I have found that there are countless useful metrics provided by the dashboard and am excited to explore other dashboards in the future