mirror of
https://github.com/langgenius/dify.git
synced 2026-04-20 22:28:09 +08:00
Move gen_ai.usage.*, gen_ai.request.model, gen_ai.provider.name, and gen_ai.user.id from companion-log-only to span attributes on workflow and node execution spans. These are small scalars with no size risk. Having them on spans enables filtering and grouping in trace UIs (Tempo, Jaeger, Datadog) without requiring a cross-signal join to companion logs. Data dictionary updated: span tables gain the new fields; companion log 'additional attributes' tables trimmed to only list fields not already covered by 'All span attributes'.
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`.
|