diff --git a/metropolis/node/core/mgmt/BUILD.bazel b/metropolis/node/core/mgmt/BUILD.bazel
index a274013..ecec6d1 100644
--- a/metropolis/node/core/mgmt/BUILD.bazel
+++ b/metropolis/node/core/mgmt/BUILD.bazel
@@ -15,6 +15,7 @@
         "//metropolis/node/core/rpc",
         "//metropolis/node/core/update",
         "//metropolis/pkg/logtree",
+        "//metropolis/pkg/logtree/proto",
         "//metropolis/pkg/supervisor",
         "//metropolis/proto/api",
         "//metropolis/proto/common",
@@ -32,6 +33,7 @@
     embed = [":mgmt"],
     deps = [
         "//metropolis/pkg/logtree",
+        "//metropolis/pkg/logtree/proto",
         "//metropolis/proto/api",
         "//metropolis/proto/common",
         "@com_github_google_go_cmp//cmp",
diff --git a/metropolis/node/core/mgmt/svc_logs.go b/metropolis/node/core/mgmt/svc_logs.go
index 6566cee..1a884b3 100644
--- a/metropolis/node/core/mgmt/svc_logs.go
+++ b/metropolis/node/core/mgmt/svc_logs.go
@@ -8,6 +8,7 @@
 	"google.golang.org/grpc/status"
 
 	"source.monogon.dev/metropolis/pkg/logtree"
+	lpb "source.monogon.dev/metropolis/pkg/logtree/proto"
 	"source.monogon.dev/metropolis/proto/api"
 	cpb "source.monogon.dev/metropolis/proto/common"
 )
@@ -24,17 +25,17 @@
 
 // sanitizedEntries returns a deep copy of the given log entries, but replaces
 // all invalid UTF-8 characters with "<INVALID>".
