diff --git a/ansible/roles/cloudkitty/defaults/main.yml b/ansible/roles/cloudkitty/defaults/main.yml
index e828edf9d8e05256e0ef17f102be47cf85e2779f..976e592382787eaf9ef9556fa6ecdaf9526e6354 100644
--- a/ansible/roles/cloudkitty/defaults/main.yml
+++ b/ansible/roles/cloudkitty/defaults/main.yml
@@ -174,6 +174,13 @@ cloudkitty_prometheus_url: "{{ internal_protocol }}://{{ kolla_internal_fqdn | p
 # This means, HTTPS connections without validating the certificate used by prometheus.
 cloudkitty_prometheus_insecure_connections: false
 
+####################
+# Fetcher
+####################
+# Valid options are 'keystone', 'source', 'gnocchi', 'monasca' or 'prometheus'.
+# The default value is 'keystone', which matches the default in CloudKitty.
+cloudkitty_fetcher_backend: "keystone"
+
 ####################
 # Keystone
 ####################
diff --git a/ansible/roles/cloudkitty/templates/cloudkitty.conf.j2 b/ansible/roles/cloudkitty/templates/cloudkitty.conf.j2
index cb04b3b814a1673c8a4ac533b97b2372799dd729..d597780a6ad30a0fd9f8a1ca5ead049357afb9eb 100644
--- a/ansible/roles/cloudkitty/templates/cloudkitty.conf.j2
+++ b/ansible/roles/cloudkitty/templates/cloudkitty.conf.j2
@@ -56,11 +56,6 @@ collector = {{ cloudkitty_collector_backend }}
 metrics_conf = /etc/cloudkitty/{{ cloudkitty_custom_metrics_yaml_file }}
 {% endif %}
 
-[fetcher_keystone]
-keystone_version = 3
-auth_section = keystone_authtoken
-region_name = {{ openstack_region_name }}
-
 {% if cloudkitty_collector_backend == "gnocchi" %}
 [collector_gnocchi]
 auth_section = keystone_authtoken
@@ -84,6 +79,16 @@ cafile = {{ cloudkitty_prometheus_cafile }}
 insecure = {{ cloudkitty_prometheus_insecure_connections }}
 {% endif %}
 
+[fetcher]
+backend = {{ cloudkitty_fetcher_backend }}
+
+{% if cloudkitty_fetcher_backend == "keystone" %}
+[fetcher_keystone]
+keystone_version = 3
+auth_section = keystone_authtoken
+region_name = {{ openstack_region_name }}
+{% endif %}
+
 [api]
 host_ip = {{ api_interface_address }}
 port = {{ cloudkitty_api_port }}
diff --git a/doc/source/reference/rating/cloudkitty-guide.rst b/doc/source/reference/rating/cloudkitty-guide.rst
index b74338d01d011c472c8fc76eb75930e6ce24f9b3..df5f79aa35b30675b6d0e2b60ad97344900c82ff 100644
--- a/doc/source/reference/rating/cloudkitty-guide.rst
+++ b/doc/source/reference/rating/cloudkitty-guide.rst
@@ -51,6 +51,17 @@ Alternatively, to use the Monasca collector backend:
 
    cloudkitty_collector_backend: monasca
 
+CloudKitty Fetcher Backend
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+CloudKitty natively supports multiple fetcher backends.
+
+By default Kolla Ansible uses the ``keystone`` backend. This can be changed
+using the ``cloudkitty_fetcher_backend`` option.
+
+You will need to provide extra configuration for non-default fetchers in
+``/etc/kolla/config/cloudkitty.conf``.
+
 Cloudkitty Storage Backend
 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 
diff --git a/releasenotes/notes/cloudkitty-fetcher-062e109d909449b0.yaml b/releasenotes/notes/cloudkitty-fetcher-062e109d909449b0.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..3ee3b554ae8d11fe1610773e75972a66fb0dbcdb
--- /dev/null
+++ b/releasenotes/notes/cloudkitty-fetcher-062e109d909449b0.yaml
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    Adds support for configuring the CloudKitty fetcher using
+    ``cloudkitty_fetcher_backend``.