diff --git a/modules/openstack_project/files/logstash/jenkins-log-client.yaml b/modules/openstack_project/files/logstash/jenkins-log-client.yaml
index 9f4c8d18b2..19af882589 100644
--- a/modules/openstack_project/files/logstash/jenkins-log-client.yaml
+++ b/modules/openstack_project/files/logstash/jenkins-log-client.yaml
@@ -279,3 +279,6 @@ source-files:
       - screen
       - apachecombined
     job-filter: '.*grenade.*'
+  - name: logs/libvirtd.txt
+    tags:
+      - libvirtd
diff --git a/modules/openstack_project/templates/logstash/indexer.conf.erb b/modules/openstack_project/templates/logstash/indexer.conf.erb
index 004678def0..d0abcc0d1b 100644
--- a/modules/openstack_project/templates/logstash/indexer.conf.erb
+++ b/modules/openstack_project/templates/logstash/indexer.conf.erb
@@ -78,6 +78,13 @@ filter {
       add_field => { "logdate" => "%{timestamp}" }
       add_field => { "logmessage" => "%{verb} %{request} %{response}" }
     }
+  } else if "libvirtd" in [tags] {
+    grok {
+      # libvirtd grok filter adapted from
+      # https://github.com/OpenStratus/openstack-logstash/blob/master/agent.conf
+      match => { "message" => "%{TIMESTAMP_ISO8601:logdate}:%{SPACE}%{NUMBER:pid}:%{SPACE}%{LOGLEVEL:loglevel}%{SPACE}:%{SPACE}%{GREEDYDATA:logmessage}" }
+      add_field => { "received_at" => "%{@timestamp}" }
+    }
   } else if "syslog" in [tags] {
     grok {
       # Syslog grok filter adapted from