Fly.io

Supported OS Linux Mac OS

통합 버전3.0.0
이 통합 기능은 현재 공개 베타 버전입니다. 운영 환경에서 활성화할 경우 주의가 필요합니다.

개요

이 점검은 Datadog Agent를 통해 Fly.io 메트릭을 모니터링합니다.

설정

Fly 애플리케이션에서 실행되는 Agent에 이 검사를 설치하고 구성하려면 아래 지침을 따르세요.

설치

Fly.io 점검은 Datadog Agent 패키지에 포함되어 있습니다. Datadog Agent 실행 전용으로 하나의 Fly.io 애플리케이션을 배포하는 것을 권장합니다. 이 Agent는 Fly.io 점검을 실행하여 Prometheus 메트릭Machines API에서 추가 데이터를 수집할 수 있습니다. 또한, 조직 내 모든 Fly.io 애플리케이션에서 트레이스 및 사용자 지정 메트릭을 수신하도록 Agent를 구성할 수 있습니다.

Fly.io 애플리케이션으로 Agent 배포

  1. Fly.io에서 새 애플리케이션을 생성할 때 실행 시 이미지를 Datadog Agent로 설정하걱나 fly.toml 파일에 이미지를 제공하세요.

    [build]
        image = 'gcr.io/datadoghq/agent:7'
    
  2. DD_API_KEY라고 불리는 Datadog API 키에 대한 시크릿을 설정하고, 필요시 사이트DD_SITE로 설정하세요.

  3. 앱 디렉터리에 Fly.io 통합용 conf.yaml 파일을 생성하고, 통합을 구성한 다음, Agent의 conf.d/fly_io.d/ 디렉터리에 conf.yaml로 마운트합니다.

    instances:
    - empty_default_hostname: true
      headers:
          Authorization: Bearer <YOUR_FLY_TOKEN>
      machines_api_endpoint: http://_api.internal:4280
      org_slug: <YOUR_ORG_SLUG>
    
  4. 앱을 배포합니다.

참고: 애플리케이션에서 트레이스 및 사용자 지정 메트릭을 수집하려면 애플리케이션 트레이스를 참고하세요.

설정

  1. Fly.io 성능 데이터 수집을 시작하려면 Agent의 구성 디렉터리의 루트에서 conf.d/ 폴더에 있는 fly_io.d/conf.yaml 파일을 편집합니다. 사용 가능한 모든 구성 옵션은 샘플 fly_io.d/conf.yaml을 참고하세요.

  2. Agent를 다시 시작합니다.

검증

Agent 상태 하위 명령을 실행하고 Checks 섹션에서 fly_io를 찾습니다.

수집한 데이터

Metrics

fly_io.app.concurrency
(gauge)
fly_io.app.connect_time.bucket
(count)

second로 표시됨
fly_io.app.connect_time.count
(count)
fly_io.app.connect_time.sum
(count)

second로 표시됨
fly_io.app.count
(gauge)
앱 개수
fly_io.app.http_response_time.bucket
(count)

second로 표시됨
fly_io.app.http_response_time.count
(count)
fly_io.app.http_response_time.sum
(count)

second로 표시됨
fly_io.app.http_responses.count
(gauge)

response로 표시됨
fly_io.app.tcp_connects.count
(gauge)
fly_io.app.tcp_disconnects.count
(gauge)
fly_io.edge.data_in
(gauge)

byte로 표시됨
fly_io.edge.data_out
(gauge)

byte로 표시됨
fly_io.edge.http_response_time.bucket
(count)

second로 표시됨
fly_io.edge.http_response_time.count
(count)
fly_io.edge.http_response_time.sum
(count)

second로 표시됨
fly_io.edge.http_responses.count
(gauge)

response로 표시됨
fly_io.edge.tcp_connects.count
(gauge)
fly_io.edge.tcp_disconnects.count
(gauge)
fly_io.edge.tls_handshake_errors
(gauge)

