argoproj/argo-workflows · warning

no artifact logs are available

Error message

no artifact logs are available

What it means

When a node has no log artifacts stored (hasArtifactLogs returns false) and a nodeId IS provided, the service throws 'no artifact logs are available'. This means Argo never archived logs for that container, so there is nothing to download from the artifact repository.

Source

Thrown at ui/src/shared/services/workflows-service.ts:246

    async isWorkflowNodePendingOrRunning(workflow: Workflow, nodeId?: string) {
        // We always refresh the workflow rather than inspecting the state locally since it doubles
        // as a check to determine whether or not the API is currently reachable
        const updatedWorkflow = await this.get(workflow.metadata.namespace, workflow.metadata.name);
        const node = updatedWorkflow.status.nodes[nodeId];
        if (!node) {
            return !updatedWorkflow.status || ['Pending', 'Running'].includes(updatedWorkflow.status.phase);
        }
        return isNodePendingOrRunning(node);
    },

    getContainerLogsFromArtifact(workflow: Workflow, nodeId: string, container: string, grep: string, archived: boolean): Observable<LogEntry> {
        return of(hasArtifactLogs(workflow, nodeId, container)).pipe(
            switchMap(isArtifactLogs => {
                if (!isArtifactLogs) {
                    if (!nodeId) {
                        throw new Error('Should specify a node when we get archived logs');
                    }
                    throw new Error('no artifact logs are available');
                }

                return from(requests.get(this.getArtifactLogsPath(workflow, nodeId, container, archived)));
            }),
            mergeMap(r => r.text.split('\n')),
            map(content => ({content, podName: workflow.status.nodes[nodeId].displayName}) as LogEntry),
            filter(x => !!x.content.match(grep))
        );
    },

    getContainerLogs(workflow: Workflow, podName: string, nodeId: string, container: string, grep: string, archived: boolean): Observable<LogEntry> {
        const getLogsFromArtifact = () => this.getContainerLogsFromArtifact(workflow, nodeId, container, grep, archived);
        const getLogsFromCluster = () => this.getContainerLogsFromCluster(workflow, podName, container, grep);

        // If our workflow was deleted, try to get logs from artifacts.
        if (!isWorkflowInCluster(workflow)) {
            return getLogsFromArtifact();
        }

View on GitHub (pinned to 35bff19146)

Solutions

  1. Check the node's outputs.artifacts in workflow.status.nodes[nodeId] for a logs artifact before requesting.
  2. Enable log archiving (workflow.spec.archiveLogs: true) or configure an artifact repository so logs are saved.
  3. Fall back to fetching live pod logs via the k8s API if the pod still exists.

Example fix

// before
logsService.getLogsFromArtifact(wf, nodeId, 'main', '', true).subscribe(...)
// after
const node = wf.status.nodes?.[nodeId];
const hasLogs = node?.outputs?.artifacts?.some(a => a.artifactGC || a.name === 'main-logs');
if (!hasLogs) { showError('no artifact logs are available'); } else { logsService.getLogsFromArtifact(wf, nodeId, 'main', '', true).subscribe(...); }
Defensive patterns

Strategy: fallback

Validate before calling

const node = wf.status?.nodes?.[nodeId];
const hasLogArtifact = node?.outputs?.artifacts?.some(a => a.name.endsWith('-logs')) ?? false;
if (!hasLogArtifact) console.warn('No archived logs for node', nodeId);

Type guard

function hasArchivedLogs(wf: Workflow, nodeId: string): boolean {
  const node = wf.status?.nodes?.[nodeId];
  return Array.isArray(node?.outputs?.artifacts) &&
    node.outputs.artifacts.some(a => a.name.includes('logs'));
}

Try / catch

service.getLogsFromArtifact(wf, nodeId, 'main', '', true).subscribe({
  error: err => {
    if (err.message === 'no artifact logs are available') {
      showEmptyLogsMessage(nodeId);
    }
  }
});

Prevention

When it happens

Trigger: Calling getContainerLogsFromArtifact with a valid nodeId for a node whose outputs contain no logs artifact (e.g. logs were not saved, pod deleted before archiving, or container never ran).

Common situations: Pods deleted before log archiving completed; workflows run with archiveLogs disabled or no artifact repository configured; steps that failed before producing output; viewing old workflows in the archive UI.

Related errors


AI-assisted analysis of argoproj/argo-workflows@35bff19146 (2026-09-03). Data as JSON: /api/errors/f7763b55eae04065. Report an issue: GitHub.