# Metrics 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: