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
273 lines
7.1 KiB
Markdown
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
|