Dify Enterprise Telemetry Data Dictionary
Quick reference for all telemetry signals emitted by Dify Enterprise. For configuration and architecture details, see 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 |
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 |
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.
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.user.id |
string |
No |
User identifier |
gen_ai.usage.total_tokens |
int |
No |
Total tokens (sum of all nodes) |
dify.workflow.version |
string |
Yes |
Workflow 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.user.id |
string |
No |
User identifier |
gen_ai.provider.name |
string |
No |
LLM provider (LLM nodes only) |
gen_ai.request.model |
string |
No |
LLM model (LLM nodes only) |
gen_ai.usage.input_tokens |
int |
No |
Input tokens (LLM nodes only) |
gen_ai.usage.output_tokens |
int |
No |
Output tokens (LLM nodes only) |
gen_ai.usage.total_tokens |
int |
No |
Total tokens (LLM nodes only) |
dify.node.total_price |
float |
No |
Cost (LLM nodes only) |
dify.node.currency |
string |
No |
Currency code (LLM nodes only) |
dify.node.plugin_name |
string |
No |
Plugin name (tool/knowledge nodes) |
dify.node.plugin_id |
string |
No |
Plugin ID (tool/knowledge nodes) |
dify.dataset.id |
string |
No |
Dataset ID (knowledge nodes) |
dify.dataset.name |
string |
No |
Dataset name (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.