Openflow 모니터링하기¶
이 항목에서는 Openflow의 상태를 모니터링하고 문제를 해결하는 방법에 대해 설명합니다.
Openflow 로그에 액세스하기¶
Snowflake는 Openflow 설정 시 구성한 이벤트 테이블로 Openflow 로그를 보냅니다.
Snowflake에서는 이벤트 테이블 쿼리의 WHERE 절에 타임스탬프를 포함하는 것을 권장합니다. 이는 다양한 Snowflake 구성 요소에서 생성되는 잠재적인 데이터 볼륨 때문에 특히 중요합니다. 필터를 적용하면 더 작은 데이터 하위 세트를 검색할 수 있으므로 쿼리 성능이 향상됩니다.
Openflow의 원격 분석을 빠르게 시작하려면 아래의 예제 쿼리 섹션을 참조하세요.
Openflow 원격 분석 스키마¶
이벤트 테이블 열에 대한 정보는 이벤트 테이블 열 섹션을 참조하십시오.
다음 섹션에서는 Openflow가 이벤트 테이블에서 원격 분석을 구조화하는 방법에 대해 설명합니다.
리소스 특성¶
Openflow에서 설정한 이벤트 메타데이터를 설명합니다. 다른 유형의 리소스 속성에 대한 일반적인 정보는 이벤트 테이블 열 설명서의 RESOURCE_ATTRIBUTES 열 섹션을 참조하세요.
이름  | 
타입  | 
설명  | 
|---|---|---|
애플리케이션  | 
String  | 
고정 값   | 
cloud.service.provider  | 
String  | 
  | 
container.id  | 
String  | 
컨테이너의 고유 식별자  | 
container.image.name  | 
String  | 
컨테이너 이미지의 정규화된 이름입니다. Openflow Runtime 컨테이너에는 로컬 컨테이너 레지스트리 경로가 포함됩니다. 예:   | 
container.image.tag  | 
String  | 
컨테이너 이미지의 버전  | 
k8s.container.name  | 
String  | 
K8 컨테이너의 이름입니다. Openflow Runtime 컨테이너는 ‘런타임 키’로 시작하여  예를 들어, 런타임 키가 postgresql-cdc인 ‘PostgreSQL CDC’라는 이름의 Openflow Runtime은 다음과 같은 컨테이너 이름을 갖습니다. 
  | 
k8s.container.restart_count  | 
숫자 문자열  | 
이 컨테이너가 생성된 이후 다시 시작된 횟수입니다.  | 
k8s.namespace.name  | 
String  | 
Openflow 런타임의 경우   | 
k8s.node.name  | 
String  | 
포드 및 컨테이너를 호스팅하는 EKS 노드의 내부 도메인 이름 또는 EKS 노드 자체입니다. 예: ip-10-12-13-144.us-west-2.compute.internal  | 
k8s.pod.name  | 
String  | 
K8 포드의 이름입니다. Openflow Runtime 포드는 ‘런타임 키’로 시작하여 각 포드 복제본의 숫자 식별자로 끝납니다. 이 수는 0에서 인덱싱된 런타임에 대해 설정된 ‘최대 노드 수’까지 증가할 수 있습니다. 예를 들어, 이름이 ‘PostgreSQL CDC’이고 런타임 키가 postgresql-cdc이며 3개의 노드가 있는 Openflow Runtime의 포드 이름은 다음과 같습니다. 
  | 
