add: kubernetes log tailer

This commit is contained in:
2026-02-13 16:33:49 -08:00
parent db8304bebd
commit 88bcf2e507
6 changed files with 553 additions and 47 deletions

View File

@@ -0,0 +1,96 @@
# Logs
Provides a helper to tail the Kubernetes deployment logs. Usage looks like:
```golang
tailer, done := logs.Logger{
Deployment: "mydeployment",
Namespace: "mynamespace",
}.Start()
defer func() {
err := done() // closes the tailer
if err != nil { ... }
}()
for line := range tailer.NextLine() {
// Do something
}
```
## Features
- Tail logs from Kubernetes deployments
- Supports in-cluster and out-of-cluster configurations
- Automatic pod and container discovery
- Configurable timeout
- Support for tailing specific number of lines
## Usage
### Basic Usage
```golang
tailer, done := logs.Logger{
Deployment: "mydeployment",
Namespace: "mynamespace",
}.Start()
defer func() {
err := done()
if err != nil {
// handle error
}
}()
for line := range tailer.NextLine() {
fmt.Println(line)
}
```
### Advanced Usage
```golang
// Tail from a specific pod and container
tailer, done := logs.Logger{
Deployment: "mydeployment",
Namespace: "mynamespace",
Pod: "mydeployment-7b5b5c8c9d-xyz12",
Container: "mycontainer",
TailLines: int64Ptr(100), // Tail last 100 lines
Timeout: 5 * time.Minute,
}.Start()
defer func() {
err := done()
if err != nil {
// handle error
}
}()
for line := range tailer.NextLine() {
fmt.Println(line)
}
```
### Helper Functions
```golang
// Helper to create a pointer to int64
func int64Ptr(i int64) *int64 {
return &i
}
```
## Configuration
The Logger struct accepts the following fields:
- `Deployment` (required): Name of the Kubernetes deployment
- `Namespace` (required): Kubernetes namespace
- `Pod` (optional): Specific pod name to tail logs from
- `Container` (optional): Specific container name to tail logs from
- `TailLines` (optional): Number of lines to tail from the end of logs
- `Timeout` (optional): Time to wait before giving up on tailing
## Requirements
- Kubernetes cluster access (in-cluster or via kubeconfig)
- Proper RBAC permissions to read pod logs