error로 표시됨
fly_io.edge.tls_handshake_time.bucket
(count)

second로 표시됨
fly_io.edge.tls_handshake_time.count
(count)
fly_io.edge.tls_handshake_time.sum
(count)

second로 표시됨
fly_io.instance.cpu.count
(count)
각 CPU(cpu_id)가 다양한 종류의 작업(모드)을 실행하는 데 소요한 시간(센티초)
fly_io.instance.disk.io_in_progress
(gauge)
요청이 적절한 struct request_queue에 전달될 때 증가하고, 요청 처리가 완료되면 감소합니다.
fly_io.instance.disk.reads_completed.count
(count)
성공적으로 완료된 읽기 작업 총 횟수.
fly_io.instance.disk.reads_merged.count
(count)
효율성을 위해 서로 인접한 읽기 및 쓰기 작업은 병합될 수 있으며, 이 필드는 이러한 병합이 얼마나 자주 발생했는지를 알려줍니다.
fly_io.instance.disk.sectors_read.count
(count)
성공적으로 읽은 섹터의 총 개수.
fly_io.instance.disk.sectors_written.count
(count)
성공적으로 작성된 섹터의 총 개수.
fly_io.instance.disk.time_io.count
(count)
하나 이상의 요청이 시작되었거나 완료된 경우의 jiffy 수를 집계합니다. 요청이 2 jiffy 이상 실행되면, 동시 요청이 있는 경우 일부 I/O 시간이 집계되지 않을 수 있습니다.
millisecond로 표시됨
fly_io.instance.disk.time_io_weighted.count
(count)
이 필드는 I/O 시작, I/O 완료, I/O 병합, 또는 해당 통계를 읽을 때마다 증가하며, 그 증가분은 ‘진행 중인 I/O 개수(필드 9) × 마지막 업데이트 이후 경과한 I/O 시간(ms)’입니다.
millisecond로 표시됨
fly_io.instance.disk.time_reading.count
(count)
모든 읽기 작업에 소요된 총 밀리초 수.
millisecond로 표시됨
fly_io.instance.disk.time_writing.count
(count)
모든 쓰기 작업에 소요된 총 밀리초 수.
millisecond로 표시됨
fly_io.instance.disk.writes_completed.count
(count)
성공적으로 완료된 쓰기 작업의 총 횟수.
fly_io.instance.disk.writes_merged.count
(count)
효율성을 위해 서로 인접한 읽기 및 쓰기 작업은 병합될 수 있으며, 이 필드는 이러한 병합이 얼마나 자주 발생했는지를 알려줍니다.
fly_io.instance.filefd.allocated
(gauge)
할당된 파일 디스크립터 수
fly_io.instance.filefd.max
(gauge)
최대 파일 디스크립터 수
fly_io.instance.filesystem.block_size
(gauge)
파일 시스템 블록 크기.
fly_io.instance.filesystem.blocks
(gauge)
파일 시스템의 총 블록 수
fly_io.instance.filesystem.blocks_avail
(gauge)
사용 가능한 블록의 총 개수.
fly_io.instance.filesystem.blocks_free
(gauge)
남아 있는 블록의 총 개수.
fly_io.instance.load.avg
(gauge)
시스템 부하 평균은 시스템 실행 대기열에 있는 프로세스 수를 측정하는 값으로, 샘플은 1분, 5분, 15분 동안의 평균값을 나타냅니다.
process로 표시됨
fly_io.instance.memory.active
(gauge)
최근에 사용된 메모리이며, 꼭 필요한 경우가 아니면 일반적으로 회수되지 않습니다.
byte로 표시됨
fly_io.instance.memory.buffers
(gauge)
원시 디스크 블록을 위한 임시 저장소
byte로 표시됨
fly_io.instance.memory.cached
(gauge)
디스크에서 읽은 파일에 대한 메모리 캐시(페이지 캐시)와 tmpfs 및 shmem을 포함합니다. SwapCached는 포함되지 않습니다.
byte로 표시됨
fly_io.instance.memory.dirty
(gauge)
디스크에 다시 기록될 때까지 대기 중인 메모리
byte로 표시됨
fly_io.instance.memory.inactive
(gauge)
최근에 사용량이 적었던 메모리. 다른 용도로 재활용될 가능성이 더 높습니다.
_ byte로 표시됨_
fly_io.instance.memory.mem_available
(gauge)
스와핑 없이 새 애플리케이션을 시작하는 데 사용할 수 있는 메모리 용량을 추정한 값.
byte로 표시됨
fly_io.instance.memory.mem_free
(gauge)
사용 가능한 총 RAM.
byte로 표시됨
fly_io.instance.memory.mem_total
(gauge)
사용 가능한 총 RAM 용량(즉, 물리적 RAM에서 예약된 일부 비트와 커널 바이너리 코드를 제외한 용량)
byte로 표시됨
fly_io.instance.memory.pressure_full
(gauge)
모든 프로세스의 메모리 사용량
fly_io.instance.memory.pressure_some
(gauge)
하나 이상의 프로세스에서 발생한 메모리 부족 상태
fly_io.instance.memory.shmem
(gauge)
공유 메모리(shmem) 및 tmpfs에서 사용된 총 메모리 양
byte로 표시됨
fly_io.instance.memory.slab
(gauge)
커널 내 데이터 구조 캐시
byte로 표시됨
fly_io.instance.memory.swap_cached
(gauge)
한 번 스왑 아웃되었다가 다시 메모리로 불러왔지만, 여전히 스왑 파일에도 남아 있는 메모리
byte로 표시됨
fly_io.instance.memory.swap_free
(gauge)
RAM에서 제거되어 일시적으로 디스크에 저장된 메모리
byte로 표시됨
fly_io.instance.memory.swap_total
(gauge)
사용 가능한 스왑 공간의 총량
byte로 표시됨
fly_io.instance.memory.vmalloc_chunk
(gauge)
사용 가능한 vmalloc 영역 중 가장 큰 연속 블록
byte로 표시됨
fly_io.instance.memory.vmalloc_total
(gauge)
vmalloc 가상 주소 공간의 총 크기
byte로 표시됨
fly_io.instance.memory.vmalloc_used
(gauge)
vmalloc 영역에서 사용되는 양
byte로 표시됨
fly_io.instance.memory.writeback
(gauge)
디스크에 활발하게 기록되고 있는 메모리
byte로 표시됨
fly_io.instance.net.recv_bytes.count
(count)
인터페이스가 수신한 유효 바이트 수.
byte로 표시됨
fly_io.instance.net.recv_compressed.count
(count)
올바르게 수신된 압축 패킷 수.
fly_io.instance.net.recv_drop.count
(count)
수신되었지만 처리되지 않은 패킷 수(예: 리소스 부족 또는 지원되지 않는 프로토콜로 인해 미처리).
packet으로 표시됨
fly_io.instance.net.recv_errs.count
(count)
네트워크 디바이스에 수신된 불량 패킷의 총 개수.
packet으로 표시됨
fly_io.instance.net.recv_fifo.count
(count)
수신자 FIFO 오버플로 이벤트 카운터.
fly_io.instance.net.recv_frame.count
(count)
수신자 프레임 정렬 오류.
fly_io.instance.net.recv_multicast.count
(count)
수신된 멀티캐스트 패킷.
packet으로 표시됨
fly_io.instance.net.recv_packets.count
(count)
인터페이스가 수신한 정상 패킷 수.
packet으로 표시됨
fly_io.instance.net.sent_bytes.count
(count)
정상적으로 전송된 바이트 수.
byte로 표시됨
fly_io.instance.net.sent_carrier.count
(count)
전송 중 캐리어 손실로 인한 프레임 전송 오류 횟수.
fly_io.instance.net.sent_colls.count
(count)
패킷 전송 중 충돌 횟수.
fly_io.instance.net.sent_compressed.count
(count)
전송된 압축 패킷 수.
fly_io.instance.net.sent_drop.count
(count)
전송 도중 손실된 패킷 수(예: 리소스 부족으로 인한 손실).
packet으로 표시됨
fly_io.instance.net.sent_errs.count
(count)
전송 오류의 총 횟수.
fly_io.instance.net.sent_fifo.count
(count)
전송된 FIFO 오버플로 이벤트 카운터.
fly_io.instance.net.sent_packets.count
(count)
성공적으로 전송된 패킷 수.
packet으로 표시됨
fly_io.instance.up
(gauge)
VM이 정상적으로 보고 시 1을 반환
fly_io.instance.volume.size
(gauge)
볼륨 크기(바이트).
byte로 표시됨
fly_io.instance.volume.used
(gauge)
사용된 볼륨의 백분율.
byte로 표시됨
fly_io.machine.count
(gauge)
실행 중인 머신 수
fly_io.machine.cpus.count
(gauge)
CPU 수
fly_io.machine.gpus.count
(gauge)
GPU 수
fly_io.machine.memory
(gauge)
머신 메모리
megabyte로 표시됨
fly_io.machine.swap_size
(gauge)
Fly Machine을 위해 예약할 스왑 공간
megabyte로 표시됨
fly_io.machines_api.up
(gauge)
점검이 머신 API에 접근할 수 있는지 여부
fly_io.pg.database.size
(gauge)
데이터베이스 크기
byte로 표시됨
fly_io.pg.replication.lag
(gauge)
복제 지연
fly_io.pg_stat.activity.count
(gauge)
이 상태의 연결 수
fly_io.pg_stat.activity.max_tx_duration
(gauge)
활성 트랜잭션이 실행되는 최대 시간(초)
second로 표시됨
fly_io.pg_stat.archiver.archived_count
(gauge)
성공적으로 아카이브된 WAL 파일 수
fly_io.pg_stat.archiver.failed_count
(gauge)
WAL 파일 아카이브 실패 시도 횟수
fly_io.pg_stat.bgwriter.buffers_alloc
(gauge)
할당된 버퍼 수
fly_io.pg_stat.bgwriter.buffers_backend
(gauge)
백엔드에서 직접 기록한 버퍼 수
fly_io.pg_stat.bgwriter.buffers_backend_fsync
(gauge)
백엔드가 자체 fsync 호출을 실행해야 했던 횟수 (일반적으로 백엔드가 자체 쓰기를 수행하는 경우에도 백그라운드 라이터가 이를 처리합니다)
fly_io.pg_stat.bgwriter.buffers_checkpoint
(gauge)
체크포인트 중에 기록된 버퍼 수
fly_io.pg_stat.bgwriter.buffers_clean
(gauge)
백그라운드 라이터가 기록한 버퍼 수
fly_io.pg_stat.bgwriter.checkpoint_sync_time
(gauge)
체크포인트 처리 과정에서 파일이 디스크에 동기화되는 데 소요된 총 시간(밀리초)
millisecond로 표시됨
fly_io.pg_stat.bgwriter.checkpoint_write_time
(gauge)
체크포인트 처리 과정에서 파일이 디스크에 기록되는 데 소요된 총 시간(밀리초)
millisecond로 표시됨
fly_io.pg_stat.bgwriter.checkpoints_req
(gauge)
요청된 체크포인트 중 실행된 횟수
fly_io.pg_stat.bgwriter.checkpoints_timed
(gauge)
예약된 체크포인트 중 실행된 횟수
fly_io.pg_stat.bgwriter.maxwritten_clean
(gauge)
백그라운드 라이터가 너무 많은 버퍼를 기록하여 클리닝 스캔을 중단한 횟수
fly_io.pg_stat.bgwriter.stats_reset
(gauge)
이 통계가 마지막으로 초기화된 시간
fly_io.pg_stat.database.blk_read_time
(gauge)
이 데이터베이스에서 백엔드가 데이터 파일 블록을 읽는 데 소요된 시간(밀리초)
millisecond로 표시됨
fly_io.pg_stat.database.blk_write_time
(gauge)
이 데이터베이스에서 백엔드가 데이터 파일 블록을 쓰는 데 소요된 시간(밀리초)
millisecond로 표시됨
fly_io.pg_stat.database.blks_hit
(gauge)
디스크 블록이 버퍼 캐시에 이미 존재하여 읽기 작업이 필요하지 않았던 횟수(이는 PostgreSQL 버퍼 캐시의 적중률만 포함하며 운영 체제의 파일 시스템 캐시는 포함하지 않습니다)
fly_io.pg_stat.database.blks_read
(gauge)
이 데이터베이스에서 읽은 디스크 블록 수
fly_io.pg_stat.database.conflicts
(gauge)
이 데이터베이스에서 복구와의 충돌로 인해 취소된 쿼리 수. 충돌은 대기 서버에서만 발생합니다.
fly_io.pg_stat.database.conflicts_confl_bufferpin
(gauge)
이 데이터베이스에서 버퍼 고정으로 인해 취소된 쿼리 수
fly_io.pg_stat.database.conflicts_confl_deadlock
(gauge)
이 데이터베이스에서 데드락 발생으로 인해 취소된 쿼리 수
fly_io.pg_stat.database.conflicts_confl_lock
(gauge)
이 데이터베이스에서 잠금 시간 초과로 인해 취소된 쿼리 수
fly_io.pg_stat.database.conflicts_confl_snapshot
(gauge)
이 데이터베이스에서 오래된 스냅샷으로 인해 취소된 쿼리 수
fly_io.pg_stat.database.conflicts_confl_tablespace
(gauge)
이 데이터베이스에서 삭제된 테이블스페이스로 인해 취소된 쿼리 수
fly_io.pg_stat.database.deadlocks
(gauge)
이 데이터베이스에서 감지된 데드락 발생 건 수
fly_io.pg_stat.database.numbackends
(gauge)
현재 이 데이터베이스에 연결된 백엔드 수. 이 뷰에서 현재 상태를 반영하는 값을 반환하는 유일한 열입니다. 다른 모든 열은 마지막 재설정 이후 누적된 값을 반합니다.
fly_io.pg_stat.database.stats_reset
(gauge)
이 통계가 마지막으로 초기화된 시간
fly_io.pg_stat.database.tup_deleted
(gauge)
이 데이터베이스에서 쿼리가 삭제한 행 수
fly_io.pg_stat.database.tup_fetched
(gauge)
이 데이터베이스에서 쿼리가 가져온 행 수
fly_io.pg_stat.database.tup_inserted
(gauge)
이 데이터베이스에서 쿼리가 삽입한 행 수
fly_io.pg_stat.database.tup_returned
(gauge)
이 데이터베이스에서 쿼리가 반환한 행 수
fly_io.pg_stat.database.tup_updated
(gauge)
이 데이터베이스에서 쿼리가 업데이트한 행 수
fly_io.pg_stat.database.xact_commit
(gauge)
이 데이터베이스에서 커밋된 트랜잭션 수
fly_io.pg_stat.database.xact_rollback
(gauge)
이 데이터베이스에서 롤백된 트랜잭션 수
fly_io.pg_stat.replication.pg_current_wal_lsn_bytes
(gauge)
WAL 위치(바이트)
byte로 표시됨
fly_io.pg_stat.replication.pg_wal_lsn_diff
(gauge)
마스터와 슬레이브 간 지연(바이트)
byte로 표시됨
fly_io.pg_stat.replication.reply_time
(gauge)
대기 서버에서 수신한 마지막 응답 메시지의 전송 시간
fly_io.volume.block_size
(gauge)
각 메모리 블록의 크기(바이트)
byte로 표시됨
fly_io.volume.blocks.count
(gauge)
볼륨에 포함된 블록의 총 개수
fly_io.volume.blocks_avail
(gauge)
볼륨에서 데이터를 저장할 수 있는 블록 수
fly_io.volume.blocks_free
(gauge)
데이터 및 루트 사용자 작업에 사용 가능한 총 블록 수
fly_io.volume.created
(gauge)
볼륨이 생성되었는지 여부
fly_io.volume.encrypted
(gauge)
볼륨이 암호화되었는지 여부
fly_io.volume.size
(gauge)
볼륨 크기(GB)
gigabyte로 표시됨

