diff --git a/inventories/filebeat b/inventories/filebeat
index 66c6926eaa7197eee9c4b461ed0eeca01feb0807..408bdd3cd84412ff5cace6f26f7d56ff6faa5b05 100644
--- a/inventories/filebeat
+++ b/inventories/filebeat
@@ -3,10 +3,10 @@ dsoclab-nifi-1 ansible_connection=docker FILEBEAT_FILES='["/opt/nifi/nifi-curren
 dsoclab-nifi-2 ansible_connection=docker FILEBEAT_FILES='["/opt/nifi/nifi-current/logs/nifi-app.log","/opt/nifi/nifi-current/logs/nifi-bootstrap.log","/opt/nifi/nifi-current/logs/nifi-user.log"]' FILEBEAT_LOG_TYPE="nifi" FILEBEAT_LOG_FORMAT="text"
 dsoclab-nifi-3 ansible_connection=docker FILEBEAT_FILES='["/opt/nifi/nifi-current/logs/nifi-app.log","/opt/nifi/nifi-current/logs/nifi-bootstrap.log","/opt/nifi/nifi-current/logs/nifi-user.log"]' FILEBEAT_LOG_TYPE="nifi" FILEBEAT_LOG_FORMAT="text"
 dsoclab-misp ansible_connection=docker FILEBEAT_FILES='["/var/opt/rh/rh-php72/log/php-fpm/*.log","/var/opt/rh/rh-redis32/log/redis/redis.log","/var/log/httpd/*log","/var/log/supervisor/*.log"]' FILEBEAT_LOG_TYPE="misp" FILEBEAT_LOG_FORMAT="text"
-#dsoclab-odfe-1 ansible_connection=docker FILEBEAT_FILES='[""]'
-#dsoclab-odfe-2 ansible_connection=docker FILEBEAT_FILES='[""]'
+#dsoclab-odfe-1 ansible_connection=docker FILEBEAT_FILES='["/usr/share/elasticsearch/logs/dsoclab-cluster_server.json"]' FILEBEAT_LOG_TYPE="odfe1" FILEBEAT_LOG_FORMAT="json"
+#dsoclab-odfe-2 ansible_connection=docker FILEBEAT_FILES='["/usr/share/elasticsearch/logs/dsoclab-cluster_server.json"]' FILEBEAT_LOG_TYPE="odfe2" FILEBEAT_LOG_FORMAT="json"
 dsoclab-kibana ansible_connection=docker FILEBEAT_FILES='["/usr/share/kibana/kblog"]' FILEBEAT_LOG_TYPE="kibana" FILEBEAT_LOG_FORMAT="text"
-#dsoclab-keycloak ansible_connection=docker FILEBEAT_FILES='[""]'
+dsoclab-keycloak ansible_connection=docker FILEBEAT_FILES='["/var/log/supervisor/*.log"]' FILEBEAT_LOG_TYPE="keycloak" FILEBEAT_LOG_FORMAT="text"
 dsoclab-mysql ansible_connection=docker FILEBEAT_FILES='["/var/opt/rh/rh-mariadb103/log/mariadb/mariadb.log"]' FILEBEAT_LOG_TYPE="mysql" FILEBEAT_LOG_FORMAT="text"
 dsoclab-haproxy ansible_connection=docker FILEBEAT_SYSLOG_PORT=9000 FILEBEAT_LOG_TYPE="haproxy" FILEBEAT_LOG_FORMAT="text"
 #dsoclab-zookeeper ansible_connection=docker FILEBEAT_FILES='[""]'
diff --git a/roles/build/files/keycloaksupervisord.conf b/roles/build/files/keycloaksupervisord.conf
new file mode 100644
index 0000000000000000000000000000000000000000..26952490a3e4bfc942c6cb60c5325b029d8b6f1f
--- /dev/null
+++ b/roles/build/files/keycloaksupervisord.conf
@@ -0,0 +1,32 @@
+[unix_http_server]
+file=/tmp/supervisor.sock
+
+[supervisord]
+pidfile=/tmp/supervisord.pid
+nodaemon=true
+logfile=/var/log/supervisor/supervisord.log
+logfile_maxbytes=10MB
+logfile_backups=10
+loglevel=info
+childlogdir=/var/log/supervisor/
+
+[rpcinterface:supervisor]
+supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
+
+[supervisorctl]
+serverurl=unix:///tmp/supervisor.sock
+
+[program:keycloak]
+directory=/opt/jboss/keycloak
+user=jboss
+group=jboss
+#command=/opt/jboss/keycloak/bin/standalone.sh -b 0.0.0.0
+command=/bin/bash -c '/docker-java-home/jre/bin/java -D[Standalone] -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Dorg.jboss.boot.log.file=/opt/jboss/keycloak/standalone/log/server.log -Dlogging.configuration=file:/opt/jboss/keycloak/standalone/configuration/logging.properties -jar /opt/jboss/keycloak/jboss-modules.jar -mp /opt/jboss/keycloak/modules org.jboss.as.standalone -Djboss.home.dir=/opt/jboss/keycloak -Djboss.server.base.dir=/opt/jboss/keycloak/standalone -b 0.0.0.0'
+autostart=false
+autorestart=true
+logfile_maxbytes=10MB
+stdout_logfile_backups = 0
+stderr_logfile_backups = 0
+stderr_logfile = /var/log/supervisor/keycloak_stderr.log
+stdout_logfile = /var/log/supervisor/keycloak_stdout.log
+
diff --git a/roles/build/templates/keycloak/Dockerfile.j2 b/roles/build/templates/keycloak/Dockerfile.j2
index 62b7c554b654021c8b3d57e020a3cc85d44db984..951493a9935de4bf5702aea4b791d8b6df7d3ba4 100644
--- a/roles/build/templates/keycloak/Dockerfile.j2
+++ b/roles/build/templates/keycloak/Dockerfile.j2
@@ -11,7 +11,7 @@ USER root
 #ADD /{{role_path}}/templates/keycloak/keycloak-tools /opt/jboss/tools
 ADD keycloak-tools /opt/jboss/tools
 #ADD ../templates/keycloak/keycloak-tools /opt/jboss/tools
