Honeycomb에 대한 GCP 정보 및 시스템 측정항목 수집

새롭고 흥미로운 프로젝트를 위해 팀은 현재 Google Cloud Platform (GCP) 개발에 온보딩 중입니다. 이것은 우리의 여정을 설명하는 일련의 게시물의 일부입니다. 더 많은 정보를 공유할 수 있을 때까지 기다릴 수 없지만 지금은 Sinatra 호스팅 Ruby API 서버를 보고 있다고 말할 수 있습니다. 서비스가 어떻게 수행되고 있는지 더 잘 이해하기 위해 몇 가지 "전통적인"메트릭을 수집하려고 합니다. 우리는 이미 testsAPI calls 추적을 위해 벌집을 사용하고 있기 때문에 더 많은 벌집을 조사하는 것이 제 첫 번째 선택이었습니다. 여기에 있는 대부분의 콘텐츠는 Ruby 및 GCP에 특화된 ("Getting Started With Honeycomb Metrics"백서)[ https://www.honeycomb.io/white-papers/ ]를 기반으로 합니다.

정적 런타임 정보



가장 먼저 수집해야 할 것은 현재 프로세스를 호스팅하는 컨테이너 런타임에 대한 정적 정보입니다. API 서비스의 기본 배포 인프라로 Cloud Run을 사용하고 있으므로 이것이 첫 번째 중지입니다. metadata server은 "Container instance metadata server"에 설명된 대로 컨테이너 인스턴스에 대한 세부 정보를 제공합니다.

GCP ruby ​​gem은 메타데이터 서버에 액세스할 수 있도록 제공합니다Google::Cloud.env. 다음은 간편한 필터링을 위해 모든 범위에 메타데이터를 추가하는 방법에 대한 정리된 예입니다.

require 'honeycomb-beeline'
Honeycomb.configure do |config|
  config.service_name = 'backend'
end

env = Google::Cloud.env
Honeycomb.client.libhoney.add_field('gcp.project_id', env.project_id)
Honeycomb.client.libhoney.add_field('gcp.instance_id', env.lookup_metadata('instance', 'id'))
Honeycomb.client.libhoney.add_field('gcp.instance_name', env.instance_name)

region_result = env.lookup_metadata "instance", "region"
region = region_result&.split('/')&.last
Honeycomb.client.libhoney.add_field('gcp.instance_region', region)

Honeycomb.client.libhoney.add_field('gcp.instance_zone', env.instance_zone)
Honeycomb.client.libhoney.add_field('gcp.instance_machine_type', env.instance_machine_type)
Honeycomb.client.libhoney.add_field('gcp.instance_tags', env.instance_tags)
Honeycomb.client.libhoney.add_field('gcp.knative_service_id', env.knative_service_id)
Honeycomb.client.libhoney.add_field('gcp.knative_service_revision', env.knative_service_revision)


앱 시작 시 로드되는 위치에 이 코드를 넣습니다. sinatra와 같은 랙 기반 프레임워크의 경우 이것은 config.ru 이며, 여기서 require 까지 이 코드를 포함합니다.

동시에 서비스에서 비공개 구성 플래그를 추가하여 영향력을 추적할 수도 있습니다. 예를 들어 컨테이너 변수에 FLAG_ENABLED가 설정되었는지 여부를 캡처하려면 다음을 수행하십시오.

Honeycomb.client.libhoney.add_field('flag_enabled', ENV['FLAG_ENABLED'] == 'true')


특성은 trace/span 사이드바에 표시되며 모든 쿼리에서 사용할 수 있습니다.



동적 데이터



CPU 및 메모리 사용량과 같은 실제 시스템 지표의 경우 libhoney은 빌더를 제공하고 dynamic fields ( API docs ). 동적 필드는 각 기간이 시작될 때[ 1 ] 평가되고 Honeycomb으로 전송되는 필드에 추가됩니다.

현재 Resident Set Size(RSS, "사용 중인 메모리")에 액세스하려면 get_process_mem gem을 사용합니다.

require 'get_process_mem'
Honeycomb.client.libhoney.add_dynamic_field('global.memory_inuse_bytes', proc { GetProcessMem.new.bytes.to_i })


프로세스의 총 수명은 시작 시간부터 지금까지의 차이로 계산할 수 있습니다.

start = Time.now
Honeycomb.client.libhoney.add_dynamic_field('global.process_uptime_seconds', proc { Time.now - start }


하트비트 API 호출 후 몇 분 후:



마무리 노트



이 게시물은 메트릭 수집의 첫 번째 시도를 구현하는 동안 작성되었습니다. GCP의 기능과 한계에 대한 이해를 지속적으로 개선함에 따라 수집된 정확한 측정항목을 다시 검토해야 할 것으로 예상됩니다. 예를 들어 Cloud Run에서 디스크에 기록된 데이터는 RAM에 저장되며 서비스의 할당량으로도 계산됩니다. 이것은 결국 계속 지켜봐야 할 것 같습니다.

Honeycomb은 시스템 메트릭을 애플리케이션 이벤트와 별도의 데이터 세트에 보관할 것을 권장합니다. 개발 중에는 현재 서비스에 대한 트래픽이 거의 없으므로 단순화를 위해 모든 것을 전역으로 유지하고 모든 이벤트에 연결합니다. 서비스에 더 많은 트래픽이 발생하면 이를 다시 검토해야 합니다.

좋은 웹페이지 즐겨찾기