이벤트

Fly.io 통합은 이벤트를 포함하지 않습니다.

서비스 점검

Fly.io 통합은 서비스 점검을 포함하지 않습니다.

애플리케이션 트레이스

Fly.io 환경에서 애플리케이션의 트레이스를 수집하려면 다음 단계를 따르세요.

  1. 애플리케이션을 계측합니다.

  2. Datadog Agent를 Fly.io 애플리케이션으로 배포합니다 .

  3. 애플리케이션의 fly.toml 또는 Dockerfile에 필요한 환경 변수를 설정하고 애플리케이션을 배포합니다.

    Datadog Agent 애플리케이션에 메트릭을 전송하려면 다음을 환경 변수로 설정하세요.

    [env]
        DD_AGENT_HOST="<YOUR_AGENT_APP_NAME>.internal"
    

    로그와 메트릭에 대해 동일한 호스트를 보고하도록 하려면 다음 환경 변수를 설정하세요.

    DD_TRACE_REPORT_HOSTNAME="true"
    

    통합 서비스 태깅을 사용하려면 다음 환경 변수를 설정하세요.

    DD_SERVICE="APP_NAME"
    DD_ENV="ENV_NAME"
    DD_VERSION="VERSION"
    

    로그와 트레이스를 연관시키기 위해 다음 단계를 따르고 이 환경 변수를 설정하세요.

    DD_LOGS_INJECTION="true"
    
  4. Datadog Agent 애플리케이션 fly.toml에서 다음 환경 변수를 설정하고 앱을 배포합니다.

    [env]
        DD_APM_ENABLED = "true"
        DD_APM_NON_LOCAL_TRAFFIC = "true"
        DD_DOGSTATSD_NON_LOCAL_TRAFFIC = "true"
        DD_BIND_HOST = "fly-global-services"
    