k8s.pod.start_time  | 
ISO 8601 날짜 문자열  | 
포드가 시작된 타임스탬프  | 
k8s.pod.uid  | 
UUID 문자열  | 
클러스터 내 포드의 고유 식별자  | 
openflow.dataplane.id  | 
UUID 문자열  | 
Snowflake Openflow UI에서 배포 > 세부 정보 보기를 통해 표시된 ‘ID’와 일치하는 Openflow 배포의 고유 식별자입니다.  | 
- 리소스 특성의 예:
 { "application": "openflow", "cloud.service.provider": "aws", "k8s.container.name": "pg-dev-server", "k8s.container.restart_count": "0", "k8s.namespace.name": "runtime-pg-dev", "k8s.node.name": "ip-10-10-62-36.us-east-2.compute.internal", "k8s.pod.name": "pg-dev-0", "k8s.pod.start_time": "2025-04-25T22:14:29Z", "k8s.pod.uid": "94610175-1685-4c8f-b0a1-42898d1058e6", "k8s.statefulset.name": "pg-dev", "openflow.dataplane.id": "abeddb4f-95ae-45aa-95b1-b4752f30c64a" }
범위¶
이름  | 
타입  | 
설명  | 
|---|---|---|
이름  | 
String  | 
메트릭의 공급자입니다. 다음 중 하나: 
  | 
- 범위 예:
 { "name": "runtime" }
기록 유형¶
이 행이 나타내는 Openflow 원격 분석의 유형에 따라 다음 중 하나가 됩니다.
LOG
METRIC
Openflow는 TRACE 레코드를 수집하지 않지만, 이는 Snowflake Event Tables의 이 열에 유효한 유형이기도 합니다.
레코드¶
선택 사항입니다. 이 JSON 오브젝트는 이 행이 나타내는 메트릭 유형을 설명합니다.
이름  | 
타입  | 
설명  | 
|---|---|---|
메트릭  | 
오브젝트  | 
다음 두 필드를 포함합니다. 
 이름과 단위 값은 매우 다양합니다. 전체 목록은 아래의 애플리케이션 메트릭 섹션을 참조하세요.  | 
metric_type  | 
String  | 
다음 중 하나: 
  | 
value_type  | 
String  | 
이 메트릭에 의해 생성된 값의 기본 유형입니다. 다음 중 하나: 
  | 
aggregation_temporality  | 
String  | 
선택 사항입니다. 포드 CPU 시간 및 네트워크 IO와 같이 엄격하게 증가하고 이전 값에 의존하는 메트릭의 경우 누적으로 설정합니다.  | 
is_monotonic  | 
부울  | 
선택 사항입니다. 누적 메트릭의 경우 시계열 내에서 엄격하게 증가하고 있음을 보여주는 데 적합합니다.  | 
- 레코드 예:
 { "metric": { "name": "connection.queued.duration.max", "unit": "millisecond" }, "metric_type": "gauge", "value_type": "INT" }
레코드 특성¶
로그¶
로그의 레코드 특성은 일반적으로 이 로그의 출처를 나타냅니다. 예를 들어, 이름이 `testruntime`인 Openflow Runtime의 로그는 다음과 같은 레코드 특성을 가질 수 있습니다.
{ "log.file.path": "/var/log/pods/runtime-testruntime_testruntime-0_66d80cdb-9484-40a4-bdba-f92eb0af14c7/testruntime-server/0.log", "log.iostream": "stdout", "logtag": "F" }
시스템 메트릭¶
CPU 사용량과 같은 시스템 메트릭은 일반적으로 레코드 속성을 설정하지 않으므로 이는 `null`이 됩니다.
Openflow Application 메트릭¶
애플리케이션 또는 ‘흐름’ 메트릭의 레코드 특성은 메트릭을 생성한 데이터 파이프라인의 구성 요소에 대한 세부 정보를 제공합니다. 이는 구성 요소의 유형에 따라 다릅니다. 애플리케이션 메트릭 섹션을 참조하세요.
{ "component": "PutSnowpipeStreaming", "execution.node": "ALL", "group.id": "c052f9d7-7f76-3013-a2c5-d3b064fa7326", "id": "c69e2913-22a9-36bb-a159-6a5ed1fb9d63", "name": "PutSnowpipeStreaming", "type": "processor" }
값¶
이 열에는 원격 분석의 원시 값이 포함됩니다. 메트릭의 경우 이는 숫자 값(정수 또는 double)입니다. 로그의 경우 반정형 문자열 값 또는 올바른 형식의 JSON문자열입니다.
Openflow 런타임 로그¶
Openflow Runtimes는 대부분의 로그를 JSON으로 전송하므로 Snowflake의 /sql-reference/functions/try_parse_json`을 `VALUE 열에 적용하여 이 값을 다음과 같은 구조화된 필드로 더 세분화할 수 있습니다.
이름  | 
타입  | 
설명  | 
|---|---|---|
formattedMessage  | 
String  | 
런타임 로거에서 송신한 실제 로그 메시지입니다.  | 
level  | 
String  | 
다음 중 하나: 
  | 
