Openflow 모니터링하기

이 항목에서는 Openflow의 상태를 모니터링하고 문제를 해결하는 방법에 대해 설명합니다.

Openflow 로그에 액세스하기

Snowflake는 Openflow 설정 시 구성한 이벤트 테이블로 Openflow 로그를 보냅니다.

Snowflake에서는 이벤트 테이블 쿼리의 WHERE 절에 타임스탬프를 포함하는 것을 권장합니다. 이는 다양한 Snowflake 구성 요소에서 생성되는 잠재적인 데이터 볼륨 때문에 특히 중요합니다. 필터를 적용하면 더 작은 데이터 하위 세트를 검색할 수 있으므로 쿼리 성능이 향상됩니다.

Openflow의 원격 분석을 빠르게 시작하려면 아래의 예제 쿼리 섹션을 참조하세요.

Openflow 원격 분석 스키마

이벤트 테이블 열에 대한 정보는 이벤트 테이블 열 섹션을 참조하십시오.

다음 섹션에서는 Openflow가 이벤트 테이블에서 원격 분석을 구조화하는 방법에 대해 설명합니다.

리소스 특성

Openflow에서 설정한 이벤트 메타데이터를 설명합니다. 다른 유형의 리소스 속성에 대한 일반적인 정보는 이벤트 테이블 열 설명서의 RESOURCE_ATTRIBUTES 열 섹션을 참조하세요.

이름

타입

설명

애플리케이션

String

고정 값 openflow

cloud.service.provider

String

aws, azure, gcp, spcs 중 하나

container.id

String

컨테이너의 고유 식별자

container.image.name

String

컨테이너 이미지의 정규화된 이름입니다. Openflow Runtime 컨테이너에는 로컬 컨테이너 레지스트리 경로가 포함됩니다.

예: $accountid.dkr.ecr.$region.amazonaws.com/snowflake-openflow/runtime-server

container.image.tag

String

컨테이너 이미지의 버전

k8s.container.name

String

K8 컨테이너의 이름입니다. Openflow Runtime 컨테이너는 ‘런타임 키’로 시작하여 -gateway 또는 `-server`로 끝납니다.

예를 들어, 런타임 키가 postgresql-cdc인 ‘PostgreSQL CDC’라는 이름의 Openflow Runtime은 다음과 같은 컨테이너 이름을 갖습니다.

  • postgresql-cdc-gateway

  • postgresql-cdc-server

k8s.container.restart_count

숫자 문자열

이 컨테이너가 생성된 이후 다시 시작된 횟수입니다.

k8s.namespace.name

String

Openflow 런타임의 경우 runtime-`으로 시작하는 포드 또는 컨테이너의 K8s 네임스페이스입니다. 값에는 `kube-system`openflow-runtime-infra`도 포함됩니다.

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의 포드 이름은 다음과 같습니다.

  • postgresql-cdc-0

  • postgresql-cdc-1

  • postgresql-cdc-2

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"
}
Copy

범위

이름

타입

설명

이름

String

메트릭의 공급자입니다. 다음 중 하나:

  • Openflow Connector 메트릭용 런타임

  • 시스템 수준 메트릭용 github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver

범위 예:
{
  "name": "runtime"
}
Copy

기록 유형

이 행이 나타내는 Openflow 원격 분석의 유형에 따라 다음 중 하나가 됩니다.

  • LOG

  • METRIC

Openflow는 TRACE 레코드를 수집하지 않지만, 이는 Snowflake Event Tables의 이 열에 유효한 유형이기도 합니다.

레코드

선택 사항입니다. 이 JSON 오브젝트는 이 행이 나타내는 메트릭 유형을 설명합니다.

이름

타입

설명

메트릭

오브젝트

다음 두 필드를 포함합니다.

  • 일반적으로 점으로 구분된 네임스페이스를 사용하여 생성된 고유한 메트릭에 대한 name

  • 바이트, 나노초, 스레드 등의 유형으로 표현되는 값에 대한 unit

이름과 단위 값은 매우 다양합니다. 전체 목록은 아래의 애플리케이션 메트릭 섹션을 참조하세요.

metric_type

String

다음 중 하나:

  • 증가하거나 감소할 수 있는 스냅샷 값인 대부분의 Openflow 메트릭에 대한 gauge

  • 포드 CPU 시간 및 네트워크 IO와 같은 누적 메트릭에 대한 sum

value_type

String

이 메트릭에 의해 생성된 값의 기본 유형입니다. 다음 중 하나:

  • INT

  • DOUBLE

aggregation_temporality

String

선택 사항입니다. 포드 CPU 시간 및 네트워크 IO와 같이 엄격하게 증가하고 이전 값에 의존하는 메트릭의 경우 누적으로 설정합니다.

is_monotonic

부울

선택 사항입니다. 누적 메트릭의 경우 시계열 내에서 엄격하게 증가하고 있음을 보여주는 데 적합합니다.

레코드 예:
{
  "metric": {
    "name": "connection.queued.duration.max",
    "unit": "millisecond"
  },
  "metric_type": "gauge",
  "value_type": "INT"
}
Copy

