Files
wehub-resource-sync e0e362d700
SDK Tests / changes (push) Successful in 2m29s
Real E2E Tests / changes (push) Successful in 2m29s
Deploy Docs Pages / build (push) Has been cancelled
Deploy Docs Pages / deploy (push) Has been cancelled
Real E2E Tests / JavaScript E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Python E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Java E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / C# E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Go E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Real E2E CI (push) Has been cancelled
SDK Tests / SDK CI (push) Has been cancelled
SDK Tests / CLI Tests (push) Has been cancelled
SDK Tests / Python SDK Quality (code-interpreter) (push) Has been cancelled
SDK Tests / Python SDK Quality (sandbox) (push) Has been cancelled
SDK Tests / Python SDK Tests (code-interpreter) (push) Has been cancelled
SDK Tests / JavaScript SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / JavaScript SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Python SDK Tests (sandbox) (push) Has been cancelled
SDK Tests / CLI Quality (push) Has been cancelled
SDK Tests / Kotlin SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Kotlin SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / C# SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / C# SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Go SDK Quality And Tests (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:39:33 +08:00

273 lines
7.1 KiB
Markdown

# Logging Configuration
## Features
The OpenSandbox Kubernetes Controller supports flexible logging configuration, including:
- Console log output (enabled by default)
- File log output (optional)
- Automatic log rotation (by file size)
- Automatic compression of old logs (gzip)
- Automatic cleanup of expired logs (by age or count)
- All standard zap options (log level, format, etc.)
## Command-Line Flags
### Log File Flags
| Flag | Type | Default | Description |
|------|------|---------|-------------|
| `--enable-file-log` | bool | false | Enable log output to file |
| `--log-file-path` | string | `/var/log/sandbox-controller/controller.log` | Log file path |
| `--log-max-size` | int | 100 | Maximum size of a single log file in MB; rotates when exceeded |
| `--log-max-backups` | int | 10 | Maximum number of old log files to retain |
| `--log-max-age` | int | 30 | Maximum number of days to retain old log files |
| `--log-compress` | bool | true | Compress rotated log files (gzip) |
### Standard zap Flags (inherited from controller-runtime)
| Flag | Description |
|------|-------------|
| `--zap-devel` | Enable development mode (colorized output, more verbose stack traces) |
| `--zap-encoder` | Log encoding format: json or console |
| `--zap-log-level` | Log level: debug, info, error, etc. |
| `--zap-stacktrace-level` | Minimum log level at which stack traces are printed |
| `--zap-time-encoding` | Time encoding format: iso8601, millis, nano, etc. |
## Usage Examples
### 1. Console Output Only (Default)
```bash
./controller
```
### 2. Output to Both Console and File
```bash
./controller \
--enable-file-log=true \
--log-file-path=/var/log/sandbox-controller/controller.log
```
### 3. Custom Log Rotation Configuration
```bash
./controller \
--enable-file-log=true \
--log-file-path=/var/log/sandbox-controller/controller.log \
--log-max-size=50 \
--log-max-backups=5 \
--log-max-age=7 \
--log-compress=true
```
This configuration:
- Each log file can be up to 50MB
- Retain at most 5 old log files
- Retain log files for at most 7 days
- Compress old log files
### 4. Development Mode + File Output
```bash
./controller \
--zap-devel=true \
--enable-file-log=true \
--log-file-path=/tmp/controller-dev.log
```
### 5. JSON Format + File Output
```bash
./controller \
--zap-encoder=json \
--enable-file-log=true \
--log-file-path=/var/log/sandbox-controller/controller.log
```
### 6. Debug Level + File Output
```bash
./controller \
--zap-log-level=debug \
--enable-file-log=true \
--log-file-path=/var/log/sandbox-controller/debug.log
```
## Kubernetes Deployment Configuration
When deploying in Kubernetes, configure logging options via the Deployment's `args`:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: sandbox-controller
spec:
template:
spec:
containers:
- name: controller
image: sandbox-controller:latest
args:
- --enable-file-log=true
- --log-file-path=/var/log/controller/controller.log
- --log-max-size=100
- --log-max-backups=10
- --log-max-age=30
- --log-compress=true
- --zap-encoder=json
volumeMounts:
- name: log-volume
mountPath: /var/log/controller
volumes:
- name: log-volume
emptyDir: {}
# Or use a PersistentVolumeClaim
# persistentVolumeClaim:
# claimName: controller-logs
```
## Log File Format
### Development Mode (--zap-devel=true)
```
2026-02-12T10:30:45.123+0800 INFO setup starting manager
2026-02-12T10:30:45.456+0800 INFO controller Reconciling {"namespace": "default", "name": "example"}
```
### Production Mode (JSON)
```json
{"level":"info","ts":"2026-02-12T10:30:45.123+0800","logger":"setup","msg":"starting manager"}
{"level":"info","ts":"2026-02-12T10:30:45.456+0800","logger":"controller","msg":"Reconciling","namespace":"default","name":"example"}
```
## Log Rotation Mechanism
Log rotation is implemented by [lumberjack](https://github.com/natefinch/lumberjack) and supports:
1. **Size-based rotation**: When a log file reaches the size specified by `--log-max-size`, a new file is automatically created
2. **File naming**: Rotated files are named in the format `controller.log.2026-02-12T10-30-45.123`
3. **Automatic compression**: If `--log-compress` is enabled, old log files are compressed to `.gz` format
4. **Automatic cleanup**:
- Retain the most recent N files based on `--log-max-backups`
- Delete files older than the specified number of days based on `--log-max-age`
## Directory Permissions
Ensure the log directory exists and has write permissions:
```bash
# Create the log directory
mkdir -p /var/log/sandbox-controller
# Set permissions (adjust based on the actual runtime user)
chown controller:controller /var/log/sandbox-controller
chmod 755 /var/log/sandbox-controller
```
In Kubernetes, you can use an `initContainer` or `securityContext` to ensure correct permissions:
```yaml
spec:
initContainers:
- name: setup-log-dir
image: busybox
command: ['sh', '-c', 'mkdir -p /var/log/controller && chmod 755 /var/log/controller']
volumeMounts:
- name: log-volume
mountPath: /var/log/controller
containers:
- name: controller
securityContext:
runAsUser: 1000
runAsGroup: 1000
```
## Monitoring and Viewing Logs
### View Current Logs
```bash
tail -f /var/log/sandbox-controller/controller.log
```
### View Compressed Logs
```bash
zcat /var/log/sandbox-controller/controller.log.2026-02-12T10-30-45.123.gz | less
```
### Search Logs
```bash
# Search for error logs
grep -i error /var/log/sandbox-controller/controller.log
# Search across all log files (including compressed)
zgrep -i error /var/log/sandbox-controller/*.log*
```
## Best Practices
1. **Production environment**:
```bash
--enable-file-log=true
--log-file-path=/var/log/sandbox-controller/controller.log
--log-max-size=100
--log-max-backups=10
--log-max-age=30
--log-compress=true
--zap-encoder=json
```
2. **Development environment**:
```bash
--zap-devel=true
--enable-file-log=true
--log-file-path=/tmp/controller-dev.log
--log-compress=false
```
3. **Debugging issues**:
```bash
--zap-log-level=debug
--enable-file-log=true
--log-max-size=500
--log-compress=false
```
4. **Limited disk space**:
```bash
--enable-file-log=true
--log-max-size=50
--log-max-backups=3
--log-max-age=7
--log-compress=true
```
## Troubleshooting
### Log File Not Created
1. Check if the directory exists: `ls -la /var/log/sandbox-controller/`
2. Check permissions: `ls -ld /var/log/sandbox-controller/`
3. Verify the process has write permissions
4. Check controller startup logs for errors
### Log File Not Rotating
1. Confirm `--enable-file-log=true` is set
2. Check if the file size has reached the `--log-max-size` limit
3. Verify the lumberjack library is correctly installed: `go list -m gopkg.in/natefinch/lumberjack.v2`
### Excessive Disk Space Usage
1. Reduce the value of `--log-max-size`
2. Reduce the number of `--log-max-backups`
3. Reduce the number of days in `--log-max-age`
4. Ensure `--log-compress=true` is enabled