mirror of
https://github.com/langgenius/dify.git
synced 2026-03-19 00:21:09 +08:00
523 lines
23 KiB
Markdown
523 lines
23 KiB
Markdown
# Dify Enterprise Telemetry Data Dictionary
|
|
|
|
Quick reference for all telemetry signals emitted by Dify Enterprise. For configuration and architecture details, see [README.md](./README.md).
|
|
|
|
## Resource Attributes
|
|
|
|
Attached to every signal (Span, Metric, Log).
|
|
|
|
| Attribute | Type | Example |
|
|
|-----------|------|---------|
|
|
| `service.name` | string | `dify` |
|
|
| `host.name` | string | `dify-api-7f8b` |
|
|
|
|
## Traces (Spans)
|
|
|
|
### `dify.workflow.run`
|
|
|
|
| Attribute | Type | Description |
|
|
|-----------|------|-------------|
|
|
| `dify.trace_id` | string | Business trace ID (Workflow Run ID) |
|
|
| `dify.tenant_id` | string | Tenant identifier |
|
|
| `dify.app_id` | string | Application identifier |
|
|
| `dify.workflow.id` | string | Workflow definition ID |
|
|
| `dify.workflow.run_id` | string | Unique ID for this run |
|
|
| `dify.workflow.status` | string | `succeeded`, `failed`, `stopped`, etc. |
|
|
| `dify.workflow.error` | string | Error message if failed |
|
|
| `dify.workflow.elapsed_time` | float | Total execution time (seconds) |
|
|
| `dify.invoke_from` | string | `api`, `webapp`, `debug` |
|
|
| `dify.conversation.id` | string | Conversation ID (optional) |
|
|
| `dify.message.id` | string | Message ID (optional) |
|
|
| `dify.invoked_by` | string | User ID who triggered the run |
|
|
| `gen_ai.usage.total_tokens` | int | Total tokens across all nodes (optional) |
|
|
| `gen_ai.user.id` | string | End-user identifier (optional) |
|
|
| `dify.parent.trace_id` | string | Parent workflow trace ID (optional) |
|
|
| `dify.parent.workflow.run_id` | string | Parent workflow run ID (optional) |
|
|
| `dify.parent.node.execution_id` | string | Parent node execution ID (optional) |
|
|
| `dify.parent.app.id` | string | Parent app ID (optional) |
|
|
|
|
### `dify.node.execution`
|
|
|
|
| Attribute | Type | Description |
|
|
|-----------|------|-------------|
|
|
| `dify.trace_id` | string | Business trace ID |
|
|
| `dify.tenant_id` | string | Tenant identifier |
|
|
| `dify.app_id` | string | Application identifier |
|
|
| `dify.workflow.id` | string | Workflow definition ID |
|
|
| `dify.workflow.run_id` | string | Workflow Run ID |
|
|
| `dify.message.id` | string | Message ID (optional) |
|
|
| `dify.conversation.id` | string | Conversation ID (optional) |
|
|
| `dify.node.execution_id` | string | Unique node execution ID |
|
|
| `dify.node.id` | string | Node ID in workflow graph |
|
|
| `dify.node.type` | string | Node type (see appendix) |
|
|
| `dify.node.title` | string | Display title |
|
|
| `dify.node.status` | string | `succeeded`, `failed` |
|
|
| `dify.node.error` | string | Error message if failed |
|
|
| `dify.node.elapsed_time` | float | Execution time (seconds) |
|
|
| `dify.node.index` | int | Execution order index |
|
|
| `dify.node.predecessor_node_id` | string | Triggering node ID |
|
|
| `dify.node.iteration_id` | string | Iteration ID (optional) |
|
|
| `dify.node.loop_id` | string | Loop ID (optional) |
|
|
| `dify.node.parallel_id` | string | Parallel branch ID (optional) |
|
|
| `dify.node.invoked_by` | string | User ID who triggered execution |
|
|
| `gen_ai.usage.input_tokens` | int | Prompt tokens (LLM nodes only) |
|
|
| `gen_ai.usage.output_tokens` | int | Completion tokens (LLM nodes only) |
|
|
| `gen_ai.usage.total_tokens` | int | Total tokens (LLM nodes only) |
|
|
| `gen_ai.request.model` | string | LLM model name (LLM nodes only) |
|
|
| `gen_ai.provider.name` | string | LLM provider name (LLM nodes only) |
|
|
| `gen_ai.user.id` | string | End-user identifier (optional) |
|
|
|
|
### `dify.node.execution.draft`
|
|
|
|
Same attributes as `dify.node.execution`. Emitted during Preview/Debug runs.
|
|
|
|
## Counters
|
|
|
|
All counters are cumulative and emitted at 100% accuracy.
|
|
|
|
### Token Counters
|
|
|
|
| Metric | Unit | Description |
|
|
|--------|------|-------------|
|
|
| `dify.tokens.total` | `{token}` | Total tokens consumed |
|
|
| `dify.tokens.input` | `{token}` | Input (prompt) tokens |
|
|
| `dify.tokens.output` | `{token}` | Output (completion) tokens |
|
|
|
|
**Labels:**
|
|
- `tenant_id`, `app_id`, `operation_type`, `model_provider`, `model_name`, `node_type` (if node_execution)
|
|
|
|
⚠️ **Warning:** `dify.tokens.total` at workflow level includes all node tokens. Filter by `operation_type` to avoid double-counting.
|
|
|
|
#### Token Hierarchy & Query Patterns
|
|
|
|
Token metrics are emitted at multiple layers. Understanding the hierarchy prevents double-counting:
|
|
|
|
```
|
|
App-level total
|
|
├── workflow ← sum of all node_execution tokens (DO NOT add both)
|
|
│ └── node_execution ← per-node breakdown
|
|
├── message ← independent (non-workflow chat apps only)
|
|
├── rule_generate ← independent helper LLM call
|
|
├── code_generate ← independent helper LLM call
|
|
├── structured_output ← independent helper LLM call
|
|
└── instruction_modify← independent helper LLM call
|
|
```
|
|
|
|
**Key rule:** `workflow` tokens already include all `node_execution` tokens. Never sum both.
|
|
|
|
**Available labels on token metrics:** `tenant_id`, `app_id`, `operation_type`, `model_provider`, `model_name`, `node_type`.
|
|
App name is only available on span attributes (`dify.app.name`), not metric labels — use `app_id` for metric queries.
|
|
|
|
**Common queries** (PromQL):
|
|
|
|
```promql
|
|
# ── Totals ──────────────────────────────────────────────────
|
|
# App-level total (exclude node_execution to avoid double-counting)
|
|
sum by (app_id) (dify_tokens_total{operation_type!="node_execution"})
|
|
|
|
# Single app total
|
|
sum (dify_tokens_total{app_id="<app_id>", operation_type!="node_execution"})
|
|
|
|
# Per-tenant totals
|
|
sum by (tenant_id) (dify_tokens_total{operation_type!="node_execution"})
|
|
|
|
# ── Drill-down ──────────────────────────────────────────────
|
|
# Workflow-level tokens for an app
|
|
sum (dify_tokens_total{app_id="<app_id>", operation_type="workflow"})
|
|
|
|
# Node-level breakdown within an app
|
|
sum by (node_type) (dify_tokens_total{app_id="<app_id>", operation_type="node_execution"})
|
|
|
|
# Model breakdown for an app
|
|
sum by (model_provider, model_name) (dify_tokens_total{app_id="<app_id>"})
|
|
|
|
# Input vs output per model
|
|
sum by (model_name) (dify_tokens_input_total{app_id="<app_id>"})
|
|
sum by (model_name) (dify_tokens_output_total{app_id="<app_id>"})
|
|
|
|
# ── Rates ───────────────────────────────────────────────────
|
|
# Token consumption rate (per hour)
|
|
sum(rate(dify_tokens_total{operation_type!="node_execution"}[1h]))
|
|
|
|
# Per-app consumption rate
|
|
sum by (app_id) (rate(dify_tokens_total{operation_type!="node_execution"}[1h]))
|
|
```
|
|
|
|
**Finding `app_id` from app name** (trace query — Tempo / Jaeger):
|
|
|
|
```
|
|
{ resource.dify.app.name = "My Chatbot" } | select(resource.dify.app.id)
|
|
```
|
|
|
|
### Request Counters
|
|
|
|
| Metric | Unit | Description |
|
|
|--------|------|-------------|
|
|
| `dify.requests.total` | `{request}` | Total operations count |
|
|
|
|
**Labels by type:**
|
|
|
|
| `type` | Additional Labels |
|
|
|--------|-------------------|
|
|
| `workflow` | `tenant_id`, `app_id`, `status`, `invoke_from` |
|
|
| `node` | `tenant_id`, `app_id`, `node_type`, `model_provider`, `model_name`, `status` |
|
|
| `draft_node` | `tenant_id`, `app_id`, `node_type`, `model_provider`, `model_name`, `status` |
|
|
| `message` | `tenant_id`, `app_id`, `model_provider`, `model_name`, `status`, `invoke_from` |
|
|
| `tool` | `tenant_id`, `app_id`, `tool_name` |
|
|
| `moderation` | `tenant_id`, `app_id` |
|
|
| `suggested_question` | `tenant_id`, `app_id`, `model_provider`, `model_name` |
|
|
| `dataset_retrieval` | `tenant_id`, `app_id` |
|
|
| `generate_name` | `tenant_id`, `app_id` |
|
|
| `prompt_generation` | `tenant_id`, `app_id`, `operation_type`, `model_provider`, `model_name`, `status` |
|
|
|
|
### Error Counters
|
|
|
|
| Metric | Unit | Description |
|
|
|--------|------|-------------|
|
|
| `dify.errors.total` | `{error}` | Total failed operations |
|
|
|
|
**Labels by type:**
|
|
|
|
| `type` | Additional Labels |
|
|
|--------|-------------------|
|
|
| `workflow` | `tenant_id`, `app_id` |
|
|
| `node` | `tenant_id`, `app_id`, `node_type`, `model_provider`, `model_name` |
|
|
| `draft_node` | `tenant_id`, `app_id`, `node_type`, `model_provider`, `model_name` |
|
|
| `message` | `tenant_id`, `app_id`, `model_provider`, `model_name` |
|
|
| `tool` | `tenant_id`, `app_id`, `tool_name` |
|
|
| `prompt_generation` | `tenant_id`, `app_id`, `operation_type`, `model_provider`, `model_name` |
|
|
|
|
### Other Counters
|
|
|
|
| Metric | Unit | Labels |
|
|
|--------|------|--------|
|
|
| `dify.feedback.total` | `{feedback}` | `tenant_id`, `app_id`, `rating` |
|
|
| `dify.dataset.retrievals.total` | `{retrieval}` | `tenant_id`, `app_id`, `dataset_id`, `embedding_model_provider`, `embedding_model`, `rerank_model_provider`, `rerank_model` |
|
|
| `dify.app.created.total` | `{app}` | `tenant_id`, `app_id`, `mode` |
|
|
| `dify.app.updated.total` | `{app}` | `tenant_id`, `app_id` |
|
|
| `dify.app.deleted.total` | `{app}` | `tenant_id`, `app_id` |
|
|
|
|
## Histograms
|
|
|
|
| Metric | Unit | Labels |
|
|
|--------|------|--------|
|
|
| `dify.workflow.duration` | `s` | `tenant_id`, `app_id`, `status` |
|
|
| `dify.node.duration` | `s` | `tenant_id`, `app_id`, `node_type`, `model_provider`, `model_name`, `plugin_name` |
|
|
| `dify.message.duration` | `s` | `tenant_id`, `app_id`, `model_provider`, `model_name` |
|
|
| `dify.message.time_to_first_token` | `s` | `tenant_id`, `app_id`, `model_provider`, `model_name` |
|
|
| `dify.tool.duration` | `s` | `tenant_id`, `app_id`, `tool_name` |
|
|
| `dify.prompt_generation.duration` | `s` | `tenant_id`, `app_id`, `operation_type`, `model_provider`, `model_name` |
|
|
|
|
## Structured Logs
|
|
|
|
### Span Companion Logs
|
|
|
|
Logs that accompany spans. Signal type: `span_detail`
|
|
|
|
#### `dify.workflow.run` Companion Log
|
|
|
|
**Common attributes:** All span attributes (see Traces section) plus:
|
|
|
|
| Additional Attribute | Type | Always Present | Description |
|
|
|---------------------|------|----------------|-------------|
|
|
| `dify.app.name` | string | No | Application display name |
|
|
| `dify.workspace.name` | string | No | Workspace display name |
|
|
| `dify.workflow.version` | string | Yes | Workflow definition version |
|
|
| `dify.workflow.inputs` | string/JSON | Yes | Input parameters (content-gated) |
|
|
| `dify.workflow.outputs` | string/JSON | Yes | Output results (content-gated) |
|
|
| `dify.workflow.query` | string | No | User query text (content-gated) |
|
|
|
|
**Event attributes:**
|
|
- `dify.event.name`: `"dify.workflow.run"`
|
|
- `dify.event.signal`: `"span_detail"`
|
|
- `trace_id`, `span_id`, `tenant_id`, `user_id`
|
|
|
|
#### `dify.node.execution` and `dify.node.execution.draft` Companion Logs
|
|
|
|
**Common attributes:** All span attributes (see Traces section) plus:
|
|
|
|
| Additional Attribute | Type | Always Present | Description |
|
|
|---------------------|------|----------------|-------------|
|
|
| `dify.app.name` | string | No | Application display name |
|
|
| `dify.workspace.name` | string | No | Workspace display name |
|
|
| `dify.invoke_from` | string | No | Invocation source |
|
|
| `gen_ai.tool.name` | string | No | Tool name (tool nodes only) |
|
|
| `dify.node.total_price` | float | No | Cost (LLM nodes only) |
|
|
| `dify.node.currency` | string | No | Currency code (LLM nodes only) |
|
|
| `dify.node.iteration_index` | int | No | Iteration index (iteration nodes) |
|
|
| `dify.node.loop_index` | int | No | Loop index (loop nodes) |
|
|
| `dify.plugin.name` | string | No | Plugin name (tool/knowledge nodes) |
|
|
| `dify.credential.name` | string | No | Credential name (plugin nodes) |
|
|
| `dify.credential.id` | string | No | Credential ID (plugin nodes) |
|
|
| `dify.dataset.ids` | JSON array | No | Dataset IDs (knowledge nodes) |
|
|
| `dify.dataset.names` | JSON array | No | Dataset names (knowledge nodes) |
|
|
| `dify.node.inputs` | string/JSON | Yes | Node inputs (content-gated) |
|
|
| `dify.node.outputs` | string/JSON | Yes | Node outputs (content-gated) |
|
|
| `dify.node.process_data` | string/JSON | No | Processing data (content-gated) |
|
|
|
|
**Event attributes:**
|
|
- `dify.event.name`: `"dify.node.execution"` or `"dify.node.execution.draft"`
|
|
- `dify.event.signal`: `"span_detail"`
|
|
- `trace_id`, `span_id`, `tenant_id`, `user_id`
|
|
|
|
### Standalone Logs
|
|
|
|
Logs without structural spans. Signal type: `metric_only`
|
|
|
|
#### `dify.message.run`
|
|
|
|
| Attribute | Type | Description |
|
|
|-----------|------|-------------|
|
|
| `dify.event.name` | string | `"dify.message.run"` |
|
|
| `dify.event.signal` | string | `"metric_only"` |
|
|
| `trace_id` | string | OTEL trace ID (32-char hex) |
|
|
| `span_id` | string | OTEL span ID (16-char hex) |
|
|
| `tenant_id` | string | Tenant identifier |
|
|
| `user_id` | string | User identifier (optional) |
|
|
| `dify.app_id` | string | Application identifier |
|
|
| `dify.message.id` | string | Message identifier |
|
|
| `dify.conversation.id` | string | Conversation ID (optional) |
|
|
| `dify.workflow.run_id` | string | Workflow run ID (optional) |
|
|
| `dify.invoke_from` | string | `service-api`, `web-app`, `debugger`, `explore` |
|
|
| `gen_ai.provider.name` | string | LLM provider |
|
|
| `gen_ai.request.model` | string | LLM model |
|
|
| `gen_ai.usage.input_tokens` | int | Input tokens |
|
|
| `gen_ai.usage.output_tokens` | int | Output tokens |
|
|
| `gen_ai.usage.total_tokens` | int | Total tokens |
|
|
| `dify.message.status` | string | `succeeded`, `failed` |
|
|
| `dify.message.error` | string | Error message (if failed) |
|
|
| `dify.message.duration` | float | Duration (seconds) |
|
|
| `dify.message.time_to_first_token` | float | TTFT (seconds) |
|
|
| `dify.message.inputs` | string/JSON | Inputs (content-gated) |
|
|
| `dify.message.outputs` | string/JSON | Outputs (content-gated) |
|
|
|
|
#### `dify.tool.execution`
|
|
|
|
| Attribute | Type | Description |
|
|
|-----------|------|-------------|
|
|
| `dify.event.name` | string | `"dify.tool.execution"` |
|
|
| `dify.event.signal` | string | `"metric_only"` |
|
|
| `trace_id` | string | OTEL trace ID |
|
|
| `span_id` | string | OTEL span ID |
|
|
| `tenant_id` | string | Tenant identifier |
|
|
| `dify.app_id` | string | Application identifier |
|
|
| `dify.message.id` | string | Message identifier |
|
|
| `dify.tool.name` | string | Tool name |
|
|
| `dify.tool.duration` | float | Duration (seconds) |
|
|
| `dify.tool.status` | string | `succeeded`, `failed` |
|
|
| `dify.tool.error` | string | Error message (if failed) |
|
|
| `dify.tool.inputs` | string/JSON | Inputs (content-gated) |
|
|
| `dify.tool.outputs` | string/JSON | Outputs (content-gated) |
|
|
| `dify.tool.parameters` | string/JSON | Parameters (content-gated) |
|
|
| `dify.tool.config` | string/JSON | Configuration (content-gated) |
|
|
|
|
#### `dify.moderation.check`
|
|
|
|
| Attribute | Type | Description |
|
|
|-----------|------|-------------|
|
|
| `dify.event.name` | string | `"dify.moderation.check"` |
|
|
| `dify.event.signal` | string | `"metric_only"` |
|
|
| `trace_id` | string | OTEL trace ID |
|
|
| `span_id` | string | OTEL span ID |
|
|
| `tenant_id` | string | Tenant identifier |
|
|
| `dify.app_id` | string | Application identifier |
|
|
| `dify.message.id` | string | Message identifier |
|
|
| `dify.moderation.type` | string | `input`, `output` |
|
|
| `dify.moderation.action` | string | `pass`, `block`, `flag` |
|
|
| `dify.moderation.flagged` | boolean | Whether flagged |
|
|
| `dify.moderation.categories` | JSON array | Flagged categories |
|
|
| `dify.moderation.query` | string | Content (content-gated) |
|
|
|
|
#### `dify.suggested_question.generation`
|
|
|
|
| Attribute | Type | Description |
|
|
|-----------|------|-------------|
|
|
| `dify.event.name` | string | `"dify.suggested_question.generation"` |
|
|
| `dify.event.signal` | string | `"metric_only"` |
|
|
| `trace_id` | string | OTEL trace ID |
|
|
| `span_id` | string | OTEL span ID |
|
|
| `tenant_id` | string | Tenant identifier |
|
|
| `dify.app_id` | string | Application identifier |
|
|
| `dify.message.id` | string | Message identifier |
|
|
| `dify.suggested_question.count` | int | Number of questions |
|
|
| `dify.suggested_question.duration` | float | Duration (seconds) |
|
|
| `dify.suggested_question.status` | string | `succeeded`, `failed` |
|
|
| `dify.suggested_question.error` | string | Error message (if failed) |
|
|
| `dify.suggested_question.questions` | JSON array | Questions (content-gated) |
|
|
|
|
#### `dify.dataset.retrieval`
|
|
|
|
| Attribute | Type | Description |
|
|
|-----------|------|-------------|
|
|
| `dify.event.name` | string | `"dify.dataset.retrieval"` |
|
|
| `dify.event.signal` | string | `"metric_only"` |
|
|
| `trace_id` | string | OTEL trace ID |
|
|
| `span_id` | string | OTEL span ID |
|
|
| `tenant_id` | string | Tenant identifier |
|
|
| `dify.app_id` | string | Application identifier |
|
|
| `dify.message.id` | string | Message identifier |
|
|
| `dify.dataset.id` | string | Dataset identifier |
|
|
| `dify.dataset.name` | string | Dataset name |
|
|
| `dify.dataset.embedding_providers` | JSON array | Embedding model providers (one per dataset) |
|
|
| `dify.dataset.embedding_models` | JSON array | Embedding models (one per dataset) |
|
|
| `dify.retrieval.rerank_provider` | string | Rerank model provider |
|
|
| `dify.retrieval.rerank_model` | string | Rerank model name |
|
|
| `dify.retrieval.query` | string | Search query (content-gated) |
|
|
| `dify.retrieval.document_count` | int | Documents retrieved |
|
|
| `dify.retrieval.duration` | float | Duration (seconds) |
|
|
| `dify.retrieval.status` | string | `succeeded`, `failed` |
|
|
| `dify.retrieval.error` | string | Error message (if failed) |
|
|
| `dify.dataset.documents` | JSON array | Documents (content-gated) |
|
|
|
|
#### `dify.generate_name.execution`
|
|
|
|
| Attribute | Type | Description |
|
|
|-----------|------|-------------|
|
|
| `dify.event.name` | string | `"dify.generate_name.execution"` |
|
|
| `dify.event.signal` | string | `"metric_only"` |
|
|
| `trace_id` | string | OTEL trace ID |
|
|
| `span_id` | string | OTEL span ID |
|
|
| `tenant_id` | string | Tenant identifier |
|
|
| `dify.app_id` | string | Application identifier |
|
|
| `dify.conversation.id` | string | Conversation identifier |
|
|
| `dify.generate_name.duration` | float | Duration (seconds) |
|
|
| `dify.generate_name.status` | string | `succeeded`, `failed` |
|
|
| `dify.generate_name.error` | string | Error message (if failed) |
|
|
| `dify.generate_name.inputs` | string/JSON | Inputs (content-gated) |
|
|
| `dify.generate_name.outputs` | string | Generated name (content-gated) |
|
|
|
|
#### `dify.prompt_generation.execution`
|
|
|
|
| Attribute | Type | Description |
|
|
|-----------|------|-------------|
|
|
| `dify.event.name` | string | `"dify.prompt_generation.execution"` |
|
|
| `dify.event.signal` | string | `"metric_only"` |
|
|
| `trace_id` | string | OTEL trace ID |
|
|
| `span_id` | string | OTEL span ID |
|
|
| `tenant_id` | string | Tenant identifier |
|
|
| `dify.app_id` | string | Application identifier |
|
|
| `dify.prompt_generation.operation_type` | string | Operation type (see appendix) |
|
|
| `gen_ai.provider.name` | string | LLM provider |
|
|
| `gen_ai.request.model` | string | LLM model |
|
|
| `gen_ai.usage.input_tokens` | int | Input tokens |
|
|
| `gen_ai.usage.output_tokens` | int | Output tokens |
|
|
| `gen_ai.usage.total_tokens` | int | Total tokens |
|
|
| `dify.prompt_generation.duration` | float | Duration (seconds) |
|
|
| `dify.prompt_generation.status` | string | `succeeded`, `failed` |
|
|
| `dify.prompt_generation.error` | string | Error message (if failed) |
|
|
| `dify.prompt_generation.instruction` | string | Instruction (content-gated) |
|
|
| `dify.prompt_generation.output` | string/JSON | Output (content-gated) |
|
|
|
|
#### `dify.app.created`
|
|
|
|
| Attribute | Type | Description |
|
|
|-----------|------|-------------|
|
|
| `dify.event.name` | string | `"dify.app.created"` |
|
|
| `dify.event.signal` | string | `"metric_only"` |
|
|
| `tenant_id` | string | Tenant identifier |
|
|
| `dify.app_id` | string | Application identifier |
|
|
| `dify.app.mode` | string | `chat`, `completion`, `agent-chat`, `workflow` |
|
|
| `dify.app.created_at` | string | Timestamp (ISO 8601) |
|
|
|
|
#### `dify.app.updated`
|
|
|
|
| Attribute | Type | Description |
|
|
|-----------|------|-------------|
|
|
| `dify.event.name` | string | `"dify.app.updated"` |
|
|
| `dify.event.signal` | string | `"metric_only"` |
|
|
| `tenant_id` | string | Tenant identifier |
|
|
| `dify.app_id` | string | Application identifier |
|
|
| `dify.app.updated_at` | string | Timestamp (ISO 8601) |
|
|
|
|
#### `dify.app.deleted`
|
|
|
|
| Attribute | Type | Description |
|
|
|-----------|------|-------------|
|
|
| `dify.event.name` | string | `"dify.app.deleted"` |
|
|
| `dify.event.signal` | string | `"metric_only"` |
|
|
| `tenant_id` | string | Tenant identifier |
|
|
| `dify.app_id` | string | Application identifier |
|
|
| `dify.app.deleted_at` | string | Timestamp (ISO 8601) |
|
|
|
|
#### `dify.feedback.created`
|
|
|
|
| Attribute | Type | Description |
|
|
|-----------|------|-------------|
|
|
| `dify.event.name` | string | `"dify.feedback.created"` |
|
|
| `dify.event.signal` | string | `"metric_only"` |
|
|
| `trace_id` | string | OTEL trace ID |
|
|
| `span_id` | string | OTEL span ID |
|
|
| `tenant_id` | string | Tenant identifier |
|
|
| `dify.app_id` | string | Application identifier |
|
|
| `dify.message.id` | string | Message identifier |
|
|
| `dify.feedback.rating` | string | `like`, `dislike`, `null` |
|
|
| `dify.feedback.content` | string | Feedback text (content-gated) |
|
|
| `dify.feedback.created_at` | string | Timestamp (ISO 8601) |
|
|
|
|
#### `dify.telemetry.rehydration_failed`
|
|
|
|
Diagnostic event for telemetry system health monitoring.
|
|
|
|
| Attribute | Type | Description |
|
|
|-----------|------|-------------|
|
|
| `dify.event.name` | string | `"dify.telemetry.rehydration_failed"` |
|
|
| `dify.event.signal` | string | `"metric_only"` |
|
|
| `tenant_id` | string | Tenant identifier |
|
|
| `dify.telemetry.error` | string | Error message |
|
|
| `dify.telemetry.payload_type` | string | Payload type (see appendix) |
|
|
| `dify.telemetry.correlation_id` | string | Correlation ID |
|
|
|
|
## Content-Gated Attributes
|
|
|
|
When `ENTERPRISE_INCLUDE_CONTENT=false`, these attributes are replaced with reference strings (`ref:{id_type}={uuid}`).
|
|
|
|
| Attribute | Signal |
|
|
|-----------|--------|
|
|
| `dify.workflow.inputs` | `dify.workflow.run` |
|
|
| `dify.workflow.outputs` | `dify.workflow.run` |
|
|
| `dify.workflow.query` | `dify.workflow.run` |
|
|
| `dify.node.inputs` | `dify.node.execution` |
|
|
| `dify.node.outputs` | `dify.node.execution` |
|
|
| `dify.node.process_data` | `dify.node.execution` |
|
|
| `dify.message.inputs` | `dify.message.run` |
|
|
| `dify.message.outputs` | `dify.message.run` |
|
|
| `dify.tool.inputs` | `dify.tool.execution` |
|
|
| `dify.tool.outputs` | `dify.tool.execution` |
|
|
| `dify.tool.parameters` | `dify.tool.execution` |
|
|
| `dify.tool.config` | `dify.tool.execution` |
|
|
| `dify.moderation.query` | `dify.moderation.check` |
|
|
| `dify.suggested_question.questions` | `dify.suggested_question.generation` |
|
|
| `dify.retrieval.query` | `dify.dataset.retrieval` |
|
|
| `dify.dataset.documents` | `dify.dataset.retrieval` |
|
|
| `dify.generate_name.inputs` | `dify.generate_name.execution` |
|
|
| `dify.generate_name.outputs` | `dify.generate_name.execution` |
|
|
| `dify.prompt_generation.instruction` | `dify.prompt_generation.execution` |
|
|
| `dify.prompt_generation.output` | `dify.prompt_generation.execution` |
|
|
| `dify.feedback.content` | `dify.feedback.created` |
|
|
|
|
## Appendix
|
|
|
|
### Operation Types
|
|
|
|
- `workflow`, `node_execution`, `message`, `rule_generate`, `code_generate`, `structured_output`, `instruction_modify`
|
|
|
|
### Node Types
|
|
|
|
- `start`, `end`, `answer`, `llm`, `knowledge-retrieval`, `knowledge-index`, `if-else`, `code`, `template-transform`, `question-classifier`, `http-request`, `tool`, `datasource`, `variable-aggregator`, `loop`, `iteration`, `parameter-extractor`, `assigner`, `document-extractor`, `list-operator`, `agent`, `trigger-webhook`, `trigger-schedule`, `trigger-plugin`, `human-input`
|
|
|
|
### Workflow Statuses
|
|
|
|
- `running`, `succeeded`, `failed`, `stopped`, `partial-succeeded`, `paused`
|
|
|
|
### Payload Types
|
|
|
|
- `workflow`, `node`, `message`, `tool`, `moderation`, `suggested_question`, `dataset_retrieval`, `generate_name`, `prompt_generation`, `app`, `feedback`
|
|
|
|
### Null Value Behavior
|
|
|
|
**Spans:** Attributes with `null` values are omitted.
|
|
|
|
**Logs:** Attributes with `null` values appear as `null` in JSON.
|
|
|
|
**Content-Gated:** Replaced with reference strings, not set to `null`.
|