diff --git a/changelog.d/7771.misc b/changelog.d/7771.misc
new file mode 100644
index 0000000000000000000000000000000000000000..1fc29206ac5db1bd51a11c953e8b655db5d85320
--- /dev/null
+++ b/changelog.d/7771.misc
@@ -0,0 +1 @@
+Add some metrics for inbound and outbound federation latencies: `synapse_federation_server_pdu_process_time` and `synapse_event_processing_lag_by_event`.
diff --git a/synapse/federation/sender/__init__.py b/synapse/federation/sender/__init__.py
index 23fb5156834f0935a531e0faee0b4af3bcb95cc3..464d7a41ded681258242be11f4650a4caa45de87 100644
--- a/synapse/federation/sender/__init__.py
+++ b/synapse/federation/sender/__init__.py
@@ -209,7 +209,7 @@ class FederationSender(object):
 
                         synapse.metrics.event_processing_lag_by_event.labels(
                             "federation_sender"
-                        ).observe(now - ts)
+                        ).observe((now - ts) / 1000)
 
                 async def handle_room_events(events: Iterable[EventBase]) -> None:
                     with Measure(self.clock, "handle_room_events"):
diff --git a/synapse/handlers/appservice.py b/synapse/handlers/appservice.py
index f7d9fd621ef2fd32161dcabc26a28d4ad2f2ab31..904c96eeec292fb43a8c5f8364e7681541e7d91e 100644
--- a/synapse/handlers/appservice.py
+++ b/synapse/handlers/appservice.py
@@ -118,7 +118,7 @@ class ApplicationServicesHandler(object):
                         ts = yield self.store.get_received_ts(event.event_id)
                         synapse.metrics.event_processing_lag_by_event.labels(
                             "appservice_sender"
-                        ).observe(now - ts)
+                        ).observe((now - ts) / 1000)
 
                     @defer.inlineCallbacks
                     def handle_room_events(events):