R2r logs
How to Check R2R Logs and Use Analytics & Observability Features
This guide covers various methods to access and analyze R2R logs, as well as leverage R2R’s powerful analytics and observability features. These capabilities allow you to monitor system performance, track usage patterns, and gain valuable insights into your RAG application’s behavior.
1. Checking R2R Logs
1.1 Docker Deployment
If you’re running R2R using Docker:
-
List running containers:
docker ps
-
View real-time logs:
docker logs -f <container_id_or_name>
-
Using Docker Compose:
docker-compose logs -f r2r
1.2 Local Deployment
For local deployments without Docker:
- Check the R2R configuration for log file locations.
- Use standard Unix tools to view logs:
tail -f /path/to/r2r.log
1.3 Cloud Deployments
- For Azure: Use “Log stream” or “Diagnose and solve problems” in the Azure portal.
- For AWS: Use CloudWatch or check EC2/ECS logs directly.
2. Using R2R’s Logging and Analytics Features
The features described in this section are typically restricted to superusers. Ensure you have the necessary permissions before attempting to access these features.
2.1 Fetching Logs
You can fetch logs using the client-server architecture:
r2r logs
Expected Output:
[
{
'run_id': UUID('27f124ad-6f70-4641-89ab-f346dc9d1c2f'),
'run_type': 'rag',
'entries': [
{'key': 'search_query', 'value': 'Who is Aristotle?'},
{'key': 'search_latency', 'value': '0.39'},
{'key': 'search_results', 'value': '["{\\"id\\":\\"7ed3a01c-88dc-5a58-a68b-6e5d9f292df2\\",...}"]'},
{'key': 'rag_generation_latency', 'value': '3.79'},
{'key': 'llm_response', 'value': 'Aristotle (Greek: Ἀριστοτέλης Aristotélēs; 384–322 BC) was...'}
]
},
# More log entries...
]
2.2 Using Analytics
R2R offers an analytics feature for aggregating and analyzing log data:
r2r analytics --filters '{"search_latencies": "search_latency"}' --analysis-types '{"search_latencies": ["basic_statistics", "search_latency"]}'
Expected Output:
{
'results': {
'filtered_logs': {
'search_latencies': [
{
'timestamp': '2024-06-20 21:29:06',
'log_id': UUID('0f28063c-8b87-4934-90dc-4cd84dda5f5c'),
'key': 'search_latency',
'value': '0.66',
'rn': 3
},
...
]
},
'search_latencies': {
'Mean': 0.734,
'Median': 0.523,
'Mode': 0.495,
'Standard Deviation': 0.213,
'Variance': 0.0453
}
}
}
3. Advanced Analytics and Observability
3.1 Custom Analytics
You can specify different filters and analysis types to focus on specific aspects of your application’s performance:
from r2r import FilterCriteria, AnalysisTypes
# Analyze RAG latencies
rag_filter = FilterCriteria(filters={"rag_latencies": "rag_generation_latency", "rag_eval": "rag_eval_metric"})
rag_analysis = AnalysisTypes(analysis_types={"rag_latencies": ["basic_statistics", "rag_generation_latency"]})
rag_analytics = app.analytics(rag_filter, rag_analysis)
# Track usage patterns by user
user_filter = FilterCriteria(filters={"user_patterns": "user_id"})
user_analysis = AnalysisTypes(analysis_types={"user_patterns": ["bar_chart", "user_id"]})
user_analytics = app.analytics(user_filter, user_analysis)
# Monitor error rates
error_filter = FilterCriteria(filters={"error_rates": "error"})
error_analysis = AnalysisTypes(analysis_types={"error_rates": ["basic_statistics", "error"]})
error_analytics = app.analytics(error_filter, error_analysis)
3.2 Preloading Data for Analysis
To get meaningful analytics, you can preload your database with random searches:
import random
from r2r import R2R, GenerationConfig
app = R2R()
queries = [
"What is artificial intelligence?",
"Explain machine learning.",
"How does natural language processing work?",
"What are neural networks?",
"Describe deep learning.",
# Add more queries as needed
]
for _ in range(1000):
query = random.choice(queries)
app.rag(query, GenerationConfig(model="openai/gpt-4o-mini"))
print("Preloading complete. You can now run analytics on this data.")
3.3 User-Level Analytics
To get analytics for a specific user:
user_id = "your_user_id_here"
user_filter = FilterCriteria(filters={"user_analytics": "user_id"})
user_analysis = AnalysisTypes(analysis_types={
"user_analytics": ["basic_statistics", "user_id"],
"user_search_latencies": ["basic_statistics", "search_latency"]
})
user_analytics = app.analytics(user_filter, user_analysis)
print(f"Analytics for user {user_id}:")
print(user_analytics)
4. Log Analysis Tips
- Look for ERROR or WARNING level logs first.
- Check timestamps to correlate logs with observed issues.
- Use tools like
grep
,awk
, orsed
to filter logs. - For large log files, use
less
with search functionality.
5. Log Aggregation Tools
Consider using log aggregation tools for more advanced setups:
- ELK Stack (Elasticsearch, Logstash, Kibana)
- Prometheus and Grafana
- Datadog
- Splunk
Summary
R2R’s logging, analytics, and observability features provide powerful tools for understanding and optimizing your RAG application. By leveraging these capabilities, you can:
- Monitor system performance in real-time
- Analyze trends in search and RAG operations
- Identify potential bottlenecks or areas for improvement
- Track user behavior and usage patterns
- Make data-driven decisions to enhance your application’s performance and user experience
Remember to rotate logs regularly and set up log retention policies to manage disk space, especially in production environments.
For more advanced usage and customization options, consider joining the R2R Discord community or referring to the detailed R2R documentation.
Was this page helpful?