The Trilium Metrics API provides comprehensive monitoring data about your Trilium instance, designed for external monitoring systems like Prometheus.

## Endpoint

- URL: `/etapi/metrics`
- Method: `GET`
- Authentication: ETAPI token required
- Default Format: Prometheus text format

## Authentication

You need an ETAPI token to access the metrics endpoint. Get one by:

    # Get an ETAPI token
    curl -X POST http://localhost:8080/etapi/auth/login \
      -H "Content-Type: application/json" \
      -d '{"password": "your_password"}'

## Usage

### Prometheus Format (Default)

    curl -H "Authorization: YOUR_ETAPI_TOKEN" \
      http://localhost:8080/etapi/metrics

Returns metrics in Prometheus text format:

    # HELP trilium_info Trilium instance information
    # TYPE trilium_info gauge
    trilium_info{version="0.91.6",db_version="231",node_version="v18.17.0"} 1 1701432000

    # HELP trilium_notes_total Total number of notes including deleted
    # TYPE trilium_notes_total gauge
    trilium_notes_total 1234 1701432000

### JSON Format

    curl -H "Authorization: YOUR_ETAPI_TOKEN" \
      "http://localhost:8080/etapi/metrics?format=json"

Returns detailed metrics in JSON format for debugging or custom integrations.

## Available Metrics

### Instance Information

- `trilium_info` - Version and build information with labels

### Database Metrics

- `trilium_notes_total` - Total notes (including deleted)
- `trilium_notes_deleted` - Number of deleted notes
- `trilium_notes_active` - Number of active notes
- `trilium_notes_protected` - Number of protected notes
- `trilium_attachments_total` - Total attachments
- `trilium_attachments_active` - Active attachments
- `trilium_revisions_total` - Total note revisions
- `trilium_branches_total` - Active branches
- `trilium_attributes_total` - Active attributes
- `trilium_blobs_total` - Total blob records
- `trilium_etapi_tokens_total` - Active ETAPI tokens
- `trilium_embeddings_total` - Note embeddings (if available)

### Categorized Metrics

- `trilium_notes_by_type{type="text|code|image|file"}` - Notes by type
- `trilium_attachments_by_type{mime_type="..."}` - Attachments by MIME type

### Statistics

- `trilium_database_size_bytes` - Database size in bytes
- `trilium_oldest_note_timestamp` - Timestamp of oldest note
- `trilium_newest_note_timestamp` - Timestamp of newest note
- `trilium_last_modified_timestamp` - Last modification timestamp

## Prometheus Configuration

Add to your `prometheus.yml`:

    scrape_configs:
      - job_name: 'trilium'
        static_configs:
          - targets: ['localhost:8080']
        metrics_path: '/etapi/metrics'
        bearer_token: 'YOUR_ETAPI_TOKEN'
        scrape_interval: 30s

## Error Responses

- `400` - Invalid format parameter
- `401` - Missing or invalid ETAPI token
- `500` - Internal server error

## Grafana Dashboard

You can also use the Grafana Dashboard that has been created for TriliumNext - just take the JSON from grafana-dashboard.json and then import the dashboard, following these screenshots:

Then paste the JSON, and hit load: