76 lines
4.9 KiB
Markdown
76 lines
4.9 KiB
Markdown
|
|
# ProxMon
|
|
|
|
|
|
|
|
Prometheus exporter that monitors LXC, process and node metrics for Proxmox. This is comprised of two components:
|
|
1. node-exporter
|
|
- Publicly available "node exporter" from Prometheus. This provides a wide range of system metrics, and by default serves metrics on port 9100.
|
|
- Pre-built binary in this repo for ease of installation.
|
|
- Configuration details can be found [here](https://github.com/prometheus/node_exporter).
|
|
2. proxmon
|
|
- Provides supplemental metrics that node-exporter does not provide, and by default serves metrics on port 9101.
|
|
- Metrics include resource usage on a per-LXC and per-process basis.
|
|
|
|
Also included is a Grafana dashboard tailored to the data exported by both components above.
|
|
|
|
# Installation
|
|
1. Install dependencies needed to build
|
|
```apt install git make gcc```
|
|
2. Create a directory for ProxMon to live
|
|
```mkdir /home/monitor```
|
|
**NOTE**: This does not create a new user. This guide does not include configuring the service to run under a different user, and will by default run it under root. See **Customizing Services**.
|
|
3. ```cd /home/monitor```
|
|
4. ```git clone https://git.cozyclan.xyz/dan/ProxMon.git```
|
|
5. ```cd ProxMon```
|
|
6. If you wish to configure the services in any way, such as running them as a new user (note on step 2) or editing the port they use, skip the remaining steps and go to the **Customizing Services** section.
|
|
7. Run ```make install```
|
|
8. Verify services are running:
|
|
```systemctl status node-exporter.service```
|
|
```systemctl status proxmon-exporter.service```
|
|
9. Congratulations, you're done. Go to the **Connecting** section.
|
|
|
|
## Customizing Services
|
|
The Makefile has various build targets that can be used for finer control over the installation process. A full list of targets can be viewed with ```make help```.
|
|
|
|
1. Build proxmon: ```make build```. This will place the executables in the ```bin/``` folder, and generate template service files in the ```systemd/``` directory.
|
|
2. Edit the service files in the ```systemd/``` directory to enable node-exporter features or change the ports of the components. If you would like to run these as non-root users, [ask ChatGPT](https://chatgpt.com/share/6830a1d9-5fe0-8012-abdd-076e78a12067).
|
|
3. Install the service files: ```make install-services```. This will copy the service files from ```systemd/``` into ```/etc/systemd/system``` and will start the services in systemd. You can also use ```make reinstall-services``` if you have already installed the services and want to install updated versions of the service files.
|
|
|
|
|
|
## Running inside an LXC
|
|
This is intended to be run on the host system. However, it is probably possible to run it in an LXC. Setting up a privileged LXC would probably be the most straightforward, but an unprivileged should be possible. It would just be annoying to set up because you'd have to map UIDs/GIDs between the LXC and host.
|
|
|
|
Either way, you will need to bind-mount the hosts root directory into the LXC, and point both node-exporter and proxmon components to read from the bind-mounted directory instead of the default ```/proc``` directory of the LXC.
|
|
|
|
If for instance you bind-mounted the hosts root directory to ```/host``` in the LXC, you could add the startup parameter to node-exporter: ```--path.rootfs=/host```
|
|
And the following startup parameter to proxmon: ```--path.rootfs /host```. See the **Customizing Services** section.
|
|
|
|
# Connecting
|
|
|
|
## Prometheus
|
|
0. Install Prometheus if you haven't already with the [Prometheus Helper Script](https://community-scripts.github.io/ProxmoxVE/scripts?id=prometheus). Save the web URL displayed at the end of the setup script.
|
|
1. Open your Prometheus LXC console.
|
|
2. Edit the file ```/etc/prometheus/prometheus.yml```
|
|
3. Under ```scrape_configs``` add the following job. You can edit the job_name as you wish. Set the IP address in the targets to the IP of the host you wish to scrape data from.
|
|
4. You can also edit the polling rates in the yml file.
|
|
```
|
|
scrape_configs:
|
|
- job_name: "node"
|
|
static_configs:
|
|
- targets: ['<HOST_IP>:9100', '<HOST_IP>:9101']
|
|
```
|
|
5. Restart prometheus: ```systemctl restart prometheus.service```
|
|
|
|
## Grafana
|
|
0. Install Grafana if you haven't already with the [Grafana Helper Script](https://community-scripts.github.io/ProxmoxVE/scripts?id=grafana). Save the web URL displayed at the end of the setup script.
|
|
1. Login to the Grafana web interface provided at the end of the helper script
|
|
2. On the left side, go to ```Connections->Add new connection```.
|
|
3. Search for and click on "Prometheus".
|
|
4. Click ```Add new data source``` in the top right.
|
|
5. Under ```Connection``` and ```Prometheus server URL``` paste in the web URL of your Prometheus server listed at the end of the Prometheus Helper Script.
|
|
6. On the left side, go to ```Dashboards```
|
|
7. In the top right, click ```New->Import```
|
|
8. Copy the contents of ```Proxmox-Dashboard.json``` from this git repository, and paste it into the text field.
|
|
9. Click ```Import```
|