OpenTelemetry 트레이싱
n8n v2.42요약
OpenTelemetry 트레이싱은 n8n 2.19.0부터 프리뷰(Preview)로 제공되며, 이후 릴리스에서 변경될 수 있습니다. n8n은 워크플로 및 노드 실행에 대해 OpenTelemetry 트레이스를 내보낼 수 있습니다.
프리뷰 상태
OpenTelemetry 트레이싱은 n8n 2.19.0부터 프리뷰(Preview)로 제공되며, 이후 릴리스에서 변경될 수 있습니다. 프로덕션 워크플로에서는 이 기능에 의존하지 마세요. n8n은 이후 릴리스에서 OpenTelemetry 형식의 메트릭을 추가할 계획입니다.
n8n은 워크플로 및 노드 실행에 대해 OpenTelemetry 트레이스를 내보낼 수 있습니다. 이 트레이스를 사용하여 실행 지연 시간을 모니터링하고, 실패를 디버깅하고, 관찰 가능성(observability) 스택 전반에서 서비스 간 요청을 추적할 수 있습니다.
n8n에서 OpenTelemetry 트레이싱에 대한 개요 영상을 시청해 보세요.
이 섹션의 상세 내용은 n8n 공식 문서를 참조하세요.
얻을 수 있는 것#
트레이싱을 켜면, n8n은 각 실행마다 두 종류의 스팬을 내보냅니다.
workflow.execute: 워크플로 실행당 하나의 스팬입니다. 워크플로 ID, 이름, 버전, 노드 수, 실행 모드, 상태, 오류 유형(있는 경우)을 기록합니다.node.execute: 노드 실행당 하나의 스팬으로, 해당 워크플로 스팬 안에 중첩됩니다. 노드 ID, 이름, 유형, 버전, 입력 및 출력 아이템 수를 기록합니다.
각 스팬에는 n8n 인스턴스를 식별하는 리소스 속성이 포함됩니다.
service.name(기본값n8n)service.version(n8n 버전)n8n.instance.idn8n.instance.role(예:main,worker,webhook)
n8n은 트레이스 컨텍스트 전파도 처리합니다.
- 인바운드: 웹훅 요청에 W3C
traceparent헤더가 포함되어 있으면, n8n은 이를 워크플로 스팬의 부모로 사용합니다. 이렇게 하면 n8n 워크플로 트레이스가 상위 호출자와 연결됩니다. - 아웃바운드: HTTP Request node(및 n8n HTTP 헬퍼를 사용하는 다른 노드)는 아웃바운드 요청에
traceparent헤더를 주입할 수 있습니다. 따라서 W3C 트레이스 컨텍스트를 지원하는 다운스트림 서비스는 트레이스를 이어갈 수 있습니다. - 서브 워크플로: 서브 워크플로의 스팬은 상위 워크플로의 스팬을 부모로 사용합니다.
- 재개된 워크플로: 대기 후 워크플로가 재개되면, 새 스팬은 스팬 링크를 사용하여 이전 스팬으로 다시 연결됩니다.
UI에서 트레이싱 활성화#
기능 제공 여부
UI에서 OpenTelemetry 트레이싱을 구성하는 기능은 n8n 2.27.0부터 제공됩니다. UI에서 OpenTelemetry를 구성하려면 인스턴스 소유자 또는 관리자 권한이 있어야 합니다.
환경 변수를 설정하는 대신, Settings > OpenTelemetry에서 트레이싱을 구성할 수 있습니다. n8n은 재시작 없이 변경 사항을 적용하며, 큐 모드에서 워커와 웹훅 프로세서 전반에 걸쳐 이를 다시 로드합니다.
트레이싱을 구성하려면 다음을 수행하세요.
- Settings > OpenTelemetry를 선택합니다.
- Enable OpenTelemetry를 켭니다.
- Collector connection 아래에서 OTLP endpoint와 기타 연결 세부 정보를 입력합니다.
- Tracing 아래에서 샘플링 및 스팬 옵션을 설정합니다.
- Save settings를 선택합니다.
n8n이 컬렉터에 연결할 수 있는지 확인하려면, Verify configuration 아래에서 Send test trace를 선택하세요. n8n은 테스트 스팬 하나를 전송하고 컬렉터가 이를 수락했는지 보고합니다. 설정을 저장하기 전이나 후 어느 시점에도 실행할 수 있습니다.
각 필드는 환경 변수에 매핑되며, 이는 필드의 툴팁에 표시됩니다. 전체 목록은 OpenTelemetry 환경 변수를 참고하세요.
환경 변수가 우선합니다
환경 변수로 옵션을 설정하면, n8n은 해당 값을 사용하고 UI의 일치하는 필드를 비활성화합니다. UI에서 설정을 관리하려면 해당 환경 변수를 설정하지 않은 채로 두세요. n8n이 재시작되면, 환경 변수가 UI에 저장된 값을 재정의합니다.
환경 변수로 트레이싱 활성화#
워크플로 트레이싱을 활성화하려는 각 n8n 인스턴스(main, 워커, 웹훅 프로세서)에 다음 환경 변수를 설정하세요.
export N8N_OTEL_ENABLED=true
export N8N_OTEL_EXPORTER_OTLP_ENDPOINT=http://<your-collector-host>:4318
n8n을 재시작하세요. 인스턴스는 Protobuf 인코딩을 사용하여 OTLP HTTP를 통해 스팬을 내보내기 시작합니다. 대신 gRPC로 내보내려면 OTLP 프로토콜 선택을 참고하세요.
n8n은 기본적으로 엔드포인트에 /v1/traces를 추가합니다. N8N_OTEL_EXPORTER_OTLP_ENDPOINT는 트레이스 경로가 아니라 컬렉터의 기본 URL을 가리켜야 합니다. 엔드포인트는 http:// 또는 https:// URL이어야 합니다. 다른 스킴을 설정하거나 스킴을 지정하지 않으면, n8n은 경고를 기록하고 기본 엔드포인트를 사용합니다.
컬렉터에 인증이 필요한 경우, N8N_OTEL_EXPORTER_OTLP_HEADERS를 key=value 쌍의 쉼표 구분 목록으로 설정하세요.
export N8N_OTEL_EXPORTER_OTLP_HEADERS="authorization=Bearer <your-token>,x-tenant=acme"
// For added protection - It is recommended to use the `_FILE` postfix if you are putting a token in here:
export N8N_OTEL_EXPORTER_OTLP_HEADERS_FILE=/mnt/otel-headers
지원되는 변수의 전체 목록은 OpenTelemetry 환경 변수를 참고하세요.
OTLP 프로토콜 선택#
기능 제공 여부
Protocol 설정과 N8N_OTEL_EXPORTER_OTLP_PROTOCOL 환경 변수를 통한 OTLP gRPC 프로토콜은 n8n 2.39.0부터 제공됩니다.
n8n은 두 가지 OTLP 전송 방식으로 트레이스를 내보낼 수 있습니다.
http/protobuf(기본값): Protobuf 인코딩을 사용하는 HTTP 기반 OTLP입니다. 컬렉터는 관례적으로 포트 4318에서 이를 수신합니다. HTTP/2를 지원하지 않는 프록시, 인그레스, 방화벽에서도 동작하며 디버깅이 더 간단합니다.grpc: gRPC 기반 OTLP입니다. 컬렉터는 관례적으로 포트 4317에서 이를 수신합니다. HTTP/2 멀티플렉싱과 바이너리 프레이밍 덕분에 내보내기당 오버헤드가 더 낮습니다. 이 차이는 스팬 볼륨이 높을 때 가장 크게 나타납니다. 처음부터 끝까지 HTTP/2 지원이 필요합니다. 일부 프록시와 로드 밸런서는 HTTP/2를 위한 명시적인 구성이 필요합니다.
컬렉터가 gRPC만 수락하거나, HTTP/2를 지원하는 인프라를 통해 많은 양의 트레이스를 내보내는 경우가 아니라면 기본값인 http/protobuf를 유지하세요.
프로토콜을 선택하려면 Settings > OpenTelemetry의 Protocol 필드를 설정하거나 다음 환경 변수를 설정하세요.
export N8N_OTEL_EXPORTER_OTLP_PROTOCOL=grpc
변수 이름과 값(http/protobuf 및 grpc)은 업스트림 OTEL_EXPORTER_OTLP_PROTOCOL 사양과 일치합니다. Settings > OpenTelemetry의 다른 필드와 마찬가지로, 환경 변수를 설정하면 n8n은 Protocol 필드를 비활성화합니다.
TLS#
엔드포인트 스킴이 두 프로토콜 모두의 TLS 사용 여부를 결정합니다. https://는 TLS를 켜고 http://는 TLS를 끕니다. n8n은 grpc:// 스킴을 허용하지 않습니다.
사용자 지정 인증 기관(CA)을 신뢰하거나 상호 TLS(mTLS)를 위해 클라이언트 인증서를 제시하려면, 업스트림 OpenTelemetry 변수인 OTEL_EXPORTER_OTLP_CERTIFICATE, OTEL_EXPORTER_OTLP_CLIENT_KEY, OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE를 사용하세요. http/protobuf 프로토콜에서는 NODE_EXTRA_CA_CERTS도 사용할 수 있습니다. n8n에는 인증서를 위한 자체 설정이 없습니다.
gRPC 동작#
grpc 프로토콜은 http/protobuf와 다음과 같은 점이 다릅니다.
- 엔드포인트에 포트를 포함하세요. 포트가 명시되지 않은 gRPC 엔드포인트는 4317이 아니라 gRPC 기본값인 포트 443에 연결됩니다.
http://<your-collector-host>:4317과 같이 작성하세요. - gRPC 엔드포인트에는 URL 경로가 없습니다. n8n은 Trace path 설정(
N8N_OTEL_EXPORTER_OTLP_TRACING_PATH)을 무시하고 UI에서 해당 행을 숨깁니다. n8n은 저장된 값을 유지하며,http/protobuf로 다시 전환하면 그 값을 다시 적용합니다. - 사용자 지정 헤더는 gRPC 메타데이터가 됩니다. n8n은 키를 소문자로 변환합니다. 텍스트 값을 가진
-bin접미사 키를 포함하여 gRPC가 거부하는 항목은 건너뛰고, 시작을 실패시키는 대신 경고를 기록합니다. - 시작 시 연결 확인은 gRPC 채널이 준비될 때까지 기다립니다. 채널이 준비되었다면 n8n이 TCP 연결을 열고,
https://의 경우 TLS 핸드셰이크를 완료하고, HTTP/2 연결을 설정할 수 있다는 뜻입니다. 엔드포인트가 OTLP를 제공한다는 것까지 증명하지는 않습니다. 컬렉터가 스팬을 수신하는지 확인하려면 Settings > OpenTelemetry에서 Send test trace를 사용하세요. 이 확인은 시작을 막지 않습니다.
샘플링#
기본적으로 n8n은 모든 트레이스를 내보냅니다. 트래픽이 많은 인스턴스에서 볼륨을 줄이려면, N8N_OTEL_TRACES_SAMPLE_RATE를 0에서 1 사이의 값으로 설정하세요.
# Export 10% of traces
export N8N_OTEL_TRACES_SAMPLE_RATE=0.1
n8n은 트레이스 ID 비율 샘플러를 사용하므로, 동일한 트레이스 ID는 해당 트레이스의 모든 스팬에 걸쳐 전부 샘플링되거나 전부 삭제됩니다.
기본적으로 n8n은 프로덕션 실행에 대해서만 트레이스를 출력합니다. 모든 워크플로 실행에 대해 트레이스를 출력하려면 N8N_OTEL_TRACES_PRODUCTION_ONLY=false를 설정하세요.
스팬 볼륨 줄이기#
워크플로의 각 노드는 자체 스팬을 생성합니다. 노드가 많은 워크플로의 경우, 필요한 것보다 더 많은 데이터가 생성될 수 있습니다. 워크플로 수준 스팬만 내보내려면 다음을 설정하세요.
export N8N_OTEL_TRACES_INCLUDE_NODE_SPANS=false
n8n이 아웃바운드 HTTP 요청에 traceparent 헤더를 주입하지 않도록 하려면 다음을 설정하세요.
export N8N_OTEL_TRACES_INJECT_OUTBOUND=false
크래시된 실행#
기능 제공 여부
크래시된 실행에 대한 스팬은 n8n 2.42.0부터 제공됩니다.
실행 중이던 n8n 인스턴스가 결과를 기록하지 못한 채 중단되면(예: 메모리 부족으로 인한 종료나 컨테이너 퇴거) 해당 실행은 crashed 상태가 됩니다. n8n은 실행이 끝날 수 없음을 감지한 뒤에 해당 실행을 crashed로 표시합니다. n8n 2.42.0 이전에는 이러한 실행이 스팬을 생성하지 않았으므로, 트레이스 백엔드의 오류율에 모든 플랫폼 장애가 빠져 있었습니다. n8n 2.42.0부터 크래시된 실행은 workflow.execute 스팬 하나를 생성합니다.
크래시 스팬 수신#
스팬은 실행을 수행한 인스턴스가 아니라 크래시를 감지한 인스턴스가 내보냅니다. 큐 모드에서는 main 인스턴스가 감지하므로, 워커에만 OpenTelemetry를 켜지 말고 main 인스턴스에도 켜야 합니다. 일반 모드에서는 단일 main 인스턴스가 자신의 실행을 수행하고 확인하므로 기본 설정으로 충분합니다.
크래시 스팬 읽기#
크래시 스팬에는 일반 워크플로 스팬 속성에 더해 다음 속성이 있습니다.
| 속성 | 값 |
|---|---|
n8n.execution.status |
crashed |
n8n.execution.error_type |
WorkflowCrashedError |
n8n.execution.crash.detector |
크래시를 찾아낸 확인 방식입니다. n8n이 크래시를 감지하는 방법을 참고하세요. |
n8n.execution.reconstructed |
n8n이 원래 스팬을 종료한 경우 false, 스팬을 다시 만든 경우 true입니다. 추적된 스팬과 재구성된 스팬을 참고하세요. |
스팬 상태는 오류이며 exception 이벤트가 포함됩니다.
n8n이 크래시를 감지하는 방법#
| 감지기 | 의미 |
|---|---|
stall |
큐 모드입니다. 워커가 작업 잠금 갱신을 멈췄습니다. |
queue-recovery |
큐 모드입니다. 주기적 확인에서 큐에 작업이 없는데 실행 중인 실행을 찾았습니다. |
startup-recovery |
n8n이 재시작되었고 여전히 실행 중으로 표시된 실행을 찾았습니다. |
start-failure |
실행을 시작할 수 없었습니다. |
workflow-deactivation |
진행 중인 실행이 있는 상태에서 누군가 워크플로 게시를 취소했습니다. |
추적된 스팬과 재구성된 스팬#
실행을 시작한 인스턴스가 해당 실행의 workflow.execute 스팬을 엽니다. 같은 인스턴스가 크래시를 감지하면 n8n.execution.reconstructed=false로 그 스팬을 그 자리에서 종료합니다. 스팬은 시작 시 설정된 모든 속성을 유지합니다. 해당 인스턴스에서 아직 열려 있는 노드 스팬은 n8n.node.termination_reason=workflow_crashed로 종료됩니다.
다른 인스턴스가 크래시를 감지하는 경우(예: main 인스턴스가 재시작된 뒤)에는 열려 있는 스팬이 없습니다. n8n은 실행에 저장된 트레이스 컨텍스트로 같은 트레이스 안에 workflow.execute 스팬을 다시 만들고 n8n.execution.reconstructed=true를 설정합니다. 재구성된 스팬에는 워크플로 ID, 워크플로 이름, 워크플로 버전 ID, 프로젝트 ID, 프로젝트 및 워크플로 커스텀 스팬 속성, 실행 ID, 실행 모드, n8n.execution.is_retry, n8n.execution.retry_of가 포함됩니다. 다음은 포함되지 않습니다.
n8n.workflow.node_count.- 자체 노드 스팬. 크래시 전에 내보낸 노드 스팬은 트레이스에 그대로 남습니다. 인스턴스가 중단될 때 실행 중이던 노드에는 스팬이 없습니다.
- 실행이 대기 후 재개된 경우, 이전 스팬으로의 스팬 링크.
워크플로 커스텀 속성은 실행된 버전이 아니라 워크플로의 현재 설정에서 가져옵니다.
크래시된 실행 시 주의 사항#
- 기간은 실행 시간이 아니라 감지 지연입니다. 크래시 스팬은 인스턴스가 중단된 시점이 아니라 n8n이 크래시를 감지한 시점에 끝납니다.
stall은 1~2분,queue-recovery는 다음 주기적 확인,startup-recovery는 다음 재시작까지의 시간입니다. 지연 시간 메트릭에서는n8n.execution.status=crashed인 스팬을 제외하세요. 오류율 메트릭에만 포함하세요. - 재구성된 스팬은 부모가 없는 것으로 표시됩니다. 저장된 트레이스 컨텍스트는 원래 스팬의 ID이며, OpenTelemetry는 스팬 ID를 재사용할 수 없습니다. 재구성된 스팬은 끝나지 않은 스팬의 자식이 되므로, Jaeger 등의 백엔드는 부모 누락 경고를 표시합니다. 이 경고는 예상되는 동작입니다.
- 중단된 큐 작업의 상태가 바뀌었습니다. n8n 2.42.0 이전에는 워커가 중단된 작업이
error로 끝났습니다. n8n 2.42.0부터는 감지기stall과 함께crashed로 끝납니다.n8n.execution.status=error만 일치시키는 알림은 이러한 실행을 놓칩니다.
에이전트 트레이싱#
기능 제공 여부
에이전트 트레이싱은 n8n 2.33.0부터 제공됩니다.
n8n은 워크플로 트레이싱과 동일한 트레이서를 사용하여 에이전트(Agents) 기능으로 만든 에이전트 실행에 대한 상세 스팬도 내보낼 수 있습니다. 여기에는 워크플로에서 시작된 에이전트 실행, 채팅 통합에서 시작된 실행, 예약된 작업에서 시작된 실행이 포함됩니다.
레거시 AI Agent node
이 섹션은 새로운 에이전트(Agents) 기능의 트레이싱을 다룹니다. 이전의 AI Agent(LangChain) node는 다른 노드와 마찬가지로 표준 node.execute 스팬만 생성합니다. gen_ai.* 에이전트 실행 스팬이나 도구 호출 스팬은 내보내지 않습니다.
에이전트 트레이싱은 나머지 OTel 모듈과 함께 동작합니다. N8N_OTEL_ENABLED를 켠 상태에서 다음을 추가하세요.
export N8N_AGENTS_TRACING_ENABLED=true
워크플로 및 노드 스팬은 유지하면서 에이전트 스팬만 제외하려면 이 값을 false로 설정하세요.
기본적으로 에이전트 트레이싱은 프롬프트, 도구 인자, 응답, 도구 결과를 기록합니다. 민감한 입력 또는 출력 데이터를 제외하려면 다음과 같이 하세요.
export N8N_AGENTS_TRACING_RECORD_INPUTS=false
export N8N_AGENTS_TRACING_RECORD_OUTPUTS=false
전체 변수 목록은 OpenTelemetry 환경 변수를 참고하세요.
얻을 수 있는 것#
각 에이전트 실행은 응답을 스트리밍하는지 여부에 따라 <agent name>.generate 또는 <agent name>.stream이라는 이름의 루트 스팬 하나를 생성합니다. 에이전트가 수행하는 각 도구 호출은 중첩된 execute_tool <tool name> 스팬을 생성합니다.
이 스팬들은 OpenTelemetry GenAI 시맨틱 컨벤션(gen_ai.* 속성)을 사용하므로, LangSmith 전용으로 만들어진 도구뿐만 아니라 모든 OTLP 백엔드에서도 읽을 수 있습니다.
커스텀 스팬 속성#
프로젝트, 워크플로, 노드 스팬에 커스텀 속성을 추가할 수 있습니다. n8n은 각 커스텀 속성을 구성된 관찰 가능성 백엔드로 OpenTelemetry 스팬 속성으로 내보냅니다.
기능 제공 여부
커스텀 스팬 속성은 다음에서 제공됩니다.
- 셀프 호스팅: Enterprise
n8n Cloud에서는 제공되지 않습니다.
프로젝트 및 워크플로 커스텀 스팬 속성은 n8n 2.24.0부터 제공됩니다. 노드 커스텀 스팬 속성은 n8n 2.22.0부터 제공됩니다.
속성 값에 시크릿, 개인 데이터, 기타 민감한 값을 포함하지 마세요.
n8n은 다음과 같은 커스텀 속성 수준을 지원합니다.
| 수준 | 구성 위치 | 내보내지는 스팬 | 속성 접두사 |
|---|---|---|---|
| Project | Project settings | workflow.execute |
n8n.project.custom.<key> |
| Workflow | Workflow settings | workflow.execute |
n8n.workflow.custom.<key> |
| Node | 노드 Settings 탭 | node.execute |
n8n.node.custom.<key> |
프로젝트 스팬 속성 추가#
프로젝트 수준 스팬 속성을 추가하려면 다음을 수행하세요.
- 프로젝트를 엽니다.
- Project settings를 선택합니다.
- Custom Span Attributes 아래에서 스팬 속성을 하나 이상 추가합니다.
- Save를 선택합니다.
프로젝트 속성 값에는 일반 텍스트를 사용하세요.
워크플로 스팬 속성 추가#
워크플로 수준 스팬 속성을 추가하려면 다음을 수행하세요.
- 워크플로를 엽니다.
- Workflow settings를 엽니다.
- Custom Span Attributes 아래에서 Configure를 선택합니다.
- 스팬 속성을 하나 이상 추가합니다.
- Save를 선택합니다.
워크플로 속성 값에는 일반 텍스트를 사용하세요.
노드 스팬 속성 추가#
노드 수준 스팬 속성을 추가하려면 다음을 수행하세요.
- 노드를 열고 Settings 탭을 선택합니다.
- Custom Span Attributes 아래에서 Add Attribute를 선택합니다.
- Key를 입력합니다. 키는 일반 텍스트여야 합니다.
- Value를 입력합니다. 값은 일반 텍스트이거나
={{ $json.environment }}와 같은 표현식일 수 있습니다.
노드 속성 값은 문자열, 숫자, 불리언 중 하나로 해석되어야 합니다.
커스텀 노드에서 프로그래밍 방식으로 속성 추가#
커스텀 노드를 빌드하는 경우, 코드에서 커스텀 키-값 쌍을 첨부할 수 있습니다. 노드의 execute 메서드에서 setMetadata를 호출하세요.
async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
this.setMetadata({
tracing: {
'llm.model': 'gpt-4o',
'llm.token.input': 1500,
'llm.token.output': 340,
},
});
return [this.getInputData()];
}
n8n은 내보내지는 스팬에서 각 키 앞에 n8n.node.custom.을 붙입니다. 값은 문자열, 숫자, 불리언이어야 합니다.
이 API는 Code node에서는 사용할 수 없습니다. 스팬을 도메인 특화 데이터로 보강하고자 하는 노드 개발자를 위한 것입니다.
노드가 여기서 설정한 속성 키가 커스텀 노드 스팬 속성으로도 구성되어 있는 경우, 프로그래밍 방식으로 설정한 값이 우선합니다.
Jaeger로 사용해 보기#
로컬 Jaeger 인스턴스로 트레이스를 전송하여 실제 동작을 확인할 수 있습니다.
- 다음 내용을
docker-compose.yml로 저장하세요.
services:
jaeger:
image: jaegertracing/jaeger:latest
ports:
- "16686:16686" # UI
- "4317:4317" # OTLP gRPC
- "4318:4318" # OTLP HTTP
- Jaeger를 시작하세요.
docker compose up -d
- 트레이싱을 켠 상태로 n8n을 시작하고 Jaeger를 가리키도록 설정하세요. 설정 세부 정보는 n8n 시작하기를 참고하세요.
N8N_OTEL_ENABLED=true N8N_OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4318 n8n start
- 워크플로를 실행한 다음, http://localhost:16686에서 Jaeger UI를 열고 서비스로 "n8n"을 선택한 후 "Find traces"를 클릭하여 n8n이 내보낸 OpenTelemetry 트레이스를 확인하세요.
스팬 속성#
워크플로 및 노드 스팬에는 다음과 같은 n8n 관련 속성이 포함됩니다.
워크플로 스팬 (workflow.execute)#
| 속성 | 설명 |
|---|---|
n8n.workflow.id |
워크플로 ID입니다. |
n8n.workflow.name |
워크플로 이름입니다. |
n8n.workflow.version_id |
워크플로 버전 ID입니다. |
n8n.workflow.node_count |
워크플로 내 노드 수입니다. 크래시된 실행의 재구성된 스팬에는 없습니다. |
n8n.project.id |
프로젝트 ID입니다. n8n 2.23.0부터 제공됩니다. |
n8n.execution.id |
실행 ID입니다. |
n8n.execution.mode |
실행 모드입니다(예: manual, webhook, trigger, retry). |
n8n.execution.status |
최종 실행 상태입니다. 크래시된 실행의 경우 crashed를 포함합니다. |
n8n.execution.is_retry |
실행이 재시도인 경우 true입니다. |
n8n.execution.retry_of |
실행이 재시도인 경우, 원래 실행 ID입니다. |
n8n.execution.error_type |
실행이 실패할 때 설정되는 오류 클래스 이름입니다. 크래시 시에는 WorkflowCrashedError입니다. |
n8n.execution.crash.detector |
크래시를 찾아낸 확인 방식입니다: stall, queue-recovery, startup-recovery, start-failure, workflow-deactivation 중 하나입니다. n8n이 크래시를 감지하는 방법을 참고하세요. n8n 2.42.0부터 제공됩니다. |
n8n.execution.reconstructed |
n8n이 크래시 후 스팬을 다시 만든 경우 true, 원래 스팬을 종료한 경우 false입니다. 추적된 스팬과 재구성된 스팬을 참고하세요. n8n 2.42.0부터 제공됩니다. |
n8n.continuation.reason |
워크플로가 대기 후 재개될 때 스팬 링크에 설정됩니다. |
n8n.project.custom.<key> |
프로젝트 수준 커스텀 스팬 속성을 통해 설정된 커스텀 속성입니다. |
n8n.workflow.custom.<key> |
워크플로 수준 커스텀 스팬 속성을 통해 설정된 커스텀 속성입니다. |
노드 스팬 (node.execute)#
| 속성 | 설명 |
|---|---|
n8n.node.id |
노드 ID입니다. |
n8n.node.name |
노드 이름입니다. |
n8n.node.type |
노드 유형입니다(예: n8n-nodes-base.httpRequest). |
n8n.node.type_version |
노드 유형 버전입니다. |
n8n.node.items.input |
노드가 수신한 입력 아이템 수입니다. |
n8n.node.items.output |
노드가 생성한 출력 아이템 수입니다. |
n8n.node.termination_reason |
노드 스팬이 정상적으로 완료되지 않고 종료된 이유입니다(예: workflow_cancelled 또는 workflow_crashed). |
n8n.node.custom.<key> |
노드 설정의 노드 수준 커스텀 스팬 속성 또는 커스텀 노드 코드의 metadata.tracing을 통해 설정된 커스텀 속성입니다. |
노드가 실패하면, n8n은 표준 OpenTelemetry 예외 속성(exception.type, exception.message, exception.stacktrace)과 함께 스팬에 exception 이벤트를 기록합니다.
에이전트 실행 스팬 (<agent name>.generate 또는 <agent name>.stream)#
| 속성 | 설명 |
|---|---|
gen_ai.operation.name |
항상 invoke_agent입니다. |
gen_ai.agent.name |
에이전트 이름입니다. |
gen_ai.request.model |
알 수 있는 경우 <provider>/<model name> 형식의 모델 ID입니다. |
gen_ai.conversation.id |
스레드 ID입니다. |
gen_ai.prompt |
직렬화된 프롬프트, 도구 개수, 도구 카탈로그입니다. N8N_AGENTS_TRACING_RECORD_INPUTS가 false인 경우 생략됩니다. |
agent_id |
에이전트 ID입니다. |
project_id |
프로젝트 ID입니다. |
thread_id |
스레드 ID입니다. |
source |
실행이 시작된 위치입니다(예: workflow 또는 채팅 통합 이름). |
user_id |
알 수 있는 경우 사용자 ID입니다. |
model_id |
알 수 있는 경우 <provider>/<model name> 형식의 모델 ID입니다. |
execution_id |
워크플로에서 트리거된 실행의 경우 실행 ID입니다. |
workflow_id |
워크플로에서 트리거된 실행의 경우 워크플로 ID입니다. |
node_id |
워크플로에서 트리거된 실행의 경우 노드 ID입니다. |
도구 호출 스팬 (execute_tool <tool name>)#
| 속성 | 설명 |
|---|---|
gen_ai.operation.name |
항상 execute_tool입니다. |
gen_ai.tool.name |
도구 이름입니다. |
gen_ai.tool.call.id |
도구 호출 ID입니다. |
gen_ai.agent.name |
에이전트 이름입니다. |
gen_ai.tool.call.arguments |
도구 호출 인자입니다. N8N_AGENTS_TRACING_RECORD_INPUTS가 false인 경우 생략됩니다. |
gen_ai.tool.call.result |
도구 호출 결과입니다. N8N_AGENTS_TRACING_RECORD_OUTPUTS가 false인 경우 생략됩니다. |
문제 해결#
백엔드에 트레이스가 나타나지 않음#
n8n이 시작 시 OTLP 엔드포인트에 연결할 수 없으면, 다음과 같은 오류를 기록합니다.
Failed to connect to OpenTelemetry OTLP endpoint during startup
다음을 확인하세요.
N8N_OTEL_ENABLED이true로 설정되어 있는지 확인합니다.N8N_OTEL_EXPORTER_OTLP_ENDPOINT가 (/v1/traces경로가 아니라) 컬렉터의 기본 URL을 가리키는지 확인합니다.- 컬렉터가 n8n 컨테이너 또는 호스트에서 도달 가능한지 확인합니다.
- 필요한
N8N_OTEL_EXPORTER_OTLP_HEADERS(예: 인증 토큰)가 설정되어 있는지 확인합니다.
grpc 프로토콜을 사용하는 경우, 엔드포인트에 명시적인 포트가 포함되어 있는지도 확인하세요. 포트가 없으면 n8n은 4317이 아니라 포트 443에 연결합니다.
n8n은 기본적으로 warn 수준에서 OpenTelemetry 진단 정보를 기록합니다. 더 자세한 정보를 보려면 N8N_LOG_LEVEL=debug를 설정하세요.
gRPC와 사설 CA 사용 시 시작 연결 오류#
grpc 프로토콜의 시작 시 연결 확인은 기본 TLS 신뢰 저장소를 사용합니다. 익스포터는 OTEL_EXPORTER_OTLP_CERTIFICATE, OTEL_EXPORTER_OTLP_CLIENT_KEY, OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE를 따르지만, 이 확인은 이 변수들을 읽지 않습니다. 사설 인증 기관 뒤에 있거나 mTLS가 필요한 컬렉터는 이 확인에 실패해 Failed to connect to OpenTelemetry OTLP endpoint during startup을 기록할 수 있으며, 이때도 내보내기는 정상 동작합니다. 이 확인은 시작을 막지 않습니다. 컬렉터가 스팬을 수신하는지 확인하려면 Settings > OpenTelemetry에서 Send test trace를 사용하세요.
커스텀 스팬 속성이 누락됨#
다음을 확인하세요.
- Enterprise 라이선스를 보유하고 있는지 확인합니다.
N8N_OTEL_ENABLED을true로 설정했는지 확인합니다.- 노드 수준 스팬 속성의 경우,
N8N_OTEL_TRACES_INCLUDE_NODE_SPANS가false로 설정되어 있지 않은지 확인합니다.
크래시된 실행에 스팬이 없음#
main 인스턴스에서 OpenTelemetry를 켜세요. 큐 모드에서는 main 인스턴스가 크래시를 감지하고 스팬을 내보내므로, 워커에만 켜면 크래시 스팬이 생성되지 않습니다. 워커 스팬이 부모 컨텍스트를 유지하도록 모든 인스턴스 유형에 동일한 변수를 설정하세요.
인스턴스가 중단될 때 실행 중이던 노드에는 스팬이 없습니다. 크래시 전에 내보낸 노드 스팬은 트레이스에 그대로 남습니다. 크래시된 실행을 참고하세요.
재구성된 스팬에 부모 누락 경고가 표시됨#
n8n은 실행에 저장된 트레이스 컨텍스트로 스팬을 다시 만듭니다. 이 컨텍스트는 끝나지 않은 원래 스팬의 ID이며, OpenTelemetry는 스팬 ID를 재사용할 수 없습니다. 그 결과 재구성된 스팬은 백엔드가 받은 적 없는 스팬의 자식이 됩니다. 이 경고는 예상되는 동작입니다. 해당 스팬에는 n8n.execution.reconstructed=true가 있습니다. 주의 사항을 참고하세요.
워커 트레이스에 부모 컨텍스트가 없음#
큐 모드에서 워커는 데이터베이스에서 부모 트레이스 컨텍스트를 읽습니다. main 인스턴스에만 OpenTelemetry 환경 변수를 설정한 경우, 워커 스팬은 부모 워크플로 트레이스에 연결되지 않습니다. 모든 인스턴스 유형에 동일한 변수를 설정하세요.
에이전트 스팬이 나타나지 않음#
에이전트 스팬은 OTel 모듈에 의존합니다. 다음을 확인하세요.
N8N_OTEL_ENABLED가true로 설정되어 있는지 확인합니다.N8N_AGENTS_TRACING_ENABLED가true로 설정되어 있는지 확인합니다.
N8N_OTEL_ENABLED가 false로 설정되어 있으면, 에이전트 실행은 정상적으로 완료되지만 N8N_AGENTS_TRACING_ENABLED가 true로 설정되어 있어도 n8n은 해당 실행에 대한 스팬을 내보내지 않습니다.