Fluent Bit 문서/모니터링

Jmnote (토론 | 기여)님의 2024년 3월 5일 (화) 15:50 판 (→‎v2 메트릭)

1 개요

모니터링

Fluent Bit 데이터 파이프라인을 모니터링하는 방법 알아보기

Fluent Bit에는 파이프라인 내부를 모니터링하고, Prometheus 및 Grafana에 연결하고, 상태 확인 및 커넥터를 사용하여 이러한 목적으로 외부 서비스를 사용할 수 있는 기능이 내장되어 있습니다.

2 HTTP 서버

Fluent Bit에는 내부 정보를 쿼리하고 실행 중인 각 플러그인의 지표를 모니터링하는 데 사용할 수 있는 HTTP 서버가 내장되어 있습니다.

모니터링 인터페이스는 기본 형식을 지원하므로 Prometheus와 쉽게 통합될 수 있습니다.

2.1 시작하기

시작하기 위한 첫 번째 단계는 설정 파일에서 HTTP 서버를 활성화하는 것입니다.

[SERVICE]
    HTTP_Server  On
    HTTP_Listen  0.0.0.0
    HTTP_PORT    2020

[INPUT]
    Name cpu

[OUTPUT]
    Name  stdout
    Match *

위의 설정 스니핏은 Fluent Bit에 TCP 포트 2020에서 HTTP 서버를 시작하고 모든 네트워크 인터페이스에서 수신하도록 지시합니다.

$ bin/fluent-bit -c fluent-bit.conf
Fluent Bit v1.4.0
* Copyright (C) 2019-2020 The Fluent Bit Authors
* Copyright (C) 2015-2018 Treasure Data
* Fluent Bit is a CNCF sub-project under the umbrella of Fluentd
* https://fluentbit.io

[2020/03/10 19:08:24] [ info] [engine] started
[2020/03/10 19:08:24] [ info] [http_server] listen iface=0.0.0.0 tcp_port=2020

이제 간단한 curl 명령어만으로 몇 가지 정보를 수집할 수 있습니다.

$ curl -s http://127.0.0.1:2020 | jq
{
  "fluent-bit": {
    "version": "0.13.0",
    "edition": "Community",
    "flags": [
      "FLB_HAVE_TLS",
      "FLB_HAVE_METRICS",
      "FLB_HAVE_SQLDB",
      "FLB_HAVE_TRACE",
      "FLB_HAVE_HTTP_SERVER",
      "FLB_HAVE_FLUSH_LIBCO",
      "FLB_HAVE_SYSTEMD",
      "FLB_HAVE_VALGRIND",
      "FLB_HAVE_FORK",
      "FLB_HAVE_PROXY_GO",
      "FLB_HAVE_REGEX",
      "FLB_HAVE_C_TLS",
      "FLB_HAVE_SETJMP",
      "FLB_HAVE_ACCEPT4",
      "FLB_HAVE_INOTIFY"
    ]
  }
}

터미널에서 JSON 데이터를 쉽게 읽을 수 있도록 도와주는 jq 프로그램에 curl 명령 출력을 보내고 있다는 점을 참고하세요. Fluent Bit는 JSON을 예쁘게 인쇄하는 것을 목표로 하지 않습니다.

2.2 REST API 인터페이스

Fluent Bit는 모니터링을 위한 유용한 인터페이스를 노출하는 것을 목표로 하며, Fluent Bit v0.14부터 다음의 엔드포인트를 사용할 수 있습니다.