참고: Fly.io 인스턴스 설정에서 APM 및 DogStatsD 포트가 (활성화된 경우) 공개적으로 노출되지 않도록 하세요.

로그 수집

Fly.io 애플리케이션에서 로그를 수집하기 위해 fly_logs_shipper를 사용합니다.

  1. 로그 전송 프로젝트를 복제합니다.

  2. vector-configs/vector.toml 파일을 수정하여 로그 소스를 fly_io로 설정합니다.

    [transforms.log_json]
    type = "remap"
    inputs = ["nats"]
    source  = '''
    . = parse_json!(.message)
    .ddsource = 'fly-io'
    .host = .fly.app.instance
    .env = <YOUR_ENV_NAME>
    '''
    

이 구성은 기본적인 Fly 관련 로그 속성을 파싱합니다. 모든 로그 속성을 완전히 파싱하려면 Vector 변환을 사용하여 앱별로 ddsource알려진 로그 통합으로 설정합니다.

  1. NATS에 대한 시크릿을 설정합니다. ORGACCESS_TOKEN

  2. Datadog DATADOG_API_KEYDATADOG_SITE에 대한 시크릿을 설정합니다.

  3. 로그 전송 앱을 배포합니다.

트러블슈팅

도움이 필요하세요? Datadog 지원 팀에 문의하세요.