loggerName  | 
String  | 
로거의 정규화된 클래스 이름입니다. Openflow 프로세서는 일반적으로 `com.snowflake.openflow.runtime.processors`로 시작하는 로거 이름을 사용합니다. 이는 특정 프로세서, 컨트롤러 서비스 또는 번들 라이브러리에 대한 로그를 보는 데 유용합니다.  | 
nanoseconds  | 
Integer  | 
이 로그 메시지가 생성된 나노초 수준의 시간으로, 밀리초부터 시작합니다. 예를 들어, 나노초 값 111222333은 타임스탬프 값 1749180210111에 해당하며, 나노초의 맨 왼쪽 3자리는 타임스탬프의 맨 오른쪽 3자리와 일치할 수 있습니다.  | 
threadName  | 
String  | 
이 호출을 처리하는 스레드의 이름입니다. 예:   | 
throwable  | 
JSON 오브젝트  | 
이 로그 메시지에 대한 예외 또는 스택 추적이 없는 경우 `null`입니다. 그렇지 않으면 스택 추적을 필드가 있는 JSON 문자열로 기록합니다. 
  | 
타임스탬프  | 
Integer  | 
이 로그 메시지가 생성된 시간으로, UNIX 에포크 이후 밀리초로 표시됩니다. 예를 들어, 1749180210044는 로그가 2025-06-05 03:23:30.044 UTC에 생성되었음을 나타냅니다.  | 
애플리케이션 메트릭¶
참고
다음 목록에는 Openflow Runtimes에 사용할 수 있는 모든 애플리케이션 메트릭이 나와 있습니다. 런타임은 Snowflake 이벤트 테이블에 유지하기 위해 Openflow Connector와 관련된 메트릭의 하위 세트만 내보냅니다.
Snowflake의 OpenTelemetry 보고 작업은 일부 또는 모든 메트릭을 OTLP 대상으로 보낼 수 있습니다.
연결 메트릭¶
메트릭 이름  | 
단위  | 
설명  | 
|---|---|---|
connection.input.bytes  | 
bytes  | 
항목 입력의 크기  | 
connection.input.count  | 
항목  | 
항목 수 입력  | 
connection.output.bytes  | 
bytes  | 
항목 출력 크기  | 
connection.output.count  | 
항목  | 
항목 수 출력  | 
connection.queued.bytes  | 
bytes  | 
큐에 대기 중인 항목의 크기  | 
connection.queued.bytes.max  | 
bytes  | 
큐에 대기 중인 항목의 최대 크기  | 
connection.queued.count  | 
항목  | 
큐에 대기 중인 항목 수  | 
connection.queued.count.max  | 
항목  | 
큐에 대기 중인 최대 항목 수  | 
connection.queued.duration.total  | 
밀리초  | 
큐에 대기 중인 항목의 총 기간  | 
connection.queued.duration.max  | 
밀리초  | 
큐에 대기 중인 항목의 최대 기간  | 
connection.backpressure.threshold.bytes  | 
bytes  | 
역압을 적용하기 전에 이 연결에서 큐에 대기할 수 있는 데이터의 최대 크기(바이트)입니다.  | 
connection.backpressure.threshold.objects  | 
항목  | 
이 연결에서 역압을 적용하기 전에 큐에 대기할 수 있는, 구성된 최대 FlowFiles 수입니다.  | 
connection.loadbalance.status.load_balance_not_configured  | 
바이너리, 0 또는 1  | 
연결에 구성된 로드 밸런싱 설정이 없는 경우 1입니다. 그렇지 않으면 0입니다.  | 
connection.loadbalance.status.load_balance_active  | 
바이너리, 0 또는 1  | 
연결이 클러스터 전체에서 로드 밸런싱되는 경우 1입니다. 그렇지 않으면 0입니다.  | 
connection.loadbalance.status.load_balance_inactive  | 
바이너리, 0 또는 1  | 
연결이 클러스터 전체에서 로드 밸런싱되지 않는 경우 1입니다. 그렇지 않으면 0입니다.  | 
연결 레코드 특성¶
각 연결 메트릭에는 다음 레코드 특성이 포함됩니다.
속성  | 
설명  | 
|---|---|
id  | 
연결의 고유 식별자  | 
이름  | 
사용자에게 표시되는 연결의 이름  | 
유형  | 
고정 값   | 
source.id  | 
이 연결에 FlowFiles를 전송하는 구성 요소의 고유 식별자  | 
source.name  | 
이 연결에 FlowFiles를 전송하는 구성 요소의 사용자에게 표시되는 이름  | 
destination.id  | 
이 연결에서 FlowFiles를 수신하는 구성 요소의 고유 식별자  | 
destination.name  | 
이 연결에서 FlowFiles를 수신하는 구성 요소의 사용자에게 표시되는 이름  | 
group.id  | 
이 연결을 포함하는 프로세스 그룹의 고유 식별자  | 
입력 및 출력 포트 메트릭¶
입력 포트와 출력 포트는 기술적으로 두 가지 별개 유형의 구성 요소입니다. 일관성을 위해 입력 및 출력 포트의 메트릭과 속성은 동일하며, 입력 포트인지 출력 포트인지를 나타내는 type 특성은 예외입니다.
메트릭 이름  | 
단위  | 
설명  | 
|---|---|---|
port.thread.count.active  | 
스레드  | 
활성 스레드 수  | 
port.bytes.received  | 
bytes  | 
수신된 바이트 수  | 
port.bytes.sent  | 
bytes  | 
전송된 바이트 수  | 
port.flowfiles.received  | 
flowfiles  | 
수신된 FlowFiles 수  | 
port.flowfiles.sent  | 
flowfiles  | 
전송된 FlowFiles 수  | 
port.input.bytes  | 
bytes  | 
항목 입력의 크기  | 
port.input.count  | 
항목  | 
항목 수 입력  | 
port.output.bytes  | 
bytes  | 
항목 출력 크기  | 
port.output.count  | 
항목  | 
항목 수 출력  | 
입력 및 출력 포트 레코드 특성¶
각 포트 메트릭에는 다음 레코드 특성이 포함됩니다.
속성  | 
설명  | 
|---|---|
id  | 
포트의 고유 식별자  | 
이름  | 
사용자에게 표시되는 포트의 이름  | 
유형  | 
  | 