URI 설명 데이터 형식
/ Fluent Bit 빌드 정보 JSON
/api/v1/uptime 업타임 정보를 초 단위로 사람이 읽을 수 있는 형식으로 가져옵니다. JSON
/api/v1/메트릭 로드된 플러그인당 내부 메트릭 JSON
/api/v1/metrics/prometheus Prometheus 서버에서 사용할 준비가 된, 로드된 플러그인당 내부 메트릭 Prometheus Text 0.0.4
/api/v1/storage 스토리지 계층/버퍼링된 데이터의 내부 메트릭을 가져옵니다. 이 옵션은 SERVICE 섹션의 storage.metrics 속성이 활성화된 경우에만 활성화됩니다. JSON
/api/v1/health Fluent Bit 헬스 체크 결과 문자열
/api/v2/metrics 로드된 플러그인당 내부 측정항목 cmetrics text 형식
/api/v2/metrics/prometheus Prometheus 서버에서 사용할 준비가 된, 로드된 플러그인당 내부 메트릭 Prometheus Text 0.0.4
/api/v2/reload 핫 리로딩을 실행하거나 핫 리로딩 상태를 가져옵니다. 자세한 내용은 핫 리로드 문서를 참조하세요. JSON

2.3 메트릭 설명

2.3.1 v1 메트릭

다음은 /api/v1/metrics/prometheus에서 prometheus 형식으로 출력되는 메트릭에 대한 자세한 설명입니다 .

다음 정의를 이해하는 것이 중요합니다.

  • 레코드: 파일의 긴 한 줄과 같이 소스에서 수집된 단일 메시지입니다.
  • 청크: Fluent Bit 입력 플러그인 인스턴스는 로그 레코드를 수집하여 청크로 저장합니다. 청크의 레코드 배치는 단일 단위로 함께 추적됩니다. Fluent Bit 엔진은 레코드를 최대 2MB의 청크로 맞추려고 시도하지만 크기는 런타임에 달라질 수 있습니다. 그런 다음 청크가 출력으로 전송됩니다. 출력 플러그인 인스턴스는 전체 청크를 대상으로 성공적으로 보내고 이를 성공으로 표시하거나, 복구불가 오류가 발생한 경우 청크를 완전히 실패시키거나 청크를 재시도하도록 요청할 수 있습니다.
메트릭 이름 레이블 설명 유형 단위
fluentbit_input_bytes_total 이름: 입력 인스턴스의 이름 또는 별칭 이 입력 인스턴스가 성공적으로 수집된 로그 레코드의 바이트 수 counter bytes
fluentbit_input_records_total 이름: 입력 인스턴스의 이름 또는 별칭 이 입력이 성공적으로 수집한 로그 레코드 수 counter records
fluentbit_output_dropped_records_total 이름: 출력 인스턴스의 이름 또는 별칭 출력에 의해 삭제된 로그 레코드 수. 이는 복구불가 오류가 발생했거나 해당 청크에 대한 재시도가 만료되었음을 의미합니다. counter records
fluentbit_output_errors_total 이름: 출력 인스턴스의 이름 또는 별칭 오류(복구불가 또는 재시도가능)가 발생한 청크 수. 이는 청크가 실패한 횟수이며 Fluent Bit 로그 출력에 표시되는 오류 메시지 수와 일치하지 않습니다. counter chunks
fluentbit_output_proc_bytes_total 이름: 출력 인스턴스의 이름 또는 별칭 이 출력 인스턴스가 성공적으로 보낸 로그 레코드의 바이트 수. 이는 이 출력에서 ​​전송된 모든 고유 청크의 총 바이트 크기입니다. 오류로 인해 레코드가 전송되지 않으면 이 메트릭에 포함되지 않습니다. counter bytes
fluentbit_output_proc_records_total 이름: 출력 인스턴스의 이름 또는 별칭 이 출력 인스턴스가 성공적으로 보낸 로그 레코드 수. 이는 이 출력에서 ​​전송된 모든 고유 청크의 총 레코드 수입니다. 레코드가 성공적으로 전송되지 않으면 이 메트릭에 포함되지 않습니다. counter records
fluentbit_output_retried_records_total 이름: 출력 인스턴스의 이름 또는 별칭 재시도가 발생한 로그 레코드 수. 이는 청크 수준에서 계산되며 전체 청크가 재시도 대상으로 표시되면 개수가 증가합니다. 출력 플러그인은 단일 청크를 업로드할 때 많은 오류 메시지를 생성하는 여러 작업을 수행할 수도 있고 수행하지 않을 수도 있습니다. counter records
fluentbit_output_retries_failed_total 이름: 출력 인스턴스의 이름 또는 별칭 청크에 대해 만료된 재시도 횟수. 각 플러그인은 청크에 적용되는 Retry_Limit를 구성합니다. 청크에 대한 Retry_Limit에 도달하면 해당 청크는 삭제되고 이 메트릭은 증가합니다. counter chunks
fluentbit_output_retries_total 이름: 출력 인스턴스의 이름 또는 별칭 출력 인스턴스가 청크에 대해 재시도를 요청한 횟수 counter chunks
fluentbit_uptime Fluent Bit가 실행된 시간(초) counter seconds
process_start_time_seconds Fluent Bit가 시작된 시점에 대한 Unix Epoch 타임스탬프 guage seconds

