diff --git a/sysutils/node_exporter/Makefile b/sysutils/node_exporter/Makefile
new file mode 100644
index 000000000..61514117a
--- /dev/null
+++ b/sysutils/node_exporter/Makefile
@@ -0,0 +1,7 @@
+PLUGIN_NAME= node_exporter
+PLUGIN_VERSION= 0.1.0
+PLUGIN_COMMENT= Prometheus Node Exporter
+PLUGIN_DEPENDS= node_exporter
+PLUGIN_MAINTAINER= dharrigan@gmail.com
+
+.include "../../Mk/plugins.mk"
diff --git a/sysutils/node_exporter/pkg-descr b/sysutils/node_exporter/pkg-descr
new file mode 100644
index 000000000..92c19ad60
--- /dev/null
+++ b/sysutils/node_exporter/pkg-descr
@@ -0,0 +1,4 @@
+Prometheus exporter for hardware and OS metrics exposed by *NIX kernels,
+written in Go with pluggable metric collectors.
+
+WWW: https://github.com/prometheus/node_exporter
diff --git a/sysutils/node_exporter/src/etc/inc/plugins.inc.d/node_exporter.inc b/sysutils/node_exporter/src/etc/inc/plugins.inc.d/node_exporter.inc
new file mode 100644
index 000000000..99bfa38d9
--- /dev/null
+++ b/sysutils/node_exporter/src/etc/inc/plugins.inc.d/node_exporter.inc
@@ -0,0 +1,52 @@
+enabled->__toString() == "0") {
+ return $services;
+ }
+
+ $services[] = array(
+ 'description' => gettext('Prometheus Node Exporter'),
+ 'configd' => array(
+ 'restart' => array('node_exporter restart'),
+ 'start' => array('node_exporter start'),
+ 'stop' => array('node_exporter stop'),
+ 'status' => array('node_exporter status'),
+ ),
+ 'name' => 'node_exporter',
+ 'pidfile' => '/var/run/node_exporter.pid'
+ );
+
+ return $services;
+}
diff --git a/sysutils/node_exporter/src/opnsense/mvc/app/controllers/OPNsense/NodeExporter/Api/GeneralController.php b/sysutils/node_exporter/src/opnsense/mvc/app/controllers/OPNsense/NodeExporter/Api/GeneralController.php
new file mode 100644
index 000000000..754cbc577
--- /dev/null
+++ b/sysutils/node_exporter/src/opnsense/mvc/app/controllers/OPNsense/NodeExporter/Api/GeneralController.php
@@ -0,0 +1,40 @@
+view->pick('OPNsense/NodeExporter/general');
+ $this->view->generalForm = $this->getForm("general");
+ }
+}
diff --git a/sysutils/node_exporter/src/opnsense/mvc/app/controllers/OPNsense/NodeExporter/forms/general.xml b/sysutils/node_exporter/src/opnsense/mvc/app/controllers/OPNsense/NodeExporter/forms/general.xml
new file mode 100644
index 000000000..97e4196c1
--- /dev/null
+++ b/sysutils/node_exporter/src/opnsense/mvc/app/controllers/OPNsense/NodeExporter/forms/general.xml
@@ -0,0 +1,80 @@
+
+ {{ partial("layout_partials/base_form", ['fields':generalForm,'id':'frm_general_settings']) }}
+
+
+
+
+
diff --git a/sysutils/node_exporter/src/opnsense/service/conf/actions.d/actions_node_exporter.conf b/sysutils/node_exporter/src/opnsense/service/conf/actions.d/actions_node_exporter.conf
new file mode 100644
index 000000000..76f960cc8
--- /dev/null
+++ b/sysutils/node_exporter/src/opnsense/service/conf/actions.d/actions_node_exporter.conf
@@ -0,0 +1,23 @@
+[start]
+command: /usr/local/etc/rc.d/node_exporter start
+parameters:
+type: script
+message: Start Node Exporter Service
+
+[stop]
+command: /usr/local/etc/rc.d/node_exporter stop
+parameters:
+type: script
+message: Stop Node Exporter Service
+
+[restart]
+command: /usr/local/etc/rc.d/node_exporter restart
+parameters:
+type: script
+message: Restart Node Exporter Service
+
+[status]
+command: /usr/local/etc/rc.d/node_exporter status;exit 0
+parameters:
+type: script_output
+message: Request Node Exporter Status
diff --git a/sysutils/node_exporter/src/opnsense/service/templates/OPNsense/NodeExporter/+TARGETS b/sysutils/node_exporter/src/opnsense/service/templates/OPNsense/NodeExporter/+TARGETS
new file mode 100644
index 000000000..aac7dcbfc
--- /dev/null
+++ b/sysutils/node_exporter/src/opnsense/service/templates/OPNsense/NodeExporter/+TARGETS
@@ -0,0 +1 @@
+node_exporter:/etc/rc.conf.d/node_exporter
diff --git a/sysutils/node_exporter/src/opnsense/service/templates/OPNsense/NodeExporter/node_exporter b/sysutils/node_exporter/src/opnsense/service/templates/OPNsense/NodeExporter/node_exporter
new file mode 100644
index 000000000..0e74613f4
--- /dev/null
+++ b/sysutils/node_exporter/src/opnsense/service/templates/OPNsense/NodeExporter/node_exporter
@@ -0,0 +1,52 @@
+#
+# This file is automatically generated. Do not manually edit this file - changes *will* be lost!
+#
+{% if helpers.exists('OPNsense.NodeExporter.enabled') and OPNsense.NodeExporter.enabled == '1' %}
+
+{%- set collector = "--collector." -%}
+
+{%- if OPNsense.NodeExporter.cpu == '1' -%}
+ {%- set cpu = collector + "cpu " -%}
+{%- endif -%}
+
+{%- if OPNsense.NodeExporter.exec == '1' -%}
+ {%- set exec = collector + "exec " -%}
+{%- endif -%}
+
+{%- if OPNsense.NodeExporter.filesystem == '1' -%}
+ {%- set filesystem = collector + "filesystem " -%}
+{%- endif -%}
+
+{%- if OPNsense.NodeExporter.loadavg == '1' -%}
+ {%- set loadavg = collector + "loadavg " -%}
+{%- endif -%}
+
+{%- if OPNsense.NodeExporter.meminfo == '1' -%}
+ {%- set meminfo = collector + "meminfo " -%}
+{%- endif -%}
+
+{%- if OPNsense.NodeExporter.netdev == '1' -%}
+ {%- set netdev = collector + "netdev " -%}
+{%- endif -%}
+
+{%- if OPNsense.NodeExporter.ntp == '1' -%}
+ {%- set ntp = collector + "ntp " -%}
+{%- endif -%}
+
+{%- if OPNsense.NodeExporter.time == '1' -%}
+ {%- set time = collector + "time " -%}
+{%- endif -%}
+
+{%- if OPNsense.NodeExporter.devstat == '1' -%}
+ {%- set devstat = collector + "devstat " -%}
+{%- endif -%}
+
+node_exporter_args="{{ cpu }}{{ exec }}{{ filesystem }}{{ loadavg }}{{ meminfo }}{{ netdev }}{{ ntp }}{{ time }}{{ devstat }}"
+node_exporter_listen_address="{{ OPNsense.NodeExporter.listenaddress }}:{{ OPNsense.NodeExporter.listenport }}"
+node_exporter_enable="YES"
+
+{%- else -%}
+
+node_exporter_enable="NO"
+
+{%- endif -%}