diff --git a/pom.xml b/pom.xml
index 0e58a253bb318d7d3a89442cbb1432f7009961ac..9298671601f1680f1781e344ae054e0a0f6a5874 100644
--- a/pom.xml
+++ b/pom.xml
@@ -407,11 +407,6 @@
 			<artifactId>swagger-annotations</artifactId>
 			<version>1.5.22</version>
 		</dependency>
-		<dependency>
-			<groupId>com.codahale.metrics</groupId>
-			<artifactId>metrics-annotation</artifactId>
-			<version>3.0.2</version>
-		</dependency>
 		<dependency>
 			<groupId>org.checkerframework</groupId>
 			<artifactId>checker-qual</artifactId>
@@ -453,6 +448,12 @@
 					<source>1.8</source>
 					<target>1.8</target>
 					<aspectLibraries>
+						<!-- Disabled for now, see https://github.com/micrometer-metrics/micrometer/issues/1149.
+						<aspectLibrary>
+							<groupId>io.micrometer</groupId>
+							<artifactId>micrometer-core</artifactId>
+						</aspectLibrary>
+						-->
 						<aspectLibrary>
 							<groupId>org.springframework</groupId>
 							<artifactId>spring-aspects</artifactId>
diff --git a/src/main/java/de/thm/arsnova/config/AppConfig.java b/src/main/java/de/thm/arsnova/config/AppConfig.java
index ddce39e4d11ada14d229b6101f779edb8d98f7ea..664b4fa4ca0a595b80df29fa4d1e55d865668922 100644
--- a/src/main/java/de/thm/arsnova/config/AppConfig.java
+++ b/src/main/java/de/thm/arsnova/config/AppConfig.java
@@ -37,7 +37,12 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
 import org.springframework.cache.CacheManager;
 import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.cache.concurrent.ConcurrentMapCacheManager;
-import org.springframework.context.annotation.*;
+import org.springframework.context.annotation.AdviceMode;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Profile;
+import org.springframework.context.annotation.PropertySource;
 import org.springframework.context.annotation.aspectj.EnableSpringConfigured;
 import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
 import org.springframework.core.env.Environment;
diff --git a/src/main/java/de/thm/arsnova/service/UserServiceImpl.java b/src/main/java/de/thm/arsnova/service/UserServiceImpl.java
index 48ed77f620132206fcb7d64e94a08e18f1419e04..9c399600660ef1fa1f39fe7f77bde2bd2878a4e0 100644
--- a/src/main/java/de/thm/arsnova/service/UserServiceImpl.java
+++ b/src/main/java/de/thm/arsnova/service/UserServiceImpl.java
@@ -18,7 +18,6 @@
 
 package de.thm.arsnova.service;
 
-import com.codahale.metrics.annotation.Gauge;
 import java.io.IOException;
 import java.text.MessageFormat;
 import java.util.ArrayList;
@@ -66,7 +65,6 @@ import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.Validator;
 import org.springframework.web.util.UriUtils;
-import org.stagemonitor.core.metrics.MonitorGauges;
 
 import de.thm.arsnova.config.properties.AuthenticationProviderProperties;
 import de.thm.arsnova.config.properties.SecurityProperties;
@@ -87,7 +85,6 @@ import de.thm.arsnova.web.exceptions.UnauthorizedException;
  * Performs all user related operations.
  */
 @Service
-@MonitorGauges
 public class UserServiceImpl extends DefaultEntityServiceImpl<UserProfile> implements UserService {
 
 	private static final int LOGIN_TRY_RESET_DELAY_MS = 30 * 1000;
@@ -324,7 +321,6 @@ public class UserServiceImpl extends DefaultEntityServiceImpl<UserProfile> imple
 	}
 
 	@Override
-	@Gauge
 	public int loggedInUsers() {
 		return userIdToRoomId.size();
 	}
diff --git a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
index 4717df44f9683b4b0e45e25702e09e5346ecf3ad..d74a42f50d02de163b99d8ee7ec7dd08b7242949 100644
--- a/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
+++ b/src/main/java/de/thm/arsnova/websocket/ArsnovaSocketioServerImpl.java
@@ -18,7 +18,6 @@
 
 package de.thm.arsnova.websocket;
 
-import com.codahale.metrics.annotation.Timed;
 import com.corundumstudio.socketio.AckRequest;
 import com.corundumstudio.socketio.Configuration;
 import com.corundumstudio.socketio.SocketConfig;