group.id  | 
이 포트를 포함하는 프로세스 그룹의 고유 식별자  | 
프로세스 그룹 메트릭¶
메트릭 이름  | 
단위  | 
설명  | 
|---|---|---|
processgroup.thread.count.active  | 
스레드  | 
활성 스레드 수  | 
processgroup.thread.count.stateless  | 
스레드  | 
상태 비저장 스레드 수  | 
processgroup.thread.count.terminated  | 
스레드  | 
종료된 스레드 수  | 
processgroup.bytes.read  | 
bytes  | 
읽은 바이트 수  | 
processgroup.bytes.received  | 
bytes  | 
수신된 바이트 수  | 
processgroup.bytes.transferred  | 
bytes  | 
전송된 바이트 수  | 
processgroup.bytes.sent  | 
bytes  | 
전송된 바이트 수  | 
processgroup.bytes.written  | 
bytes  | 
작성한 바이트 수  | 
processgroup.flowfiles.received  | 
flowfiles  | 
수신된 FlowFiles 수  | 
processgroup.flowfiles.sent  | 
flowfiles  | 
전송된 FlowFiles 수  | 
processgroup.flowfiles.transferred  | 
flowfiles  | 
전송된 FlowFiles 수  | 
processgroup.input.count  | 
항목  | 
항목 입력 수  | 
processgroup.input.content.size  | 
bytes  | 
항목 입력의 크기  | 
processgroup.output.count  | 
항목  | 
항목 출력 수  | 
processgroup.output.content.size  | 
bytes  | 
항목 출력 크기  | 
processgroup.queued.count  | 
항목  | 
큐에 대기 중인 항목 수  | 
processgroup.queued.content.size  | 
bytes  | 
큐에 대기 중인 항목의 크기  | 
processgroup.time.processing  | 
nanoseconds  | 
처리에 소요된 시간  | 
프로세스 그룹 레코드 특성¶
각 프로세스 그룹 메트릭에는 다음 레코드 특성이 포함됩니다.
속성  | 
설명  | 
|---|---|
id  | 
프로세스 그룹의 고유 식별자  | 
이름  | 
사용자에게 표시되는 프로세스 그룹의 이름  | 
유형  | 
고정 값   | 
tree.level  | 
흐름의 루트 프로세스 그룹을 기준으로 한 프로세스 그룹의 깊이입니다. 흐름의 최상위 수준에 있는 프로세스 그룹에는 1의 tree.level이 있습니다.  | 
프로세서 메트릭¶
메트릭 이름  | 
단위  | 
설명  | 
|---|---|---|
processor.thread.count.active  | 
스레드  | 
활성 스레드 수  | 
processor.thread.count.terminated  | 
스레드  | 
종료된 스레드 수  | 
processor.time.lineage.average  | 
나노초  | 
평균 계보 기간  | 
processor.invocations  | 
호출  | 
호출 수  | 
processor.bytes.read  | 
바이트  | 
읽은 바이트 수  | 
processor.bytes.received  | 
바이트  | 
수신된 바이트 수  | 
processor.bytes.sent  | 
바이트  | 
전송된 바이트 수  | 
processor.bytes.written  | 
바이트  | 
작성한 바이트 수  | 
processor.flowfiles.received  | 
flowfiles  | 
수신된 FlowFiles 수  | 
processor.flowfiles.removed  | 
flowfiles  | 
제거된 FlowFiles 수  | 
processor.flowfiles.sent  | 
flowfiles  | 
전송된 FlowFiles 수  | 
processor.input.count  | 
항목  | 
항목 입력 수  | 
processor.input.content.size  | 
bytes  | 
항목 입력의 크기  | 
processor.output.count  | 
항목  | 
항목 출력 수  | 
processor.output.content.size  | 
바이트  | 
항목 출력 크기  | 
processor.time.processing  | 
나노초  | 
처리에 소요된 시간  | 
processor.run.status.running  | 
바이너리, 0 또는 1  | 
실행 중인 경우 1, 그렇지 않은 경우 0  | 
processor.run.status.stopped  | 
바이너리, 0 또는 1  | 
중지된 경우 1, 그렇지 않은 경우 0  | 
processor.run.status.validating  | 
바이너리, 0 또는 1  | 
유효성 검사 중인 경우 1, 그렇지 않은 경우 0  | 
processor.run.status.invalid  | 
바이너리, 0 또는 1  | 
유효하지 않은 경우 1, 그렇지 않은 경우 0  | 
processor.run.status.disabled  | 
바이너리, 0 또는 1  | 
비활성화된 경우 1, 그렇지 않은 경우 0  | 
processor.counter  | 
카운트  | 
카운터의 값  | 
프로세서 레코드 특성¶
각 프로세서 메트릭에는 다음 레코드 특성이 포함됩니다.
속성  | 
설명  | 
|---|---|
id  | 
프로세서의 고유 식별자  | 
이름  | 
사용자에게 표시되고 사용자가 편집할 수 있는 프로세서의 이름  | 
유형  | 
고정 값   | 
구성 요소  | 
변경할 수 없는 프로세서의 클래스 이름입니다.  | 
execution.node  | 
이 프로세서가 실행되도록 구성된 방식에 따라   | 
group.id  | 
이 프로세서를 포함하는 프로세스 그룹의 고유 식별자  | 
카운터의 추가 특성¶
위의 표준 프로세서 특성 외에도, `processor.counter`메트릭에는 다음이 포함됩니다.
속성  | 
설명  | 
|---|---|
유형  | 
고정 값   | 
카운터  | 
카운터의 사용자 또는 시스템 생성 이름  | 
원격 프로세스 그룹 메트릭¶
메트릭 이름  | 
단위  | 
설명  | 
|---|---|---|
remoteprocessgroup.thread.count.active  | 
스레드  | 
활성 스레드 수  | 
remoteprocessgroup.remote.port.count.active  | 
포트  | 
활성 원격 포트 수  | 
remoteprocessgroup.remote.port.count.inactive  | 
포트  | 
비활성 원격 포트 수  | 
remoteprocessgroup.duration.lineage.average  | 
nanoseconds  | 
평균 계보 기간  | 
remoteprocessgroup.refresh.age  | 
밀리초  | 
마지막 새로 고침 이후의 시간  | 
remoteprocessgroup.received.count  | 
항목  | 
수신된 항목 수  | 
remoteprocessgroup.received.content.size  | 
bytes  | 
수신된 항목 크기  | 
remoteprocessgroup.sent.count  | 
항목  | 
전송된 항목 수  | 
remoteprocessgroup.sent.content.size  | 
bytes  | 
전송된 항목 크기  | 
remoteprocessgroup.transmission.status.transmitting  | 
바이너리, 0 또는 1  | 
원격 프로세스 그룹이 전송 중인 경우 1입니다. 그렇지 않으면 0입니다.  | 
remoteprocessgroup.transmission.status.nottransmitting  | 
바이너리, 0 또는 1  | 
원격 프로세스 그룹이 전송 중인 경우 0입니다. 그렇지 않은 경우 1입니다.  | 
원격 프로세스 그룹 레코드 특성¶
각 원격 프로세스 그룹 메트릭에는 다음 레코드 특성이 포함됩니다.
속성  | 
설명  | 
|---|---|
id  | 
원격 프로세스 그룹의 고유 식별자  | 
이름  | 
사용자에게 표시되는 원격 프로세스 그룹의 이름  | 
group.id  | 
이 원격 프로세스 그룹을 포함하는 프로세스 그룹의 고유 식별자  | 
authorization.issue  | 
원격 프로세스 그룹에 액세스하는 데 사용되는 인증  | 
target.uri  | 
원격 프로세스 그룹의 URI  | 
유형  | 
고정 값   | 
JVM 메트릭¶
메트릭 이름  | 
단위  | 
설명  | 
|---|---|---|
jvm.memory.heap.used  | 
bytes  | 
JVM 힙의 오브젝트가 현재 점유하고 있는 메모리의 양  | 
jvm.memory.heap.committed  | 
bytes  | 
JVM 힙에서 사용할 수 있도록 보장되는 메모리의 양  | 
jvm.memory.heap.max  | 
bytes  | 
JVM 힙에 할당된 최대 메모리 양  | 
jvm.memory.heap.init  | 
bytes  | 
JVM 힙에 할당된 초기 메모리 양  | 
jvm.memory.heap.usage  | 
백분율  | 
JVM 힙 사용량  | 
jvm.memory.non-heap.usage  | 
백분율  | 
JVM 비힙 사용량  | 
jvm.memory.total.init  | 
bytes  | 
JVM에 할당된 초기 메모리 양  | 
jvm.memory.total.used  | 
bytes  | 
JVM에서 사용하는 현재 메모리 양  | 
jvm.memory.total.max  | 
bytes  | 
JVM에서 사용할 수 있는 최대 메모리 양  | 
jvm.memory.total.committed  | 
bytes  | 
JVM에서 사용할 수 있도록 보장되는 메모리 양  | 
jvm.threads.count  | 
스레드  | 
라이브 스레드 수  | 
jvm.threads.deadlocks  | 
스레드  | 
JVM 스레드 교착 상태  | 
jvm.threads.daemon.count  | 
스레드  | 
라이브 데몬 스레드 수  | 
jvm.uptime  | 
초  | 
JVM 프로세스가 실행된 시간(초)  | 
jvm.file.descriptor.usage  | 
백분율  | 
현재 사용 중인 사용 가능한 파일 설명자의 백분율입니다.  | 
jvm.gc.G1-Concurrent-GC.runs  | 
실행  | 
G1 Concurrent Garbage Collection이 실행된 총 횟수  | 
jvm.gc.G1-Concurrent-GC.time  | 
밀리초  | 
G1 Concurrent Garbage Collection이 실행된 총 시간  | 
jvm.gc.G1-Young-Generation.runs  | 
실행  | 
G1 Young Generation이 실행된 총 횟수  | 
jvm.gc.G1-Young-Generation.time  | 
밀리초  | 
G1 Young Generation이 실행된 총 시간  | 
jvm.gc.G1-Old-Generation.runs  | 
실행  | 
G1 이전 세대가 실행된 총 횟수  | 
jvm.gc.G1-Old-Generation.time  | 
밀리초  | 
G1 이전 세대가 실행된 총 시간  | 
JVM 레코드 특성¶
JVM 메트릭은 레코드 특성을 제공하지 않습니다.
CPU 메트릭¶
메트릭 이름  | 
단위  | 
설명  | 
|---|---|---|
cores.available  | 
코어  | 
런타임에 사용 가능한 코어 수  | 
cores.load  | 
백분율  | 
시스템 로드 평균 또는 사용할 수 없는 경우 -1  | 
CPU 레코드 특성¶
속성  | 
설명  | 
|---|---|
id  | 
고정 값   | 
이름  | 
운영 체제의 이름  | 
아키텍처  | 
운영 체제의 아키텍처  | 
버전  | 
운영 체제 버전  | 
저장소 메트릭¶
메트릭 이름  | 
단위  | 
설명  | 
|---|---|---|
storage.free  | 
bytes  | 
지정된 리포지토리의 사용 가능한 저장소 양  | 
storage.used  | 
bytes  | 
지정된 리포지토리에 대해 사용된 저장소의 양  | 
저장소 레코드 특성¶
속성  | 
설명  | 
|---|---|
id  | 
저장소 리포지토리의 고유 식별자  | 
이름  | 
ID와 동일하며 일관성을 위해 제공됨  | 
storage.type  | 
  | 