-func sanitizedEntries(entries []*cpb.LogEntry) []*cpb.LogEntry {
-	res := make([]*cpb.LogEntry, len(entries))
+func sanitizedEntries(entries []*lpb.LogEntry) []*lpb.LogEntry {
+	res := make([]*lpb.LogEntry, len(entries))
 	for i, entry := range entries {
-		res[i] = &cpb.LogEntry{
+		res[i] = &lpb.LogEntry{
 			Dn:   entry.Dn,
 			Kind: nil,
 		}
 		switch k := entry.Kind.(type) {
-		case *cpb.LogEntry_Leveled_:
-			leveled := &cpb.LogEntry_Leveled_{
-				Leveled: &cpb.LogEntry_Leveled{
+		case *lpb.LogEntry_Leveled_:
+			leveled := &lpb.LogEntry_Leveled_{
+				Leveled: &lpb.LogEntry_Leveled{
 					Lines:     make([]string, len(k.Leveled.Lines)),
 					Timestamp: k.Leveled.Timestamp,
 					Severity:  k.Leveled.Severity,
@@ -46,9 +47,9 @@
 			}
 			res[i].Kind = leveled
 
-		case *cpb.LogEntry_Raw_:
-			res[i].Kind = &cpb.LogEntry_Raw_{
-				Raw: &cpb.LogEntry_Raw{
+		case *lpb.LogEntry_Raw_:
+			res[i].Kind = &lpb.LogEntry_Raw_{
+				Raw: &lpb.LogEntry_Raw{
 					Data:           strings.ToValidUTF8(k.Raw.Data, "<INVALID>"),
 					OriginalLength: k.Raw.OriginalLength,
 				},
@@ -141,7 +142,7 @@
 	maxChunkSize := 2000
 
 	// Serve all backlog entries in chunks.
-	chunk := make([]*cpb.LogEntry, 0, maxChunkSize)
+	chunk := make([]*lpb.LogEntry, 0, maxChunkSize)
 	for _, entry := range reader.Backlog {
 		p := entry.Proto()
 		if p == nil {
@@ -157,7 +158,7 @@
 			if err != nil {
 				return err
 			}
-			chunk = make([]*cpb.LogEntry, 0, maxChunkSize)
+			chunk = make([]*lpb.LogEntry, 0, maxChunkSize)
 		}
 	}
 
@@ -188,7 +189,7 @@
 			continue
 		}
 		err := srv.Send(&api.GetLogsResponse{
-			StreamEntries: []*cpb.LogEntry{p},
+			StreamEntries: []*lpb.LogEntry{p},
 		})
 		if err != nil {
 			return err
diff --git a/metropolis/node/core/mgmt/svc_logs_test.go b/metropolis/node/core/mgmt/svc_logs_test.go
index fea8068..162de57 100644
--- a/metropolis/node/core/mgmt/svc_logs_test.go
+++ b/metropolis/node/core/mgmt/svc_logs_test.go
@@ -17,6 +17,7 @@
 	"google.golang.org/protobuf/testing/protocmp"
 
 	"source.monogon.dev/metropolis/pkg/logtree"
+	lpb "source.monogon.dev/metropolis/pkg/logtree/proto"
 	"source.monogon.dev/metropolis/proto/api"
 	cpb "source.monogon.dev/metropolis/proto/common"
 )
@@ -50,19 +51,19 @@
 	return s, cl
 }
 
-func cleanLogEntry(e *cpb.LogEntry) {
+func cleanLogEntry(e *lpb.LogEntry) {
 	// Filter out bits that change too much to test them.
 	switch k := e.Kind.(type) {
-	case *cpb.LogEntry_Leveled_:
+	case *lpb.LogEntry_Leveled_:
 		k.Leveled.Location = ""
 		k.Leveled.Timestamp = nil
 	}
 }
 
-func mkRawEntry(dn string, line string) *cpb.LogEntry {
-	return &cpb.LogEntry{
-		Dn: dn, Kind: &cpb.LogEntry_Raw_{
-			Raw: &cpb.LogEntry_Raw{
+func mkRawEntry(dn string, line string) *lpb.LogEntry {
+	return &lpb.LogEntry{
+		Dn: dn, Kind: &lpb.LogEntry_Raw_{
+			Raw: &lpb.LogEntry_Raw{
 				Data:           line,
 				OriginalLength: int64(len(line)),
 			},
@@ -70,19 +71,19 @@
 	}
 }
 
-func mkLeveledEntry(dn string, severity string, lines string) *cpb.LogEntry {
-	var sev cpb.LeveledLogSeverity
+func mkLeveledEntry(dn string, severity string, lines string) *lpb.LogEntry {
+	var sev lpb.LeveledLogSeverity
 	switch severity {
 	case "i":
-		sev = cpb.LeveledLogSeverity_INFO
+		sev = lpb.LeveledLogSeverity_INFO
 	case "w":
-		sev = cpb.LeveledLogSeverity_WARNING
+		sev = lpb.LeveledLogSeverity_WARNING
 	case "e":
-		sev = cpb.LeveledLogSeverity_ERROR
+		sev = lpb.LeveledLogSeverity_ERROR
 	}
-	return &cpb.LogEntry{
-		Dn: dn, Kind: &cpb.LogEntry_Leveled_{
-			Leveled: &cpb.LogEntry_Leveled{
+	return &lpb.LogEntry{
+		Dn: dn, Kind: &lpb.LogEntry_Leveled_{
+			Leveled: &lpb.LogEntry_Leveled{
 				Lines:    strings.Split(lines, "\n"),
 				Severity: sev,
 			},
@@ -90,7 +91,7 @@
 	}
 }
 
-func drainLogs(t *testing.T, srv api.NodeManagement_LogsClient) (res []*cpb.LogEntry) {
+func drainLogs(t *testing.T, srv api.NodeManagement_LogsClient) (res []*lpb.LogEntry) {
 	t.Helper()
 	for {
 		ev, err := srv.Recv()
@@ -153,12 +154,12 @@
 	}
 	for i, te := range []struct {
 		req  *api.GetLogsRequest
-		want []*cpb.LogEntry
+		want []*lpb.LogEntry
 	}{
 		{
 			// Test all backlog.
 			req: mkReq("main.roleserver.kubernetes", -1),
-			want: []*cpb.LogEntry{
+			want: []*lpb.LogEntry{
 				mkLeveledEntry("main.roleserver.kubernetes", "i", "Starting kubernetes..."),
 				mkLeveledEntry("main.roleserver.kubernetes", "i", "Kubernetes version: 1.21.37"),
 			},
@@ -166,7 +167,7 @@
 		{
 			// Test exact backlog.
 			req: mkReq("main.roleserver.kubernetes", 1),
-			want: []*cpb.LogEntry{
+			want: []*lpb.LogEntry{
 				mkLeveledEntry("main.roleserver.kubernetes", "i", "Kubernetes version: 1.21.37"),
 			},
 		},
@@ -178,7 +179,7 @@
 		{
 			// Test recursion with backlog.
 			req: mkRecursive(mkReq("main.roleserver", 2)),
-			want: []*cpb.LogEntry{
+			want: []*lpb.LogEntry{
 				mkLeveledEntry("main.roleserver.kubernetes", "i", "Kubernetes version: 1.21.37"),
 				mkLeveledEntry("main.roleserver.controlplane", "i", "Starting etcd..."),
 			},
@@ -186,7 +187,7 @@
 		{
 			// Test invalid utf-8 in log data
 			req: mkReq("main.weirdo", 1),
-			want: []*cpb.LogEntry{
+			want: []*lpb.LogEntry{
 				mkLeveledEntry("main.weirdo", "i", "Here comes some invalid utf-8: a<INVALID>z"),
 			},
 		},
@@ -234,7 +235,7 @@
 	}
 
 	// Pipe returned logs into a channel for analysis.
-	logC := make(chan *cpb.LogEntry)
+	logC := make(chan *lpb.LogEntry)
 	go func() {
 		for {
 			ev, err := srv.Recv()
@@ -292,7 +293,7 @@
 
 	for i, te := range []struct {
 		req  *api.GetLogsRequest
-		want []*cpb.LogEntry
+		want []*lpb.LogEntry
 	}{
 		// Case 0: request given level
 		{
@@ -304,13 +305,13 @@
 					{
 						Filter: &cpb.LogFilter_LeveledWithMinimumSeverity_{
 							LeveledWithMinimumSeverity: &cpb.LogFilter_LeveledWithMinimumSeverity{
-								Minimum: cpb.LeveledLogSeverity_WARNING,
+								Minimum: lpb.LeveledLogSeverity_WARNING,
 							},
 						},
 					},
 				},
 			},
-			want: []*cpb.LogEntry{
+			want: []*lpb.LogEntry{
 				mkLeveledEntry("main", "w", "Something failed!"),
 				mkLeveledEntry("main", "e", "Something failed very hard!"),
 			},
@@ -329,7 +330,7 @@
 					},
 				},
 			},
-			want: []*cpb.LogEntry{
+			want: []*lpb.LogEntry{
 				mkRawEntry("main", "medium rare"),
 			},
 		},
@@ -347,7 +348,7 @@
 					},
 				},
 			},
-			want: []*cpb.LogEntry{
+			want: []*lpb.LogEntry{
 				mkLeveledEntry("main", "i", "Hello"),
 				mkLeveledEntry("main", "i", "Starting..."),
 				mkLeveledEntry("main", "w", "Something failed!"),
