LogWard Documentation

Privacy-first log management. Self-hosted or use our cloud at api.logward.dev.

Choose Your Deployment

Cloud (Managed)

Start logging in 2 minutes - no infrastructure needed

  • No setup required - instant access
  • Automatic updates and maintenance
  • Scalable infrastructure (we handle it)
  • API endpoint: api.logward.dev
Self-Hosted

Full control, data privacy, GDPR-compliant

  • 100% data ownership and privacy
  • No vendor lock-in (open source)
  • Customize everything (code, infra)
  • One-click install with Docker Compose

Quick Start

Cloud: Start in 2 Minutes

Use LogWard Cloud - no installation needed

bash
# 1. Sign up at https://logward.dev
# 2. Create an organization and project
# 3. Generate an API key
# 4. Start sending logs:

curl -X POST https://api.logward.dev/api/v1/ingest \
  -H "X-API-Key: lp_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "logs": [{
      "time": "2025-01-23T10:30:00Z",
      "service": "my-app",
      "level": "info",
      "message": "Hello from LogWard Cloud!"
    }]
  }'
Self-Hosted: Deploy in 2 Minutes

Run LogWard on your infrastructure with pre-built Docker images

1. Create a docker-compose.yml file:

yaml
services:
  postgres:
    image: timescale/timescaledb:latest-pg16
    environment:
      POSTGRES_DB: logward
      POSTGRES_USER: logward
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U logward"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    command: redis-server --requirepass ${REDIS_PASSWORD}
    volumes:
      - redis_data:/data

  backend:
    image: logward/backend:latest
    ports:
      - "8080:8080"
    environment:
      DATABASE_URL: postgresql://logward:${DB_PASSWORD}@postgres:5432/logward
      REDIS_URL: redis://:${REDIS_PASSWORD}@redis:6379
      API_KEY_SECRET: ${API_KEY_SECRET}
    depends_on:
      postgres:
        condition: service_healthy

  worker:
    image: logward/backend:latest
    command: ["worker"]
    environment:
      DATABASE_URL: postgresql://logward:${DB_PASSWORD}@postgres:5432/logward
      REDIS_URL: redis://:${REDIS_PASSWORD}@redis:6379
      API_KEY_SECRET: ${API_KEY_SECRET}
    depends_on:
      postgres:
        condition: service_healthy

  frontend:
    image: logward/frontend:latest
    ports:
      - "3000:3000"
    environment:
      PUBLIC_API_URL: http://localhost:8080

volumes:
  postgres_data:
  redis_data:

2. Create a .env file with secure passwords:

bash
DB_PASSWORD=your_secure_db_password
REDIS_PASSWORD=your_secure_redis_password
API_KEY_SECRET=your_32_character_secret_key_here

3. Start LogWard:

bash
docker compose up -d

# Access LogWard at http://localhost:3000

Key Features

API-First Design

RESTful API with comprehensive documentation. Ingest, query, and manage logs programmatically.

Multi-Organization

Manage multiple teams and projects in one installation. Complete data isolation per organization.

Real-time Streaming

Live tail logs with Server-Sent Events. Watch logs in real-time as they're ingested.

Alert System

Create custom alert rules with email and webhook notifications. Stay informed of critical events.

Send Your First Log

After setting up LogWard, you can start sending logs immediately using any HTTP client:

Cloud (api.logward.dev)

bash
curl -X POST https://api.logward.dev/api/v1/ingest \
  -H "X-API-Key: lp_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "logs": [{
      "time": "2025-01-23T10:30:00Z",
      "service": "api-gateway",
      "level": "error",
      "message": "Database connection timeout",
      "metadata": {
        "user_id": 123,
        "endpoint": "/api/users"
      }
    }]
  }'

Self-Hosted (localhost:8080)

bash
curl -X POST http://localhost:8080/api/v1/ingest \
  -H "X-API-Key: lp_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "logs": [{
      "time": "2025-01-23T10:30:00Z",
      "service": "api-gateway",
      "level": "error",
      "message": "Database connection timeout",
      "metadata": {
        "user_id": 123,
        "endpoint": "/api/users"
      }
    }]
  }'

Next Steps