> For the complete documentation index, see [llms.txt](https://documentation.alluxio.io/ee-ai-en/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://documentation.alluxio.io/ee-ai-en/ai-3.8-15.1.x/reference/collectinfo-crd.md).

# CollectInfo Reference

`CollectInfo` is the Kubernetes custom resource that drives Alluxio's diagnostic collection. Applying one tells the Operator's doctor controller **what** to collect from your cluster, **when** to collect it, and optionally **where** to upload the result.

You only need this page when you want to change the defaults. To simply produce a snapshot and send it to Alluxio support, follow [Collecting a Snapshot with Doctor](https://documentation.alluxio.io/ee-ai-en/ai-3.8-15.1.x/reference/pages/7QjUUQ22WzozKGr0bNSy#id-4.-collecting-a-snapshot-with-doctor) — the defaults collect everything from the past day and need no configuration.

Each run writes one `.tar.gz` archive to `/data/doctor` inside the doctor-controller pod. See [Finding and downloading the snapshot](/ee-ai-en/ai-3.8-15.1.x/administration/troubleshooting-alluxio.md#finding-and-downloading-the-snapshot) for the naming scheme and how to retrieve it.

## Full Example

Every field below is optional. This example sets all of them to show the shape; a real `CollectInfo` is usually much shorter.

```yaml
apiVersion: k8s-operator.alluxio.com/v1
kind: CollectInfo
metadata:
  name: example-doctor
  # Must be in the same namespace as the Alluxio cluster
  namespace: alx-ns
spec:
  # Configure scheduled collection
  scheduled:
    # false: run once immediately; true: enable scheduled execution
    enabled: false
    # Only effective when enabled: true
    cron: "0 0 * * *"
    # Only effective when enabled: true
    timeZone: "Asia/Shanghai"
    # Only effective when enabled: true, retention period for collected results
    expiration: "720h"

  # Information types to collect
  type:
    - all

  # Log collection configuration
  logs:
    # Collect logs from the past 1 hour (3600 seconds)
    # Note: If left empty, defaults to collecting logs from the past 1 day (86400 seconds)
    sinceSeconds: 3600
    # tail: 1000 # Alternatively, use tail to collect the last 1000 lines
    # sinceTime: "2025-11-12T06:00:00Z" # Alternatively, use sinceTime to collect logs after a specific time point

  # Metrics collection configuration
  metrics:
    # Collect metrics from the past 24 hours
    duration: 24h
    # Sampling interval of 5 minutes
    step: 5m

  # (Optional) Upload configuration
  # upload:
  #   account: test
  #   productionId: xxx # Optional
  #   awsKey: <alluxio-provided-key>
  #   awsSecret: <alluxio-provided-secret>
```

## `spec.scheduled`

Controls whether the collection runs once or on a repeating schedule.

**`cron` is the switch.** A `CollectInfo` without `spec.scheduled.cron` runs exactly once, as soon as it is applied. One with `cron` runs on that schedule.

| Field        | Type    | Default            | Description                                                                                                                                                                                                                                            |
| ------------ | ------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `cron`       | string  | —                  | Cron expression for the schedule. Its presence is what makes the collection recurring. Example: `"0 0 * * *"` (daily at midnight). See [Kubernetes cron syntax](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#schedule-syntax). |
| `timeZone`   | string  | —                  | Time zone the `cron` expression is evaluated in. Example: `"Asia/Shanghai"`. See [Kubernetes time zones](https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#time-zones).                                                             |
| `expiration` | string  | `4320h` (180 days) | How long each archive is kept before automatic cleanup. Uses the [Go duration format](https://pkg.go.dev/time#ParseDuration).                                                                                                                          |
| `enabled`    | boolean | `false`            | **Deprecated** — use the presence of `cron` instead. It no longer decides whether the collection recurs; it only selects the default `metrics.step`.                                                                                                   |

{% hint style="info" %}
Every cluster the Operator creates already carries a `CollectInfo` that runs daily at midnight UTC with `type: all`, a 24-hour log window, and a 180-day retention. Inspect yours with `kubectl -n <cluster-namespace> get collectinfo`.
{% endhint %}

## `spec.type`

Selects which categories of data to collect. Omitting `type` is equivalent to `all`.

| Value            | Collects                                                                                                                                                                 | Location in the archive |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------- |
| `all`            | Everything below. This is the default.                                                                                                                                   | —                       |
| `config`         | Resolved Alluxio and gateway configuration, any custom configuration, the full property dump, and the `AlluxioCluster` manifest.                                         | `config/`               |
| `dynamic-config` | Cluster state held in etcd, read back from the coordinator: license, mount table, quotas, worker nodes, priorities, TTL rules, cache filters, and virtual path mappings. | `etcd/`                 |
| `hardware`       | CPU, memory, and disk of the Kubernetes nodes, plus the pod specs in the cluster and operator namespaces.                                                                | `hardware/`             |
| `job-history`    | Job service history, including load and free jobs.                                                                                                                       | `job-history/`          |
| `logs`           | Container logs from the coordinator, workers, FUSE pods, and the other components.                                                                                       | `logs/<namespace>/`     |
| `meta`           | A manifest of the collection run itself — when it ran, against which cluster, and the log and metrics windows that were applied.                                         | `meta/`                 |
| `metrics`        | Prometheus metrics scraped from Alluxio components.                                                                                                                      | `metrics/`              |

{% hint style="warning" %}
An unrecognized value is skipped silently — the doctor controller logs a warning and the archive is produced without that category. `etcd` in particular is not a valid value; the etcd-backed state is collected by `dynamic-config`.
{% endhint %}

Metrics collection is the slowest category and produces the largest files. Drop it from `type` when you only need logs and configuration.

## `spec.logs`

Bounds how much log history each component contributes. Modeled on Kubernetes [`PodLogOptions`](https://pkg.go.dev/k8s.io/api/core/v1#PodLogOptions).

| Field          | Type    | Description                                                                          |
| -------------- | ------- | ------------------------------------------------------------------------------------ |
| `tail`         | integer | Collect the last N lines of each container's log. Example: `1000`.                   |
| `sinceSeconds` | integer | Collect logs from N seconds ago until now. Example: `3600` (past hour).              |
| `sinceTime`    | string  | Collect logs after an absolute RFC3339 timestamp. Example: `"2025-11-12T06:00:00Z"`. |

Precedence, when more than one is set:

1. `tail` wins over everything. When `tail` is set, `sinceSeconds` and `sinceTime` are ignored.
2. Without `tail`, either `sinceSeconds` or `sinceTime` applies — set only one.
3. With `logs` absent or empty, the default is the past day (86400 seconds).

Widen the window when the incident you are diagnosing started more than a day ago; the default silently truncates anything older.

## `spec.metrics`

Bounds the Prometheus metrics range. Only read when `metrics` is among the collected `type` values.

| Field      | Type   | Default                       | Description                                                                    |
| ---------- | ------ | ----------------------------- | ------------------------------------------------------------------------------ |
| `duration` | string | `24h`                         | How far back from now to collect.                                              |
| `step`     | string | `5m` one-time, `2h` scheduled | Sampling interval. A smaller step means finer resolution and a larger archive. |

## `spec.upload`

Uploads the finished archive to an S3 bucket that Alluxio maintains, so support can retrieve it without you transferring the file yourself. Alluxio provides the credentials — this block is not usable with your own bucket.

| Field          | Type   | Required | Description                                                               |
| -------------- | ------ | -------- | ------------------------------------------------------------------------- |
| `account`      | string | Yes      | Account identifier provided by Alluxio.                                   |
| `productionId` | string | No       | **Deprecated** — the production ID is now auto-detected from the tarball. |
| `awsKey`       | string | Yes      | AWS access key provided by Alluxio.                                       |
| `awsSecret`    | string | Yes      | AWS secret key provided by Alluxio.                                       |

When `upload` is omitted — the default — archives stay in the doctor-controller pod and you retrieve them yourself.

## `spec.alluxioCluster`

Which Alluxio clusters to collect from, as a list of `name` and `namespace` pairs. Set this when the `CollectInfo` does not live in the same namespace as the cluster, or when one collection should span several clusters.

```yaml
spec:
  alluxioCluster:
    - name: alluxio-cluster
      namespace: alx-ns
```

## Related

* [Troubleshooting](/ee-ai-en/ai-3.8-15.1.x/administration/troubleshooting-alluxio.md) — the task-oriented guide that uses this resource
* [Metrics](/ee-ai-en/ai-3.8-15.1.x/reference/metrics.md) — the metrics `spec.metrics` samples
* [Installing on Kubernetes](/ee-ai-en/ai-3.8-15.1.x/start/installing-on-kubernetes.md) — deploying the Operator that provides the doctor controller
