diff --git a/ansible/group_vars/all/kolla b/ansible/group_vars/all/kolla
index 4a282fb614c210b169e2eb516ea6f0b28591b477..0362a9afd428471802f64ce8ba63929a83579640 100644
--- a/ansible/group_vars/all/kolla
+++ b/ansible/group_vars/all/kolla
@@ -125,7 +125,7 @@ overcloud_container_image_regex_map:
   - regex: dnsmasq
     enabled: "{{ kolla_enable_ironic | bool }}"
   - regex: elasticsearch
-    enabled: "{{ kolla_enable_elasticsearch | bool }}"
+    enabled: "{{ kolla_enable_elasticsearch | bool or kolla_enable_monasca | bool }}"
   - regex: etcd
     enabled: "{{ kolla_enable_etcd | bool }}"
   - regex: fluentd
@@ -133,7 +133,7 @@ overcloud_container_image_regex_map:
   - regex: glance
     enabled: "{{ kolla_enable_glance | bool }}"
   - regex: grafana
-    enabled: "{{ kolla_enable_grafana | bool }}"
+    enabled: "{{ kolla_enable_grafana | bool or kolla_enable_monasca | bool }}"
   - regex: gnocchi
     enabled: "{{ kolla_enable_gnocchi | bool }}"
   - regex: ^haproxy$
@@ -143,7 +143,7 @@ overcloud_container_image_regex_map:
   - regex: horizon
     enabled: "{{ kolla_enable_horizon | bool }}"
   - regex: influxdb
-    enabled: "{{ kolla_enable_influxdb | bool }}"
+    enabled: "{{ kolla_enable_influxdb | bool or kolla_enable_monasca | bool }}"
   - regex: ironic
     enabled: "{{ kolla_enable_ironic | bool }}"
   - regex: ironic-neutron-agent
@@ -151,13 +151,13 @@ overcloud_container_image_regex_map:
   - regex: iscsid
     enabled: "{{ kolla_enable_cinder | bool or kolla_enable_ironic | bool }}"
   - regex: kafka
-    enabled: "{{ kolla_enable_kafka | bool }}"
+    enabled: "{{ kolla_enable_kafka | bool or kolla_enable_monasca | bool }}"
   - regex: keepalived
     enabled: "{{ kolla_enable_haproxy | bool }}"
   - regex: keystone
     enabled: True
   - regex: kibana
-    enabled: "{{ kolla_enable_kibana | bool }}"
+    enabled: "{{ kolla_enable_kibana | bool or kolla_enable_monasca | bool }}"
   - regex: kolla-toolbox
     enabled: True
   - regex: magnum
diff --git a/ansible/roles/kolla-ansible/templates/overcloud-services.j2 b/ansible/roles/kolla-ansible/templates/overcloud-services.j2
index 69d986eb231b1e8ed8cd835e660ed178041e794a..f0278bdde1ff5c4d3aa28d6cdc88a051395d4b2a 100644
--- a/ansible/roles/kolla-ansible/templates/overcloud-services.j2
+++ b/ansible/roles/kolla-ansible/templates/overcloud-services.j2
@@ -191,6 +191,24 @@ monasca
 [monasca-log-api:children]
 monasca
 
+[monasca-log-transformer:children]
+monasca
+
+[monasca-log-persister:children]
+monasca
+
+[monasca-log-metrics:children]
+monasca
+
+[monasca-thresh:children]
+monasca
+
+[monasca-notification:children]
+monasca
+
+[monasca-persister:children]
+monasca
+
 # Murano
 [murano-api:children]
 murano
diff --git a/ansible/roles/kolla-ansible/tests/test-defaults.yml b/ansible/roles/kolla-ansible/tests/test-defaults.yml
index bf43091b93e4f48d8232e9ef3705661ec862ce30..31cb585a379e439a9f59d3b1097f1b3ae72899bd 100644
--- a/ansible/roles/kolla-ansible/tests/test-defaults.yml
+++ b/ansible/roles/kolla-ansible/tests/test-defaults.yml
@@ -97,6 +97,7 @@
               - enable_kafka
               - enable_influxdb
               - enable_mariadb
+              - enable_monasca
               - enable_neutron
               - enable_nova
               - enable_zookeeper
diff --git a/ansible/roles/kolla-ansible/tests/test-extras.yml b/ansible/roles/kolla-ansible/tests/test-extras.yml
index ef54c05e0ed282aa811d596053a6c675e74f4f8f..12cb9d652396810b8052087030fceafd04e16989 100644
--- a/ansible/roles/kolla-ansible/tests/test-extras.yml
+++ b/ansible/roles/kolla-ansible/tests/test-extras.yml
@@ -260,6 +260,7 @@
               #enable_manila_backend_hnas: True
               #enable_mariadb: True
               #enable_mistral: True