레코드 특성

로그

로그의 레코드 특성은 일반적으로 이 로그의 출처를 나타냅니다. 예를 들어, 이름이 `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"
}
Copy

시스템 메트릭

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"
}
Copy

이 열에는 원격 분석의 원시 값이 포함됩니다. 메트릭의 경우 이는 숫자 값(정수 또는 double)입니다. 로그의 경우 반정형 문자열 값 또는 올바른 형식의 JSON문자열입니다.

Openflow 런타임 로그

Openflow Runtimes는 대부분의 로그를 JSON으로 전송하므로 Snowflake의 /sql-reference/functions/try_parse_json`을 `VALUE 열에 적용하여 이 값을 다음과 같은 구조화된 필드로 더 세분화할 수 있습니다.

이름

타입

설명

formattedMessage

String

런타임 로거에서 송신한 실제 로그 메시지입니다.

level

String

다음 중 하나:

  • ERROR

  • WARN

  • INFO

  • DEBUG

  • TRACE

loggerName

String

로거의 정규화된 클래스 이름입니다. Openflow 프로세서는 일반적으로 `com.snowflake.openflow.runtime.processors`로 시작하는 로거 이름을 사용합니다.

이는 특정 프로세서, 컨트롤러 서비스 또는 번들 라이브러리에 대한 로그를 보는 데 유용합니다.

nanoseconds

Integer

이 로그 메시지가 생성된 나노초 수준의 시간으로, 밀리초부터 시작합니다.

예를 들어, 나노초 값 111222333은 타임스탬프 값 1749180210111에 해당하며, 나노초의 맨 왼쪽 3자리는 타임스탬프의 맨 오른쪽 3자리와 일치할 수 있습니다.

threadName

String

이 호출을 처리하는 스레드의 이름입니다. 예: Timer-Driven Process Thread-7

throwable

JSON 오브젝트

이 로그 메시지에 대한 예외 또는 스택 추적이 없는 경우 `null`입니다. 그렇지 않으면 스택 추적을 필드가 있는 JSON 문자열로 기록합니다.

  • className - 예외가 발생함

  • message - 예외와 함께 기록된 모든 메시지

  • stepArray - 다음을 포함한 스택 추적에 대한 메서드 호출의 배열

    • className

    • fileName

    • lineNumber

    • methodName

타임스탬프

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

포트의 고유 식별자

이름

사용자에게 표시되는 포트의 이름

유형

port-input 또는 port-output 중 하나

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

프로세스 그룹의 고유 식별자

이름

사용자에게 표시되는 프로세스 그룹의 이름

유형

고정 값 process-group

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

프로세서의 고유 식별자

이름

사용자에게 표시되고 사용자가 편집할 수 있는 프로세서의 이름

유형

고정 값 processor

구성 요소

변경할 수 없는 프로세서의 클래스 이름입니다.

execution.node

이 프로세서가 실행되도록 구성된 방식에 따라 ALL 또는 PRIMARY

group.id

이 프로세서를 포함하는 프로세스 그룹의 고유 식별자

카운터의 추가 특성​

위의 표준 프로세서 특성 외에도, `processor.counter`메트릭에는 다음이 포함됩니다.

속성

설명

유형

고정 값 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

유형

고정 값 remote-process-group

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

고정 값 cpu

이름

운영 체제의 이름

아키텍처

운영 체제의 아키텍처

버전

운영 체제 버전

저장소 메트릭

메트릭 이름

단위

설명

storage.free

bytes

지정된 리포지토리의 사용 가능한 저장소 양

storage.used

bytes

지정된 리포지토리에 대해 사용된 저장소의 양

저장소 레코드 특성

속성

설명

id

저장소 리포지토리의 고유 식별자

이름

ID와 동일하며 일관성을 위해 제공됨

storage.type

flowfile, content, provenance 중 하나

예제 쿼리

다음 쿼리는 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;
Copy

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';
Copy

실행 중인 프로세서와 비실행 중인 프로세서 찾기

일부 흐름에서는 데이터를 적극적으로 처리하지 않더라도 모든 프로세서가 ‘실행 중’ 상태에 있을 것으로 예상합니다.

이 쿼리는 다음과 같이 실행 중이거나 다른 상태에 있는 프로세서를 찾는 데 도움이 됩니다.

  • 중지됨

  • 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());
Copy

Openflow 런타임에 대한 높은 CPU 사용량 찾기

느린 데이터 흐름 또는 처리량 감소는 CPU의 병목 현상의 결과일 수 있습니다. Openflow Runtimes는 구성한 최소 및 최대 노드 수에 따라 자동으로 확장됩니다.

Openflow Runtime이 최대 노드 수를 사용하고 있지만 여전히 CPU 사용량이 높은 경우 다음을 고려하세요.

  1. 런타임에 할당된 최대 노드 수 늘리기

  2. 커넥터 또는 흐름 문제를 해결하여 병목 현상 식별하기

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;
Copy