예제 쿼리¶
다음 쿼리는 Openflow 원격 분석을 시작하는 데 도움이 되는 예입니다.
모든 쿼리는 Openflow가 `SNOWFLAKE.TELEMETRY.EVENTS`의 기본 이벤트 테이블에 원격 분석을 보내도록 구성되어 있다고 가정합니다. Snowflake 계정 또는 Openflow 배포가 다른 이벤트 테이블로 구성된 경우 `SNOWFLAKE.TELEMETRY.EVENTS`가 표시되는 위치에서 해당 테이블 이름을 대체합니다.
중단된 FlowFiles 찾기¶
이 쿼리는 일부 임계값을 초과하여 큐에 대기 중인 FlowFiles 연결을 반환하며, 이는 해당 연결이 중단되어 개입이 필요할 수 있음을 나타냅니다. 사용 사례에 따라 필요한 경우 30분 임계값을 조정합니다.
SELECT * FROM (
  SELECT
    resource_attributes:"openflow.dataplane.id" as Deployment_ID,
    resource_attributes:"k8s.namespace.name" as Runtime_Key,
    record_attributes:name as Connection_Name,
    record_attributes:id as Connection_ID,
    MAX(TO_NUMBER(value / 60 / 1000)) as Max_Queued_File_Minutes
  FROM snowflake.telemetry.events
  WHERE true
    AND record_type = 'METRIC'
    AND record:metric:name = 'connection.queued.duration.max'
    AND timestamp > dateadd(minutes, -30, sysdate())
  GROUP BY 1, 2, 3, 4
  ORDER BY Max_Queued_File_Minutes DESC
) WHERE Max_Queued_File_Minutes > 30;
Openflow Runtimes에 대한 오류 로그 찾기¶
SELECT
  timestamp,
  Deployment_ID,
  Runtime_Key,
  parsed_log:level as log_level,
  parsed_log:loggerName as logger,
  parsed_log:formattedMessage as message,
  parsed_log