+              #enable_monasca: True
               #enable_mongodb: True
               #enable_murano: True
               #enable_multipathd: True
diff --git a/ansible/roles/kolla-openstack/defaults/main.yml b/ansible/roles/kolla-openstack/defaults/main.yml
index 284b189b258f0f365eee360d77a88854b7188bb4..27caa11472cdbf8c9db914841de1b82713a5972b 100644
--- a/ansible/roles/kolla-openstack/defaults/main.yml
+++ b/ansible/roles/kolla-openstack/defaults/main.yml
@@ -294,9 +294,6 @@ kolla_enable_manila:
 ###############################################################################
 # Monasca configuration.
 
-# NOTE: Support for Monasca in Kolla is a work in progress. This currently
-# relies on an out-of-band Monasca installation.
-
 # Whether to enable Monasca.
 kolla_enable_monasca:
 
diff --git a/ansible/roles/kolla-openstack/molecule/default/tests/test_default.py b/ansible/roles/kolla-openstack/molecule/default/tests/test_default.py
index c86d96e7d543ad3dcb6273696161e322ad2ec92d..bf86823a7df0aad453fd10f0c9dacd04ec3f786d 100644
--- a/ansible/roles/kolla-openstack/molecule/default/tests/test_default.py
+++ b/ansible/roles/kolla-openstack/molecule/default/tests/test_default.py
@@ -50,6 +50,7 @@ def test_service_config_directory(host, path):
      'magnum',
      'manila',
      'mariadb',
+     'monasca',
      'murano',
      'neutron',
      'nova',
diff --git a/ansible/roles/kolla-openstack/molecule/enable-everything/molecule.yml b/ansible/roles/kolla-openstack/molecule/enable-everything/molecule.yml
index c23867463c3a9913dc00576fa01ac3691ae88ea9..fca21ca7aa121cafc31237819de4c91c07fc2e92 100644
--- a/ansible/roles/kolla-openstack/molecule/enable-everything/molecule.yml
+++ b/ansible/roles/kolla-openstack/molecule/enable-everything/molecule.yml
@@ -67,8 +67,8 @@ provisioner:
         kolla_extra_mariadb: |
           [extra-galera.cnf]
           foo=bar
-        kolla_enable_murano: true
         kolla_enable_monasca: true
+        kolla_enable_murano: true
         kolla_extra_murano: |
           [extra-murano.conf]
           foo=bar
diff --git a/ansible/roles/kolla-openstack/molecule/enable-everything/tests/test_default.py b/ansible/roles/kolla-openstack/molecule/enable-everything/tests/test_default.py
index 089e27edd703a284b4d131e39a0bf75143bac466..c18be65d3df40bb950289872269d7c36107aa392 100644
--- a/ansible/roles/kolla-openstack/molecule/enable-everything/tests/test_default.py
+++ b/ansible/roles/kolla-openstack/molecule/enable-everything/tests/test_default.py
@@ -43,6 +43,7 @@ testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
      'magnum',
      'manila',
      'mariadb',
+     'monasca',
      'murano',
      'neutron',
      'nova',
diff --git a/ansible/roles/kolla-openstack/vars/main.yml b/ansible/roles/kolla-openstack/vars/main.yml
index b9e1861b2b98a092992edcf269b569503ae889a6..4dca83621296f3ab2a6645d0298fe50e39d6bb22 100644
--- a/ansible/roles/kolla-openstack/vars/main.yml
+++ b/ansible/roles/kolla-openstack/vars/main.yml
@@ -96,6 +96,11 @@ kolla_openstack_custom_config:
     dest: "{{ kolla_node_custom_config_path }}/mariadb"
     patterns: "*"
     enabled: "{{ kolla_enable_mariadb }}"
+  # Monasca.
+  - src: "{{ kolla_extra_config_path }}/monasca"
+    dest: "{{ kolla_node_custom_config_path }}/monasca"
+    patterns: "*"
+    enabled: "{{ kolla_enable_monasca }}"
   # Murano.
   - src: "{{ kolla_extra_config_path }}/murano"
     dest: "{{ kolla_node_custom_config_path }}/murano"
diff --git a/releasenotes/notes/add-monasca-3e6da709b3b4c269.yaml b/releasenotes/notes/add-monasca-3e6da709b3b4c269.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..9b7bc4352a0704aa0c26ecf1fea01241f4671316
--- /dev/null
+++ b/releasenotes/notes/add-monasca-3e6da709b3b4c269.yaml
@@ -0,0 +1,4 @@
+---
+features:
+  - Add support for OpenStack Monasca which provides monitoring-as-a-service
+    for OpenStack at scale.