Server Logging
AIStor Server publishes its server logs to the system console. These logs can include errors, information output, or other information useful during troubleshooting or debugging.
Server logs do not emit for all operations and cannot support audit trail or similar compliance requirements. If you require such a trail, configure and use audit logging instead.
You can read the server logs using any of the following methods:
- Run
journalctl -u miniofrom any host machine. - Run
mc admin logsagainst the MinIO AIStor deployment.
Record logs to disk
MinIO AIStor can record API, error, and audit logs directly to disk as compressed JSON files. This complements webhook-based logging for compliance, forensics, and offline analysis.
| Log Type | Purpose |
|---|---|
| API | S3 API request/response logs |
| Error | Server error logs |
| Audit | Comprehensive audit trail |
You can configure disk-based log recording using either environment variables or runtime configuration settings:
The drive_limit is enforced independently on every drive of every node.
When the limit is reached (for API and error logs), MinIO AIStor automatically removes the oldest log files on that drive to make room for new entries.
For capacity planning, the total log space a cluster can consume is approximately drive_limit × drives-per-node × number-of-nodes.
Storage location and retrieval
MinIO AIStor stores recorded logs on the deployment drives under the system path .minio.sys/logs/, with a separate prefix for each log type:
.minio.sys/
└── logs/
├── api/
├── error/
└── audit/
Each file is a zstd-compressed JSON file named using the format <type>.<count>.<timestamp>.zst, for example api.1234.20250115.103000.000000000.zst:
type:api,error, oraudit.count: number of log entries in the file.timestamp: UTC time in the formatYYYYMMDD.HHMMSS.nnnnnnnnn..zst: the zstd compression extension.
Use mc ls to list the recorded files and mc cat piped through zstd -d to decompress and read them:
mc ls ALIAS/.minio.sys/logs/audit/
mc cat ALIAS/.minio.sys/logs/audit/FILE.zst | zstd -d
Publish server logs to HTTP webhook
MinIO AIStor supports publishing logs to a webhook consumer through an HTTP PUT operation, where the body of the request is the log as a JSON document.
You can configure a new HTTP webhook endpoint to which AIStor Server publishes minio server logs using either environment variables or runtime configuration settings:
For options that require specifying a directory path, ensure the minio-user user and group have read, write, and list access to those resources.
Where possible use chown and chmod to limit access and ownership to only the minio-user.
Restart MinIO AIStor to apply the new settings.
You can specify multiple webhook loggers by appending a unique identifier to each group of environment variables or settings.
For example, MINIO_LOGGER_WEBHOOK_ENDPOINT_PRIMARY or mc admin config set alias logger_webhook:primary.
Server log JSON format
The following example json document resembles the format used by MinIO AIStor for webhook logging:
{
"deploymentid": "c8484a3f-2fb0-416b-b0dd-06c7c60a6925",
"level": "WARNING",
"time": "2025-08-15T16:06:01.16308316Z",
"api": {
"name": "SYSTEM.iam",
"args": {}
},
"error": {
"message": "Enabling MINIO_IDENTITY_TLS_SKIP_VERIFY is not recommended in a production environment (*errors.errorString)",
"source": [
"internal/logger/logger.go:271:logger.LogIf()",
"cmd/logging.go:29:cmd.iamLogIf()",
"cmd/iam.go:270:cmd.(*IAMSys).Init()",
"cmd/server-main.go:1006:cmd.serverMain.func15.1()",
"cmd/server-main.go:566:cmd.bootstrapTrace()",
"cmd/server-main.go:1005:cmd.serverMain.func15()"
]
}
}
Log entry fields
| Field | Type | Description |
|---|---|---|
deploymentid |
string | Unique cluster deployment identifier |
level |
string | Log severity: ERROR, WARNING, INFO, EVENT |
time |
string | UTC timestamp with nanosecond precision |
api.name |
string | Operation name (see Log subsystems) |
api.args |
object | Operation-specific arguments (bucket, object, metadata) |
requestID |
string | Unique request identifier for correlating logs across nodes |
requestNode |
string | Node that generated the log entry |
remotehost |
string | Client or peer that initiated the request |
error.message |
string | Error description |
error.source |
array | Code path that triggered the error (stack trace) |
error.variables |
object | Context-specific data (for example, drive endpoint) |
Log subsystems
The api.name field identifies the subsystem that generated the log entry.
For background operations (healing, scanning, bootstrap), the value is SYSTEM.<subsystem>.
For errors during S3 API requests, the value is the S3 operation name (for example, GetObject, PutObject) rather than the subsystem name.
Storage and drives:
| Subsystem | Description |
|---|---|
SYSTEM.storage |
Drive I/O errors, drive not found, connection failures |
SYSTEM.offline-drive-healing |
Automatic healing of drives that were offline |
SYSTEM.formatting |
Drive formatting operations during startup |
Network and internode:
| Subsystem | Description |
|---|---|
SYSTEM.peers |
Peer node communication errors |
SYSTEM.grid |
Internode grid connections: pong timeouts, nodes marked offline |
SYSTEM.dns |
DNS resolution errors |
Data operations:
| Subsystem | Description |
|---|---|
SYSTEM.s3 |
S3 API-level errors in background contexts |
SYSTEM.replication |
Bucket replication errors and status |
SYSTEM.site-replication |
Site replication synchronization issues |
SYSTEM.batch |
Batch operation errors (replicate, expire, key rotation) |
SYSTEM.transition |
Object transition (tiering) operations |
SYSTEM.tier |
Tier target connectivity and configuration |
Cluster operations:
| Subsystem | Description |
|---|---|
SYSTEM.healing |
Object and drive healing operations |
SYSTEM.scanner |
Background scanner activity and errors |
SYSTEM.ilm |
Lifecycle management expiration and transition |
SYSTEM.decom |
Pool decommissioning progress and errors |
SYSTEM.rebalance |
Server pool rebalancing operations |
SYSTEM.cordon |
Node cordoning events |
SYSTEM.healthcheck |
Read and write quorum evaluation results |
Security and identity:
| Subsystem | Description |
|---|---|
SYSTEM.iam |
IAM policy and user management |
SYSTEM.authN |
Authentication errors |
SYSTEM.authZ |
Authorization and policy evaluation errors |
SYSTEM.sts |
Security Token Service operations |
SYSTEM.encryption |
Server-side encryption errors |
SYSTEM.kms |
Key Management Service connectivity |
Administration:
| Subsystem | Description |
|---|---|
SYSTEM.admin |
Admin API operations |
SYSTEM.config |
Configuration changes and validation |
SYSTEM.bootstrap |
Server startup and initialization |
SYSTEM.shutdown |
Graceful shutdown events |
SYSTEM.metrics |
Metrics collection errors |
SYSTEM.license |
License validation |
Features:
| Subsystem | Description |
|---|---|
SYSTEM.tables |
AIStor Tables (Iceberg catalog) operations |
SYSTEM.sftp |
SFTP gateway operations |
SYSTEM.ftp |
FTP protocol operations |
Filtering server logs
Use the api.name field to filter logs by subsystem in your log pipeline.
Common filter patterns:
| Purpose | Filter expression |
|---|---|
| Storage errors (background) | api.name == "SYSTEM.storage" AND level == "ERROR" |
| Quorum failures | api.name == "SYSTEM.healthcheck" AND level == "ERROR" |
| Internode connectivity | api.name == "SYSTEM.grid" AND level == "ERROR" |
| Replication errors | api.name == "SYSTEM.replication" AND level == "ERROR" |
| Healing activity | api.name == "SYSTEM.healing" |
| All errors | level == "ERROR" |
api.name (for example, GetObject) rather than the subsystem name.
To find storage or network errors during S3 requests, filter by error.message or error.source content instead of api.name.
Server logs vs audit logs
Server logs and audit logs serve different purposes and capture different data.
| Server logs | Audit logs | |
|---|---|---|
| Content | Errors, warnings, internal operations | All S3 API requests and responses |
| Rate limited | Yes (repeated errors are suppressed) | No (every event is logged) |
| Filtered | Yes (some internal errors are suppressed) | No (all events are logged for compliance) |
| Includes stack trace | Yes (error.source) |
No |
| Includes request/response headers | No | Yes |
| Includes timing | No | Yes (TTFB and response time in nanoseconds) |
| Config key | logger_webhook |
audit_webhook / audit_kafka |
| Use case | Operational monitoring, debugging | Compliance, security audit trail |
For audit log configuration, see Audit Logging.