FROM (
  SELECT
    timestamp,
    resource_attributes:"openflow.dataplane.id" as Deployment_ID,
    resource_attributes:"k8s.namespace.name" as Runtime_Key,
    TRY_PARSE_JSON(value) as parsed_log
  FROM snowflake.telemetry.events
  WHERE true
    AND timestamp > dateadd('minutes', -30, sysdate())
    AND record_type = 'LOG'
    AND resource_attributes:"k8s.namespace.name" like 'runtime-%'
  ORDER BY timestamp DESC
) WHERE log_level = 'ERROR';
실행 중인 프로세서와 비실행 중인 프로세서 찾기¶
일부 흐름에서는 데이터를 적극적으로 처리하지 않더라도 모든 프로세서가 ‘실행 중’ 상태에 있을 것으로 예상합니다.
이 쿼리는 다음과 같이 실행 중이거나 다른 상태에 있는 프로세서를 찾는 데 도움이 됩니다.
중지됨
invalid
비활성화됨
SELECT
  timestamp,
  resource_attributes:"openflow.dataplane.id" as Deployment_ID,
  resource_attributes:"k8s.namespace.name" as Runtime_Key,
  record_attributes:component as Processor,
  record_attributes:id as Processor_ID,
  TO_NUMBER(value) as Running