@@ -29,6 +28,7 @@ import com.corundumstudio.socketio.listener.DataListener;
 import com.corundumstudio.socketio.listener.DisconnectListener;
 import com.corundumstudio.socketio.protocol.Packet;
 import com.corundumstudio.socketio.protocol.PacketType;
+import io.micrometer.core.annotation.Timed;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -153,7 +153,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 
 		server.addEventListener("setFeedback", Feedback.class, new DataListener<Feedback>() {
 			@Override
-			@Timed(name = "setFeedbackEvent.onData")
+			@Timed("setFeedbackEvent.onData")
 			public void onData(final SocketIOClient client, final Feedback data, final AckRequest ackSender) {
 				final String userId = userService.getUserIdToSocketId(client.getSessionId());
 				if (userId == null) {
@@ -177,7 +177,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 
 		server.addEventListener("setSession", Room.class, new DataListener<Room>() {
 			@Override
-			@Timed(name = "setSessionEvent.onData")
+			@Timed("setSessionEvent.onData")
 			public void onData(final SocketIOClient client, final Room room, final AckRequest ackSender) {
 				final String userId = userService.getUserIdToSocketId(client.getSessionId());
 				if (null == userId) {
@@ -211,7 +211,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 				Comment.class,
 				new DataListener<Comment>() {
 					@Override
-					@Timed(name = "readInterposedQuestionEvent.onData")
+					@Timed("readInterposedQuestionEvent.onData")
 					public void onData(
 							final SocketIOClient client,
 							final Comment comment,
@@ -244,7 +244,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 				ScoreOptions.class,
 				new DataListener<ScoreOptions>() {
 					@Override
-					@Timed(name = "setLearningProgressOptionsEvent.onData")
+					@Timed("setLearningProgressOptionsEvent.onData")
 					public void onData(
 							final SocketIOClient client, final ScoreOptions scoreOptions, final AckRequest ack) {
 						throw new UnsupportedOperationException("Not implemented.");
@@ -254,7 +254,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 
 		server.addConnectListener(new ConnectListener() {
 			@Override
-			@Timed
+			@Timed("onConnect")
 			public void onConnect(final SocketIOClient client) {
 
 			}
@@ -262,7 +262,7 @@ public class ArsnovaSocketioServerImpl implements ArsnovaSocketioServer {
 
 		server.addDisconnectListener(new DisconnectListener() {
 			@Override
-			@Timed
+			@Timed("onDisconnect")
 			public void onDisconnect(final SocketIOClient client) {
 				if (
 						userService == null
diff --git a/src/main/java/org/stagemonitor/core/metrics/MonitorGauges.java b/src/main/java/org/stagemonitor/core/metrics/MonitorGauges.java
deleted file mode 100644
index 4e1da49e4e0cb5a9446d958ecc8c6621bc8a1330..0000000000000000000000000000000000000000
--- a/src/main/java/org/stagemonitor/core/metrics/MonitorGauges.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.stagemonitor.core.metrics;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * When a type is marked with this annotation, the creation of gauges with
- * {@link com.codahale.metrics.annotation.Gauge} is activated for that type.
- *
- * <pre><code>
- *     \@MonitorGauges
- *     public class Queue {
- *         \@Gauge(name = "queueSize")
- *         public int getQueueSize() {
- *             return queue.size;
- *         }
- *     }
- * </code></pre>
- */
-@Target(ElementType.TYPE)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface MonitorGauges {
-}
diff --git a/src/main/resources/META-INF/aop.xml b/src/main/resources/META-INF/aop.xml
index fe4871b30ed1a8777f4caccb3c138cc8747a843c..9887fa3ffc05ec45fa30845d1bf7576defd76c93 100644
--- a/src/main/resources/META-INF/aop.xml
+++ b/src/main/resources/META-INF/aop.xml
@@ -9,5 +9,9 @@
 		<aspect name="de.thm.arsnova.web.RangeAspect"/>
 		<aspect name="de.thm.arsnova.web.InternalEntityAspect"/>
 		<aspect name="de.thm.arsnova.websocket.WebsocketAuthenticationAspect"/>
+		<!-- Micrometer does not have a aop.xml config for its aspects. -->
+		<!-- Disabled for now, see https://github.com/micrometer-metrics/micrometer/issues/1149.
+		<aspect name="io.micrometer.core.aop.TimedAspect"/>
+		-->
 	</aspects>
 </aspectj>