다음은 /api/v1/storage에서 JSON 형식으로 출력하는 메트릭에 대한 자세한 설명입니다.

메트릭 키 설명 단위
chunks.total_chunks Fluent Bit가 현재 버퍼링하고 있는 총 레코드 청크 수 chunks
chunks.mem_chunks 현재 메모리에 버퍼링된 총 청크 수. 청크는 메모리와 파일 시스템에 동시에 있을 수 있습니다. chunks
chunks.fs_chunks 파일 시스템에 저장된 총 청크 수 chunks
chunks.fs_chunks_up 청크가 메모리에 있으면 "업(up)" 상태입니다. 따라서 이것은 파일시스템과 메모리 모두에 있는 청크의 수입니다. chunks
chunks.fs_chunks_down 파일시스템에만 있는 , "다운(down)" 상태 청크 수 chunks



input_chunks.{플러그인 이름}.status.overlimit 이 입력 인스턴스가 설정된 Mem_Buf_Limit 초과 여부 boolean
input_chunks.{플러그인 이름}.status.mem_size 이 입력이 로그를 청크로 버퍼링하기 위해 소비하는 메모리 크기 bytes
input_chunks.{플러그인 이름}.status.mem_limit 이 입력 플러그인에 적용되는 버퍼 메모리 제한(Mem_Buf_Limit) bytes
input_chunks.{플러그인 이름}.chunks.total 현재 이 입력 인스턴스가 소유한 총 청크 수 chunks
input_chunks.{플러그인 이름}.chunks.up 이 입력에 대해 메모리에 "작동"된 현재 청크 수입니다. 파일 시스템 저장소가 활성화된 경우 "업(up)" 상태 청크는 파일시스템 계층에도 포함됩니다. chunks
input_chunks.{플러그인 이름}.chunks.down 이 입력에 대해 파일시스템에서 현재 "다운(down)" 상태 청크 수 chunks
input_chunks.{플러그인 이름}.chunks.busy "사용 중(busy)" 청크는 출력에 의해 처리/전송되고 있으며 새 데이터를 추가할 수 없는 청크입니다. chunks
input_chunks.{플러그인 이름}.chunks.busy_size 현재 사용 중으로 표시된 각 청크의 바이트 크기 합계 bytes

2.3.2 v2 메트릭

다음은 /api/v2/metrics/prometheus 또는 /api/v2/metrics에서 prometheus 형식으로 출력되는 메트릭에 대한 자세한 설명입니다.

다음 정의를 이해하는 것이 중요합니다.

  • 레코드: 파일의 긴 한 줄과 같이, 소스에서 수집된 단일 메시지
  • 청크: Fluent Bit 입력 플러그인 인스턴스는 로그 레코드를 수집하여 청크로 저장합니다. 청크의 레코드 배치는 단일 단위로 함께 추적됩니다. Fluent Bit 엔진은 레코드를 최대 2MB의 청크로 맞추려고 시도하지만, 크기는 런타임에 달라질 수 있습니다. 그런 다음 청크가 출력으로 전송됩니다. 출력 플러그인 인스턴스는 전체 청크를 대상으로 성공적으로 보내고 이를 성공으로 표시하거나, 복구불가 오류가 발생한 경우 청크를 완전히 실패시키거나 청크를 재시도하도록 요청할 수 있습니다.