FROM snowflake.telemetry.events
WHERE true
  AND record:metric:name = 'processor.run.status.running'
  AND record_type = 'METRIC'
  AND timestamp > dateadd(minutes, -30, sysdate());
Openflow 런타임에 대한 높은 CPU 사용량 찾기¶
느린 데이터 흐름 또는 처리량 감소는 CPU의 병목 현상의 결과일 수 있습니다. Openflow Runtimes는 구성한 최소 및 최대 노드 수에 따라 자동으로 확장됩니다.
Openflow Runtime이 최대 노드 수를 사용하고 있지만 여전히 CPU 사용량이 높은 경우 다음을 고려하세요.
런타임에 할당된 최대 노드 수 늘리기
커넥터 또는 흐름 문제를 해결하여 병목 현상 식별하기
Snowsight 차트는 시간 경과에 따른 CPU 사용량에 대한 쿼리 결과를 시각화하는 쉬운 방법을 제공합니다.
SELECT
  timestamp,
  resource_attributes:"openflow.dataplane.id" as Deployment_ID,
  resource_attributes:"k8s.namespace.name" as Runtime_Key,
  resource_attributes:"k8s.pod.name" as Runtime_Pod,
  TO_NUMBER(value, 10, 3) * 100 as CPU_Usage_Percentage
FROM snowflake.telemetry.events
WHERE true
  AND timestamp > dateadd(minute, -30, sysdate())
  AND record_type = 'METRIC'
  AND record:metric:name ilike 'container.cpu.usage'
  AND resource_attributes:"k8s.namespace.name" ilike 'runtime-%'
  AND resource_attributes:"k8s.container.name" ilike '%-server'
ORDER BY timestamp desc, CPU_Usage_Percentage desc;