16.4. 프로파일링 쿼리 실행

프로파일링 쿼리를 실행하려면 NodeObservabilityRun 리소스를 생성해야 합니다. 프로파일링 쿼리는 30초 동안 CRI-O 및 Kubelet 프로파일링 데이터를 가져오는 차단 작업입니다. 프로파일링 쿼리가 완료되면 컨테이너 파일 시스템 /run/node-observability 디렉터리 내에서 프로파일링 데이터를 검색해야 합니다. 데이터의 수명은 emptyDir 볼륨을 통해 에이전트 Pod에 바인딩되므로 에이전트 Pod가 running 상태인 동안 프로파일링 데이터에 액세스할 수 있습니다.

중요

언제든지 하나의 프로파일링 쿼리만 요청할 수 있습니다.

사전 요구 사항

  • 노드 Observability Operator가 설치되어 있습니다.
  • NodeObservability CR(사용자 정의 리소스)을 생성했습니다.
  • cluster-admin 권한이 있는 클러스터에 액세스할 수 있습니다.

절차

  1. 다음 텍스트가 포함된 nodeobservabilityrun.yaml 이라는 NodeObservabilityRun 리소스 파일을 생성합니다.

    apiVersion: nodeobservability.olm.openshift.io/v1alpha2
    kind: NodeObservabilityRun
    metadata:
      name: nodeobservabilityrun
    spec:
      nodeObservabilityRef:
        name: cluster
  2. NodeObservabilityRun 리소스를 실행하여 프로파일링 쿼리를 트리거합니다.

    $ oc apply -f nodeobservabilityrun.yaml
  3. 다음 명령을 실행하여 NodeObservabilityRun 의 상태를 검토합니다.

    $ oc get nodeobservabilityrun nodeobservabilityrun -o yaml  | yq '.status.conditions'

    출력 예

    conditions:
    - lastTransitionTime: "2022-07-07T14:57:34Z"
      message: Ready to start profiling
      reason: Ready
      status: "True"
      type: Ready
    - lastTransitionTime: "2022-07-07T14:58:10Z"
      message: Profiling query done
      reason: Finished
      status: "True"
      type: Finished

    상태가 True 이고 유형이 Finished 인 경우 프로파일링 쿼리가 완료됩니다.

  4. 다음 bash 스크립트를 실행하여 컨테이너의 /run/node-observability 경로에서 프로파일링 데이터를 검색합니다.

    for a in $(oc get nodeobservabilityrun nodeobservabilityrun -o yaml | yq .status.agents[].name); do
      echo "agent ${a}"
      mkdir -p "/tmp/${a}"
      for p in $(oc exec "${a}" -c node-observability-agent -- bash -c "ls /run/node-observability/*.pprof"); do
        f="$(basename ${p})"
        echo "copying ${f} to /tmp/${a}/${f}"
        oc exec "${a}" -c node-observability-agent -- cat "${p}" > "/tmp/${a}/${f}"
      done
    done