메트릭 이름 레이블 설명 유형 단위
fluentbit_input_bytes_total 이름: 입력 인스턴스의 이름 또는 별칭 이 입력 인스턴스가 성공적으로 수집된 로그 레코드의 바이트 수 카운터 바이트
fluentbit_input_records_total 이름: 입력 인스턴스의 이름 또는 별칭 이 입력이 성공적으로 수집한 로그 레코드 수 카운터 레코드
fluentbit_filter_bytes_total 이름: 필터 인스턴스의 이름 또는 별칭 이 필터 인스턴스가 성공적으로 수집된 로그 레코드의 바이트 수 카운터 바이트
fluentbit_filter_records_total 이름: 필터 인스턴스의 이름 또는 별칭 이 필터가 성공적으로 수집한 로그 레코드 수 카운터 레코드
fluentbit_filter_add_records_total 이름: 필터 인스턴스의 이름 또는 별칭 필터에 의해 추가된 로그 레코드 수입니다. 이는 데이터 파이프라인에 추가되었음을 의미합니다. 카운터 레코드
fluentbit_filter_dropped_records_total 이름: 필터 인스턴스의 이름 또는 별칭 필터에 의해 삭제된 로그 레코드 수입니다. 이는 데이터 파이프라인에서 제거되었음을 의미합니다. 카운터 레코드
fluentbit_output_dropped_records_total 이름: 출력 인스턴스의 이름 또는 별칭 출력에 의해 삭제된 로그 레코드 수입니다. 이는 복구할 수 없는 오류가 발생했거나 해당 청크에 대한 재시도가 만료되었음을 의미합니다. 카운터 레코드
fluentbit_output_errors_total 이름: 출력 인스턴스의 이름 또는 별칭 오류(복구 불가능 또는 재시도 가능)가 발생한 청크 수입니다. 이는 청크가 실패한 횟수이며 Fluent Bit 로그 출력에 표시되는 오류 메시지 수와 일치하지 않습니다. 카운터 청크
fluentbit_output_proc_bytes_total 이름: 출력 인스턴스의 이름 또는 별칭 이 출력 인스턴스가 성공적으로 보낸 로그 레코드의 바이트 수입니다 . 이는 이 출력에서 ​​전송된 모든 고유 청크의 총 바이트 크기입니다. 오류로 인해 레코드가 전송되지 않으면 이 측정항목에 포함되지 않습니다. 카운터 바이트
fluentbit_output_proc_records_total 이름: 출력 인스턴스의 이름 또는 별칭 이 출력 인스턴스가 성공적으로 보낸 로그 레코드 수입니다 . 이는 이 출력에서 ​​전송된 모든 고유 청크의 총 레코드 수입니다. 레코드가 성공적으로 전송되지 않으면 이 지표에 포함되지 않습니다. 카운터 레코드
fluentbit_output_retried_records_total 이름: 출력 인스턴스의 이름 또는 별칭 재시도가 발생한 로그 레코드 수입니다. 이는 청크 수준에서 계산되며 전체 청크가 재시도 대상으로 표시되면 개수가 증가합니다. 출력 플러그인은 단일 청크를 업로드할 때 많은 오류 메시지를 생성하는 여러 작업을 수행할 수도 있고 수행하지 않을 수도 있습니다. 카운터 레코드
fluentbit_output_retries_failed_total 이름: 출력 인스턴스의 이름 또는 별칭 청크에 대해 만료된 재시도 횟수입니다. 각 플러그인은 청크에 적용되는 Retry_Limit를 구성합니다. 청크에 대한 Retry_Limit에 도달하면 해당 청크는 삭제되고 이 지표는 증가됩니다. 카운터 청크
fluentbit_output_retries_total 이름: 출력 인스턴스의 이름 또는 별칭 이 출력 인스턴스가 청크에 대한 재시도를 요청한 횟수입니다. 카운터 청크
fluentbit_uptime 호스트 이름: Fluent-BIT 실행 시 호스트 이름 Fluent Bit가 실행된 시간(초)입니다. 카운터
fluentbit_process_start_time_seconds 호스트 이름: Fluent-BIT 실행 시 호스트 이름 Fluent Bit가 시작된 시점의 Unix Epoch 타임스탬프입니다. 게이지
fluentbit_build_info 호스트 이름: 호스트 이름, 버전: fluent-bit 버전, os: OS 유형 버전 정보를 빌드합니다. 반환된 값은 구성 컨텍스트의 Unix Epoch 타임스탬프 초기화에서 비롯됩니다. 게이지
fluentbit_hot_reloaded_times 호스트 이름: Fluent-BIT 실행 시 호스트 이름 핫 리로드 횟수를 수집합니다. 게이지