-RUN yum -y install openssl && yum -y clean all && \
+RUN yum -y install openssl supervisor && yum -y clean all && \
     mkdir -p /opt/jboss/ && cd /opt/jboss/ && \
     curl -L $KEYCLOAK_DIST | tar zx && \
     mv /opt/jboss/keycloak-* /opt/jboss/keycloak && \
@@ -38,6 +38,6 @@ EXPOSE 8443
 
 RUN echo 'jboss ALL=(ALL:ALL) NOPASSWD: ALL' >> /etc/sudoers
 
-USER jboss
-ENTRYPOINT ["/bin/bash"]
+COPY keycloaksupervisord.conf /etc/supervisord.conf
+ENTRYPOINT ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]
 
diff --git a/roles/docker/tasks/keycloak.yml b/roles/docker/tasks/keycloak.yml
index c910408f048a5fa76ace4a47ec1c2d32a314c21f..1fddf2a13aa6086a09ef7ad9c0f8ea1c7aa7b3b9 100644
--- a/roles/docker/tasks/keycloak.yml
+++ b/roles/docker/tasks/keycloak.yml
@@ -10,7 +10,6 @@
     networks_cli_compatible: yes
     published_ports:
       - "12443:8443"
-    entrypoint: "/bin/bash"
     interactive: "yes"
   with_items: "{{ groups['keycloakcontainers'] }}"
   tags:
diff --git a/roles/keycloak/tasks/main.yml b/roles/keycloak/tasks/main.yml
index 9c8f81e6635ee43d57a90866accd961304e14760..e3955df4e10053ec0568e2050d09adafd4b3951e 100644
--- a/roles/keycloak/tasks/main.yml
+++ b/roles/keycloak/tasks/main.yml
@@ -1,6 +1,7 @@
 ---
 
 - name: Copy certificates in keycloak x509 conf dir
+  remote_user: jboss
   copy:
     src:  "{{ item.local }}"
     dest: "{{ item.remote }}"
@@ -22,6 +23,7 @@
     - start
 
 - name: Generate Keycloak secure config
+  remote_user: jboss
   command: "/opt/jboss/tools/x509.sh"
   environment:
     X509_CA_BUNDLE: "/etc/x509/ca/ca.crt"
@@ -29,11 +31,13 @@
     - start
 
 - name: Set admin password
+  remote_user: jboss
   command: /opt/jboss/keycloak/bin/add-user-keycloak.sh --user "admin" --password "{{keycloak_adminpass}}"
   tags:
     - start
 
 - name: Configure Keycloak start script
+  remote_user: jboss
   template:
     src: "{{item}}.j2"
     dest: "/opt/jboss/tools/{{item}}"
@@ -46,11 +50,13 @@
 
 
 - name: Start Keycloak IdP
-  command: /opt/jboss/tools/startkeycloak.sh
+  remote_user: root
+  command: "supervisorctl start keycloak"
   tags:
     - start
 
 - name: Wait for Keycloak
+  remote_user: jboss
   wait_for:
     host: "{{groups['keycloakcontainers'][0]}}"
     port: 8443
@@ -60,11 +66,13 @@
     - start
 
 - name: Initialize Keycloak realm
+  remote_user: jboss
   command: /opt/jboss/tools/initkeycloakrealm.sh
   tags:
     - start
 
 - name: Copy secrets from Keycloak
+  remote_user: jboss
   fetch:
     src:  "{{ item.remote }}"
     dest: "{{ item.local }}"
@@ -78,6 +86,7 @@
     - start
 
 - name: Stop Keycloak
-  command: "pkill -SIGTERM -F {{inventory_hostname}}.pid"
+  remote_user: root
+  command: "supervisorctl stop keycloak"
   tags:
     - stop