diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py
index 8a453c51b6..0d32eadaf9 100644
--- a/ironic/conductor/manager.py
+++ b/ironic/conductor/manager.py
@@ -2832,8 +2832,7 @@ class ConductorManager(base_manager.BaseConductorManager):
             message = {'message_id': uuidutils.generate_uuid(),
                        'instance_uuid': instance_uuid,
                        'node_uuid': node_uuid,
-                       'timestamp': datetime.datetime.utcnow(),
-                       'event_type': 'hardware.ipmi.metrics.update'}
+                       'timestamp': datetime.datetime.utcnow()}
 
             try:
                 lock_purpose = 'getting sensors data'
@@ -2846,6 +2845,16 @@ class ConductorManager(base_manager.BaseConductorManager):
                                   '%s as it is in maintenance mode',
                                   task.node.uuid)
                         continue
+                    # Add the node name, as the name would be hand for other
+                    # notifier plugins
+                    message['node_name'] = task.node.name
+                    # We should convey the proper hardware type,
+                    # which previously was hard coded to ipmi, but other
+                    # drivers were transmitting other values under the
+                    # guise of ipmi.
+                    ev_type = 'hardware.{driver}.metrics'.format(
+                        driver=task.node.driver)
+                    message['event_type'] = ev_type + '.update'
 
                     task.driver.management.validate(task)
                     sensors_data = task.driver.management.get_sensors_data(
@@ -2879,7 +2888,7 @@ class ConductorManager(base_manager.BaseConductorManager):
                     self._filter_out_unsupported_types(sensors_data))
                 if message['payload']:
                     self.sensors_notifier.info(
-                        context, "hardware.ipmi.metrics", message)
+                        context, ev_type, message)
             finally:
                 # Yield on every iteration
                 eventlet.sleep(0)
diff --git a/ironic/tests/unit/conductor/test_manager.py b/ironic/tests/unit/conductor/test_manager.py
index 39c2a3db32..eac27fa6ee 100644
--- a/ironic/tests/unit/conductor/test_manager.py
+++ b/ironic/tests/unit/conductor/test_manager.py
@@ -5592,8 +5592,9 @@ class SensorsTestCase(mgr_utils.ServiceSetUpMixin, db_base.DbTestCase):
         expected_result = {}
         self.assertEqual(expected_result, actual_result)
 
+    @mock.patch.object(messaging.Notifier, 'info', autospec=True)
     @mock.patch.object(task_manager, 'acquire')
-    def test_send_sensor_task(self, acquire_mock):
+    def test_send_sensor_task(self, acquire_mock, notifier_mock):
         nodes = queue.Queue()
         for i in range(5):
             nodes.put_nowait(('fake_uuid-%d' % i, 'fake-hardware', '', None))
@@ -5602,6 +5603,8 @@ class SensorsTestCase(mgr_utils.ServiceSetUpMixin, db_base.DbTestCase):
 
         task = acquire_mock.return_value.__enter__.return_value
         task.node.maintenance = False
+        task.node.driver = 'fake'
+        task.node.name = 'fake_node'
         get_sensors_data_mock = task.driver.management.get_sensors_data
         validate_mock = task.driver.management.validate
         get_sensors_data_mock.return_value = 'fake-sensor-data'
@@ -5609,6 +5612,21 @@ class SensorsTestCase(mgr_utils.ServiceSetUpMixin, db_base.DbTestCase):
         self.assertEqual(5, acquire_mock.call_count)
         self.assertEqual(5, validate_mock.call_count)
         self.assertEqual(5, get_sensors_data_mock.call_count)
+        self.assertEqual(5, notifier_mock.call_count)
+        if six.PY2:
+            # bail out if python2 as matching fails to match the
+            # data structure becasue it requires the order to be consistent
+            # but the mock also records the call dictionary contents in
+            # random order changing with every invocation. :\
+            return
+        n_call = mock.call(mock.ANY, mock.ANY, 'hardware.fake.metrics',
+                           {'event_type': 'hardware.fake.metrics.update',
+                            'node_name': 'fake_node', 'timestamp': mock.ANY,
+                            'message_id': mock.ANY,
+                            'payload': 'fake-sensor-data',
+                            'node_uuid': mock.ANY, 'instance_uuid': None})
+        notifier_mock.assert_has_calls([n_call, n_call, n_call,
+                                        n_call, n_call])
 
     @mock.patch.object(task_manager, 'acquire')
     def test_send_sensor_task_shutdown(self, acquire_mock):
diff --git a/releasenotes/notes/metrics-notifier-information-17858c8e27c795d7.yaml b/releasenotes/notes/metrics-notifier-information-17858c8e27c795d7.yaml
new file mode 100644
index 0000000000..5c9e22903f
--- /dev/null
+++ b/releasenotes/notes/metrics-notifier-information-17858c8e27c795d7.yaml
@@ -0,0 +1,13 @@
+---
+features:
+  - |
+    Notification events for metrics data now contains a ``node_name``
+    field to assist operators with relating metrics data being transmitted
+    by the conductor service.
+fixes:
+  - |
+    Notification event types now include the hardware type name string as
+    opposed to a static string of "ipmi". This allows event processors and
+    operators to understand what the actual notification event data source
+    is as opposed to having to rely upon fingerprints of the data to make
+    such determinations.