다음은 스토리지 계층에서 수집하는 메트릭에 대한 자세한 설명입니다.

​|
​ ​|
​ ​|
​ ​|
측정항목 이름 레이블 설명 유형 단위
fluentbit_input_chunks.storage_chunks 없음 Fluent Bit가 현재 버퍼링하고 있는 총 레코드 청크 수입니다. 게이지 청크
fluentbit_storage_mem_chunk 없음 현재 메모리에 버퍼링된 총 청크 수입니다. 청크는 메모리와 파일 시스템에 동시에 있을 수 있습니다. 게이지 청크
fluentbit_storage_fs_chunks 없음 파일 시스템에 저장된 총 청크 수입니다. 게이지 청크
fluentbit_storage_fs_chunks_up 없음 청크가 메모리에 있으면 "작동(up)" 상태입니다. 따라서 이것은 파일 시스템과 메모리 모두에 있는 청크의 수입니다. 게이지 청크
fluentbit_storage_fs_chunks_down 없음 파일시스템에만 있는, "다운(down)" 상태의 청크 수 게이지 청크
fluentbit_storage_fs_chunks_busy 없음 총 청크 수가 사용 중 상태입니다. 게이지 청크
fluentbit_storage_fs_chunks_busy_bytes 없음 청크의 총 바이트 수는 사용 중 상태입니다. 게이지 바이트
fluentbit_input_storage_overlimit 이름: 입력 인스턴스의 이름 또는 별칭 이 입력 인스턴스가 구성된 Mem_Buf_Limit를 초과합니까? 게이지 boolean
fluentbit_input_storage_memory_bytes 이름: 입력 인스턴스의 이름 또는 별칭 이 입력이 로그를 청크로 버퍼링하기 위해 소비하는 메모리 크기입니다. 게이지 바이트





fluentbit_input_storage_chunks 이름: 입력 인스턴스의 이름 또는 별칭 현재 이 입력 인스턴스가 소유한 총 청크 수입니다. 게이지 청크
fluentbit_input_storage_chunks_up 이름: 입력 인스턴스의 이름 또는 별칭 이 입력에 대해 메모리에 "작동"된 현재 청크 수입니다. 파일 시스템 저장소가 활성화된 경우 "작동"된 청크는 파일 시스템 계층에도 포함됩니다. 게이지 청크
fluentbit_input_storage_chunks_down 이름: 입력 인스턴스의 이름 또는 별칭 이 입력에 대해 파일 시스템에서 현재 "다운"된 청크 수입니다. 게이지 청크
fluentbit_input_storage_chunks_busy 이름: 입력 인스턴스의 이름 또는 별칭 "사용 중(up)" 청크는 출력에 의해 처리/전송되고 있으며 새 데이터를 추가할 수 없는 청크입니다. 게이지 청크
fluentbit_input_storage_chunks_busy_bytes 이름: 입력 인스턴스의 이름 또는 별칭 현재 사용 중으로 표시된 각 청크의 바이트 크기 합계입니다. 게이지 바이트





fluentbit_output_upstream_total_connections 이름: 출력 인스턴스의 이름 또는 별칭 각 출력 플러그인의 연결 수의 합입니다. 게이지 바이트
fluentbit_output_upstream_busy_connections 이름: 출력 인스턴스의 이름 또는 별칭 각 출력 플러그인의 사용 중 상태에서의 연결 수의 합계입니다. 게이지 바이트

2.4 Uptime 예시

다음 명령어를 사용하여 서비스 업타임을 쿼리합니다.

