dify/api/docs/complete_elasticsearch_conf...

130 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 完整的 Elasticsearch 配置指南
## 🔧 **问题修复总结**
我已经修复了以下问题:
### 1. **构造函数参数不匹配**
- **错误**: `ElasticsearchWorkflowExecutionRepository.__init__() got an unexpected keyword argument 'session_factory'`
- **修复**: 修改构造函数接受 `session_factory` 参数,从全局扩展获取 Elasticsearch 客户端
### 2. **导入错误**
- **错误**: `name 'sessionmaker' is not defined`
- **修复**: 添加必要的 SQLAlchemy 导入
### 3. **SSL/HTTPS 配置**
- **错误**: `received plaintext http traffic on an https channel`
- **修复**: 使用 HTTPS 连接和正确的认证信息
### 4. **实体属性不匹配**
- **错误**: `'WorkflowExecution' object has no attribute 'created_at'``'WorkflowExecution' object has no attribute 'id'`
- **修复**: 使用正确的属性名:
- `id_` 而不是 `id`
- `started_at` 而不是 `created_at`
- `error_message` 而不是 `error`
## 📋 **完整的 .env 配置**
请将以下配置添加到您的 `dify/api/.env` 文件:
```bash
# ====================================
# Elasticsearch 配置
# ====================================
# 启用 Elasticsearch
ELASTICSEARCH_ENABLED=true
# 连接设置(注意使用 HTTPS
ELASTICSEARCH_HOSTS=["https://localhost:9200"]
ELASTICSEARCH_USERNAME=elastic
ELASTICSEARCH_PASSWORD=2gYvv6+O36PGwaVD6yzE
# SSL 设置
ELASTICSEARCH_USE_SSL=true
ELASTICSEARCH_VERIFY_CERTS=false
# 性能设置
ELASTICSEARCH_TIMEOUT=30
ELASTICSEARCH_MAX_RETRIES=3
ELASTICSEARCH_INDEX_PREFIX=dify
ELASTICSEARCH_RETENTION_DAYS=30
# ====================================
# Repository Factory 配置
# 切换到 Elasticsearch 实现
# ====================================
# 核心工作流 repositories
CORE_WORKFLOW_EXECUTION_REPOSITORY=core.repositories.elasticsearch_workflow_execution_repository.ElasticsearchWorkflowExecutionRepository
CORE_WORKFLOW_NODE_EXECUTION_REPOSITORY=core.repositories.elasticsearch_workflow_node_execution_repository.ElasticsearchWorkflowNodeExecutionRepository
# API 服务层 repositories
API_WORKFLOW_RUN_REPOSITORY=repositories.elasticsearch_api_workflow_run_repository.ElasticsearchAPIWorkflowRunRepository
```
## 🚀 **使用步骤**
### 1. 配置环境变量
将上述配置复制到您的 `.env` 文件中
### 2. 重启应用
重启 Dify API 服务以加载新配置
### 3. 测试连接
```bash
flask elasticsearch status
```
### 4. 执行迁移
```bash
# 干运行测试
flask elasticsearch migrate --dry-run
# 实际迁移(替换为您的实际 tenant_id
flask elasticsearch migrate --tenant-id your-tenant-id
# 验证迁移结果
flask elasticsearch validate --tenant-id your-tenant-id
```
## 📊 **四个日志表的处理方式**
| 表名 | Repository 配置 | 实现类 |
|------|----------------|--------|
| `workflow_runs` | `API_WORKFLOW_RUN_REPOSITORY` | `ElasticsearchAPIWorkflowRunRepository` |
| `workflow_node_executions` | `CORE_WORKFLOW_NODE_EXECUTION_REPOSITORY` | `ElasticsearchWorkflowNodeExecutionRepository` |
| `workflow_app_logs` | 不使用 factory | `ElasticsearchWorkflowAppLogRepository` |
| `workflow_node_execution_offload` | 集成处理 | 在 node executions 中自动处理 |
## ✅ **验证配置正确性**
配置完成后,您可以通过以下方式验证:
1. **检查应用启动**: 应用应该能正常启动,无错误日志
2. **测试 Elasticsearch 连接**: `flask elasticsearch status` 应该显示集群状态
3. **测试工作流执行**: 在 Dify 界面中执行工作流,检查是否有错误
## 🔄 **回滚方案**
如果需要回滚到 PostgreSQL只需注释掉或删除 Repository 配置:
```bash
# 注释掉这些行以回滚到 PostgreSQL
# CORE_WORKFLOW_EXECUTION_REPOSITORY=core.repositories.elasticsearch_workflow_execution_repository.ElasticsearchWorkflowExecutionRepository
# CORE_WORKFLOW_NODE_EXECUTION_REPOSITORY=core.repositories.elasticsearch_workflow_node_execution_repository.ElasticsearchWorkflowNodeExecutionRepository
# API_WORKFLOW_RUN_REPOSITORY=repositories.elasticsearch_api_workflow_run_repository.ElasticsearchAPIWorkflowRunRepository
```
## 🎯 **关键优势**
切换到 Elasticsearch 后,您将获得:
1. **更好的性能**: 专为日志数据优化的存储引擎
2. **全文搜索**: 支持复杂的日志搜索和分析
3. **时间序列优化**: 自动索引轮转和数据生命周期管理
4. **水平扩展**: 支持集群扩展处理大量数据
5. **实时分析**: 近实时的数据查询和聚合分析
现在所有的错误都已经修复,您可以安全地使用 Elasticsearch 作为工作流日志的存储后端了!