Skip to main content

cmind/logs/v1/log_service.proto

Package: cmind.logs.v1

Messages

LogEntry

LogEntry is intentionally narrow — only the OpenTelemetry log fields the portal currently renders. Add fields when there's a concrete consumer.

FieldTypeNumberDescription
timestampgoogle.protobuf.Timestamp1
severityTextstring2
bodystring3
logAttributesmap<string, string>4log_attributes carries application-level structured-log keys that the portal uses for trace stitching (trace_id, parent_span_id, event_type) and structured-log filtering.

ListModelDeploymentLogsRequest

FieldTypeNumberDescription
deploymentNamestring1
limituint322Row-pagination knobs. Will likely migrate to platform-wide cursor paging when that primitive lands.
pageOffsetuint323
startTimegoogle.protobuf.Timestamp4Unset == unbounded.
endTimegoogle.protobuf.Timestamp5
searchstring6
severitystring7
podNamestring8
containerNamestring9
structuredbool10structured == true keeps only OTel-tagged telemetry rows (those carrying event_type / trace_id / span_id, set upstream by the OTel gateway's transform/log_type). Everything else (raw stdout) is dropped.

ListModelDeploymentLogsResponse

FieldTypeNumberDescription
logsrepeated LogEntry1
hasMorebool2No total: count(*) on workload_logs is non-trivial, the portal doesn't render it, and has_more is enough for "load more" ergonomics.

ListRagDeploymentLogsRequest

ListRagDeploymentLogsRequest mirrors ListModelDeploymentLogsRequest's query knobs but identifies the deployment by its rag deployment id (== the deployment's StackID, the value the OTel collector stamps onto workload rows as ResourceAttributes['stackId']) rather than a resolved k8s name. Authorization keys on id via the rag_deployment:{id}/can_read gate; the tenant_id is carried for parity with the rest of the rag surface and to scope the (id, tenant) pair the portal already holds.

FieldTypeNumberDescription
idstring1
tenantIdstring2
limituint323Row-pagination knobs. Will likely migrate to platform-wide cursor paging when that primitive lands.
pageOffsetuint324
startTimegoogle.protobuf.Timestamp5Unset == unbounded.
endTimegoogle.protobuf.Timestamp6
searchstring7
severitystring8
podNamestring9
containerNamestring10
structuredbool11structured == true keeps only OTel-tagged telemetry rows (those carrying event_type / trace_id / span_id, set upstream by the OTel gateway's transform/log_type). Everything else (raw stdout) is dropped.

ListRagDeploymentLogsResponse

FieldTypeNumberDescription
logsrepeated LogEntry1
hasMorebool2

Services

LogRetrievalService

LogRetrievalService serves workload logs across resource domains. RPCs are resource-specific (model deployments and rag deployments today; external models likely next) so each can carry its own authz annotation and subject resolution, while sharing the LogEntry shape and query parameters.

ListModelDeploymentLogs

POST /cmind.logs.v1.LogRetrievalService/ListModelDeploymentLogs

Request: ListModelDeploymentLogsRequest

Response: ListModelDeploymentLogsResponse

ListRagDeploymentLogs

POST /cmind.logs.v1.LogRetrievalService/ListRagDeploymentLogs

ListRagDeploymentLogs is the rag-deployment counterpart. Unlike model deployment logs (a platform-admin surface), rag logs are tenant-scoped: the gate is the per-deployment can_read relation, which the parent_tenant tuple makes tenant-scoped, so tenant admins and rag readers can view them without the platform-wide can_manage_models grant.

Request: ListRagDeploymentLogsRequest

Response: ListRagDeploymentLogsResponse