120 lines
3.5 KiB
Markdown
Vendored
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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**
<figure class="image"><img style="aspect-ratio:2594/1568;" src="1_Metrics_image.png" width="2594" height="1568"></figure>
You can also use the Grafana Dashboard that has been created for TriliumNext - just take the JSON from <a class="reference-link" href="Metrics/grafana-dashboard.json">grafana-dashboard.json</a> and then import the dashboard, following these screenshots:
<figure class="image"><img style="aspect-ratio:1881/282;" src="2_Metrics_image.png" width="1881" height="282"></figure>
Then paste the JSON, and hit load:
<figure class="image"><img style="aspect-ratio:1055/830;" src="Metrics_image.png" width="1055" height="830"></figure>