$ curl -s http://127.0.0.1:2020/api/v1/uptime | jq

다음과 같은 결과 출력될 것입니다.

{
  "uptime_sec": 8950000,
  "uptime_hr": "Fluent Bit has been running:  103 days, 14 hours, 6 minutes and 40 seconds"
}

2.5 메트릭 예시

다음 명령어를 사용하여 JSON 형식의 내부 메트릭을 쿼리합니다.

$ curl -s http://127.0.0.1:2020/api/v1/metrics | jq

다음과 같은 결과 출력될 것입니다.

{
  "input": {
    "cpu.0": {
      "records": 8,
      "bytes": 2536
    }
  },
  "output": {
    "stdout.0": {
      "proc_records": 5,
      "proc_bytes": 1585,
      "errors": 0,
      "retries": 0,
      "retries_failed": 0
    }
  }
}

2.6 Prometheus 형식의 메트릭

Prometheus Text 0.0.4 형식으로 내부 메트릭을 쿼리합니다.

$ curl -s http://127.0.0.1:2020/api/v1/metrics/prometheus

동일한 메트릭이 이번에는 JSON 대신 Prometheus 형식으로 표시됩니다.

fluentbit_input_records_total{name="cpu.0"} 57 1509150350542
fluentbit_input_bytes_total{name="cpu.0"} 18069 1509150350542
fluentbit_output_proc_records_total{name="stdout.0"} 54 1509150350542
fluentbit_output_proc_bytes_total{name="stdout.0"} 17118 1509150350542
fluentbit_output_errors_total{name="stdout.0"} 0 1509150350542
fluentbit_output_retries_total{name="stdout.0"} 0 1509150350542
fluentbit_output_retries_failed_total{name="stdout.0"} 0 1509150350542

2.7 별칭 설정

3 ​Grafana 대시보드 및 알림

Fluent Bit의 노출된 Prometheus 스타일 메트릭을 활용하여 대시보드 및 알림를 생성할 수 있습니다. 제공된 예시 대시보드Banzai Cloud로깅 오퍼레이터 대시보드에서 많은 영감을 받았지만, instance 레이블 사용(이유는 여기 참조), 누적 그래프, Fluent Bit 메트릭에 중점을 두는 등 몇 가지 주요 차이점이 있습니다.

Spaces-wOptY6OABpfLp0KVgOvv-uploads-git-blob-4b267767a24f5bdb21bcafbef0bc49efeed8f616-dashboard.png

3.1 알림

샘플 알림은 여기에서 확인할 수 있습니다 .

4 Fluent Bit 헬스 체크

5 Calyptia

Calyptia는 데이터 흐름, 지표 및 구성을 포함하여 Fluent Bit 에이전트를 모니터링할 수 있는 호스팅 서비스입니다.

Spaces-wOptY6OABpfLp0KVgOvv-uploads-git-blob-7cf6d8ace22cb03a3bb769bf6a1e7729c096b3aa-image-19-.png

5.1 Calyptia Cloud 시작하기

Fluent Bit 에이전트를 등록하는 데는 1분도 안 걸립니다. 절차는:

  • Calyptia Core 콘솔로 이동하여 로그인합니다.
  • 왼쪽 메뉴에서 설정을 클릭하고 API 키를 생성/복사하세요.

Fluent Bit 설정 파일에 다음 설정 섹션을 추가합니다.

[CUSTOM]
    name     calyptia
    api_key  <YOUR_API_KEY>

설정에서 API 키를 교체하세요.

Fluent Bit 에이전트를 다시 시작한 후 몇 초 후에 Calyptia Cloud 대시보드에 에이전트가 나열됩니다. 메트릭이 표시되는 데 약 30초 정도 걸립니다.

Spaces-wOptY6OABpfLp0KVgOvv-uploads-git-blob-19eceaa08b667812bf549ac6c7e388347ace7c44-agent.png

5.2 Calyptia에 연락하기

Calyptia 팀에 연락하려면 hello@calyptia.com 으로 이메일을 보내주세요.

6 참고

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}