menu
Is this helpful?

# LogBus2 사용 가이드

# 1. LogBus2 소개

WARNING

LogBus2는 기존 LogBus를 기반으로 재개발된 로그 동기화 도구입니다. 기존 LogBus에 비해 메모리 사용량이 5분의 1로 감소하고, 속도는 5배 향상되었습니다.


LogBus2는 백엔드의 로그 데이터를 TE System에 실시간으로 가져오기 위해 사용됩니다. 주요 메커니즘은 Flume이나 Loggie와 유사하며, 서버의 로그 디렉토리 내 파일 스트림을 모니터링하여, 새로운 로그 파일에 데이터가 생성될 때마다, 새 데이터를 검증하여 TE System으로 실시간 전송합니다.

LogBus2 사용을 권장하는 경우는 다음과 같습니다.

  1. 서버 SDK/Kafka/SLS를 사용해 데이터를 TE 형식으로 저장하고, LogBus2를 통해 데이터를 업로드할 경우
  2. 데이터의 정확성과 차원에 높은 요구사항이 있으며, 클라이언트 SDK만으로는 요구사항을 충족할 수 없거나, 클라이언트 SDK 접근이 불편한 경우
  3. 백엔드 데이터 푸시 플로우를 자체 개발하기 어려운 경우
  4. 대량의 과거 데이터를 전송해야 하는 경우
  5. 메모리 사용량과 전송 효율에 일정한 요구사항이 있는 경우

# 2. LogBus2 다운로드

최신 버전: 2.1.0.8

업데이트 날짜: 2023-06-06

Linux-amd64 download (opens new window)

Linux-arm64 download (opens new window)

Windows version download (opens new window)

Mac Apple Silicon download (opens new window)

Mac Intel download (opens new window)

Docker Image (opens new window)

# 3. 사용 전 준비

# 파일 타입

  1. 데이터 업로드 대상 디렉토리를 확인하고, LogBus2의 관련 설정을 구성합니다. LogBus2는 파일 디렉토리 내의 파일 변경을 모니터링합니다.(신규 생성 또는 기존 파일의 tail)
  2. 모니터링 디렉토리에 저장되어 이미 업로드된 데이터 로그의 이름을 직접 변경하지 마십시오. 이름 변경은 새 파일로 간주되어, LogBus2가 이 파일들을 다시 업로드할 수 있으며, 데이터 중복을 발생시킬 수 있습니다.
  3. LogBus2의 실행 디렉토리에 현재 로그 전송 진행 상황의 스냅샷이 존재하므로, runtime 디렉토리 내의 파일을 조작하지 마십시오.

# Kafka

  1. Kafka 메시지 형식을 확정하고, Logbus는 Kafka Message의 value만을 처리합니다.
  2. 사용자 ID가 파티션으로 분리되어 데이터 순서의 혼란을 피하도록 해주세요.
  3. Kafka Consumer 그룹화의 자유로운 사용을 활성화하여, 여러 Logbus가 소비 시에 장애가 발생하지 않도록 해주세요.
  4. 기본적으로 earliest부터 소비합니다. 지정된 위치에서 소비하려면, 먼저 특정 오프셋을 가진 consumer group을 생성해야 합니다.

# SLS

  1. Alibaba Cloud에 연락하여, Kafka 프로토콜 지원을 활성화해야 합니다.

# 4. LogBus2의 설치 및 업데이트

# 설치

installation package. LogBus2를 다운로드하여 압축을 풉니다.

압축 해제된 디렉토리 구조:

  • Logbus: LogBus2 바이너리 파일
  • conf:
    • daemon.json: 구성 파일 템플릿 2
  • tools:
    • configConvert: 구성 변환 도구

# 업데이트

요구 사항: LogBus2 버전 ≥ 2.0.1.7

직접 실행

./logbus update, 업데이트 후 실행합니다.

./logbus start

# 5. LogBus2의 사용 및 설정

# Start parameters

# Start

./logbus start

# Stop

./logbus stop

# Restart

./logbus restart

# Check configuration and connectivity to TA system

./logbus env

# Reset LogBus read records

./logbus reset
# Kafka is currently unavailable

# View transmission progress

./logbus progress
# Kafka is currently unavailable

# Verify file format

./logbus dev
# Kafka is currently unavailable

# 설정 파일 가이드

# 기본 구성 템플릿

{
 "datasource": [
  {
     "file_patterns": [
       "/data/log1/*.txt",
       "/data/log2/*.log"
    ], //파일 패턴
     "app_id": "app_id",//app_id는 TE 시스템의 토큰입니다. 연결 프로젝트의 APPID를 TE 백엔드 프로젝트 설정 페이지에서 얻어, 여기에 입력하세요.
  }
 ],
 "push_url": "http://RECEIVER_URL"//SaaS의 http 전송에는 [https://ta-receiver.thinkingdata.io](https://ta-receiver.thinkingdata.io)를 사용하세요. 개인 구축 서비스를 사용하는 경우, 전송 URL을 http://데이터 수집 주소/로 변경하세요.
}

# 공통 구성

# 파일
{
    "datasource": [
      {
        "type":"file",
        "file_patterns": ["/data/log1/*.txt", "/data/log2/*.log"],  //파일 Glob 매칭 룰
        "app_id": "app_id", //app_id는 TE 시스템의 토큰입니다. 연결 프로젝트의 APPID를 TE 백엔드의 프로젝트 설정 페이지에서 가져와 여기에 입력해주세요.
        "unit_remove": "일 단위", //파일 삭제의 단위는 '일 단위'와 '시간 단위'에 대응하고 있습니다.
        "offset_remove": 7,//unit_remove*offset_remove 최종 삭제 시간을 가져옵니다.** offset은 0보다 커야 합니다. 그렇지 않으면 효과 없음입니다.
        "remove_dirs": true,//폴더를 삭제하시겠습니까? 기본값은 false입니다. NOTE: 이 폴더 내의 모든 파일이 소비된 후, 폴더가 삭제됩니다.
        "http_compress": "gzip",//HTTP 압축을 유효하게 할지 여부, 미그룹화는 'none'입니다.
      }
    ],    
    "cpu_limit": 4, //Logbus2가 사용하는 CPU 코어 수를 제한합니다.
  
    "push_url": "http://RECEIVER_URL"
  }
  

# Kafka
{
    "datasource": [
      {
        "type":"kafka",    //타입: Kafka
        "topic":"ta",    //특정 토픽
        "brokers":[
          "localhost:9091"    //Kafka 브로커 주소
        ],
        "consumer_group":"logbus",    //소비자 그룹 이름
        "cloud_provider":"ali", //클라우드 서비스 제공업체 이름, "ali", "tencent", "huawei"를 지원합니다.
        "username":"",    //Kafka 사용자 이름
        "password":"",    //Kafka 비밀번호
        "instance":"",    //클라우드 제공업체 인스턴스 이름
        "protocol":"none"|"plain"|"scramsha256"|"scramsha512", //인증 프로토콜
        "block_partitions_revoked":true,
        "app_id":"YOUR_APP_ID"
      }
    ],
    "cpu_limit": 4, //Logbus2가 사용할 CPU 코어 수를 제한합니다.
  
    "push_url": "http://RECEIVER_URL"
  }

# SLS

주의: SLS의 소비를 진행하기 전에, Alicloud에 연락하여 SLS Kafka 소비 프로토콜을 유효하게 해주세요.

{
  "datasource": [
    {
      "type":"kafka",
      "brokers":["{PROJECT}.{ENTRYPOINT}:{PORT}"],    //NOTE: see https://www.alibabacloud.com/help/en/log-service/latest/endpoints#reference-wgx-pwq-zdb for details
      "topic":"{SLS_Logstore_NAME}",    //Logstore name
      "protocol":"plain",
      "consumer_group":"{YOUR_CONSUMER_GROUP}",     // ConsumerGroup
      "username":"{PROJECT}",    // Project name
      "disable_tls":true,
      "password":"{ACCESS_ID}#{ACCESS_PASSWORD}",    //   authorization by Alibaba Cloud RAM
      "app_id":"YOUR_APP_ID"
    }
  ],
  "push_url": "http://RECEIVER_URL"
}

# 완전 구성 항목

# 설정 항목 목록 및 설명

구성

유형

예시

필수 필드

설명

cpu_limit

Number

4

Logbus2에서 사용할 수 있는 CPU 코어의 최대 허용 수를 제한

push_url

String

✔️

http/https로 시작하는 수신자 주소

datasource

Object list

✔️

데이터 소스 목록

# datasource(데이터 소스 구성)

# 파일

구성

유형

예시

필수 필드

기본값

설명명

app_id

String

✔️

""

데이터 보고 프로젝트 appid

appid_in_data

Bool

false

false

true로 설정하면, logbus2는 app_id 대신 데이터에서 appid를 사용

specified_push_url

Bool

false

True: push_url을 구문 분석하지 않고 사용자가 구성한 push_url, 즉 http://yourhost:yourport로 보냅니다. False: push_url을 구문 분석한 후, 수신자가 지정한 logbus url에 따라 보냅니다, 즉 http://yourhost:yourport/logbus입니다.

add_uuid

Bool

false

True: 각 데이터 조각에 uuid 속성을 추가할지 여부(활성화하면 전송 효율이 감소합니다).

file_patterns

String list

✔️

[""]

디렉토리 와일드카드를 지원하지만, 현재는 정규 표현식은 지원하지 않습니다. 특별한 구성이 없으면 기본적으로 우회됩니다. gz/.iso/.rpm/.zip/.bz/.rar/.bz2로 끝나는 파일들입니다.

ignore_files

String list

[""]

file_patterns에서 필터링된 파일들입니다.

unit_remove

String

""

사용자 파일 삭제. 일 또는 시간 단위로 삭제합니다. 주의: 구성 파일이 자동으로 삭제되지 않으면 LogBus2의 메모리 사용량이 점차 증가합니다.

offset_remove

Int

0

사용자 파일 삭제. offset_remove>0이고 unit_remove가 일 또는 시간 단위로 구성되면 사용자 파일 삭제 기능을 활성화할 수 있습니다.

remove_dirs

Bool

true|false

false

폴더를 삭제할지 여부

http_timeout

String

500ms

600s

수신자에게 데이터를 보낼 때의 타임아웃, 기본값: 600s. 범위: 200ms - 600s. 밀리초 "ms", 초 "s", 분 "m", 시간 "h"를 지원

iops

int

20000

20000

초당 Logbus 데이터 트래픽을 제한(항목 수)

limit

bool

true|false

false

속도 제한 스위치

http_compress

String

none | gzip

none

http를 통해 데이터를 보낼 때의 압축 형식. none=압축 없음. 기본값: none

# Kafka

주의: Logbus Kafka 모드를 사용하기 전에, Consumer Group의 자유 사용을 활성화하세요.

구성

유형

예시

필수 필드

기본값

설명

brokers

String List

["localhost:9092"]

✔️

[""]

Kafka Brokers

topic

String

"ta-msg-chan"

✔️

""

Kafka topic

consumer_group

String

"ta-consumer"

✔️

""

Kafka Consumer Group

protocol

String

"plain"

"none"

Kafka authentication mode

username

String

"ta-user"

""

Kafka username

password

String

"ta-password"

""

Kafka password

instance

String

""

""

CKafka instance ID

fetch_count

Number

1000

10000

Poll당 메시지 수

fetch_time_out

Number

30

5

Poll timeout

read_committed

Bool

true

false

Kafka UnCommitted 데이터를 소비할지 여부

disable_tls

Bool

true

false

tls 검증 비활성화

cloud_provider

String

"tencent"

""

공용 네트워크를 통해 Kafka에 연결할 때 활성화됩니다. 현재 다음 클라우드 제공업체가 이 서비스를 제공합니다: tencent, huawei, ali

block_partitions_revoked

Bool

false

false

소비를 차단할지 여부입니다. 비활성화하면 동일한 consumer_group에 여러 Logbus가 있는 경우 데이터 중복이 발생합니다.

주의: Logbusv2는 현재 Kafka를 소비하기 위해 로드 밸런싱 모드를 사용하고 있습니다. Logbusv2의 배포 수≤ 파티션 수입니다

# 모니터링 구성 및 대시보드 구축

Monitoring Configuration DEMO

# 알림 구성

Alert Configuration DEMO (opens new window)

# 플러그인 사용

Plugin Configuration DEMO (opens new window)

# 6. 고급 사용

# 단일 Logbus를 통해 여러 이벤트 전송

단일 Logbus 배포에서는 IO 제한으로 인해 일부 정보가 지연되어 소비될 수 있습니다. 예를 들어,

폴링으로 인해, 소비 순서는 event_/log.1 -> event_/log.2 -> event_*/log.3가 됩니다. 이 경우, 파일 소비 진행이 느려질 수 있습니다. 이를 해결하기 위해서는 여러 Logbus를 시작하고, 컨텍스트 의미가 없는 로그를 Glob으로 분할하여 병렬 업로드할 수 있습니다.

# 다중 PipeLine 구성

주의: 다중 PipeLine에서 appid를 중복해서 사용할 수 없습니다.

{
    "datasource": [
      {
        "file_patterns": ["/data/log1/*.txt", "/data/log2/*.log"],  //파일 Glob 매칭 규칙
        "app_id": "app_id", //app_id는 TE 시스템의 토큰입니다. 연결 프로젝트의 APPID를 TE 백엔드의 프로젝트 설정 페이지에서 가져와 여기에 입력해주세요.
        "unit_remove": "day", //파일 삭제 단위는 'day'와 'hour'를 지원합니다.
        "offset_remove": 7, //unit_remove*offset_remove 마지막 삭제 시간을 얻습니다. ** offset은 0보다 커야 합니다. 그렇지 않으면 효과가 없습니다.
        "remove_dirs": true, //폴더 삭제를 활성화할까요? 기본값은 false입니다. 주의: 이 폴더 내의 모든 파일이 소비된 후, 폴더가 삭제됩니다.
        "http_compress": "gzip", //HTTP 압축을 활성화할지 여부, 기본값은 'none'입니다.
      },
      {
        "file_patterns": ["/data/log1/*.txt", "/data/log2/*.log"],  //파일 Glob 매칭 규칙
        "app_id": "app_id", //app_id는 TE 시스템의 토큰입니다. 연결 프로젝트의 APPID를 TE 백엔드의 프로젝트 설정 페이지에서 가져와 여기에 입력해주세요.
        "unit_remove": "day", //파일 삭제 단위는 'day'와 'hour'를 지원합니다.
        "offset_remove": 7, //unit_remove*offset_remove 마지막 삭제 시간을 얻습니다. ** offset은 0보다 커야 합니다. 그렇지 않으면 효과가 없습니다.
        "remove_dirs": true, //폴더 삭제를 활성화할까요? 기본값은 false입니다. 주의: 이 폴더 내의 모든 파일이 소비된 후, 폴더가 삭제됩니다.
        "http_compress": "gzip", //HTTP 압축을 활성화할지 여부, 기본값은 'none'입니다.
      }
    ],
    "cpu_limit": 4, //Logbus2가 사용할 CPU 코어 수를 제한합니다.
  
    "push_url": "http://RECEIVER_URL"
}

# LogBus2 Docker에서 실행하기

# 최신 미러 이미지 가져오기

docker pull thinkingdata/ta-logbus-v2:latest

# 호스트에 영구 폴더를 생성하고 설정 파일을 초기화

mkdir -p /your/folder/path/{conf,log,runtime}
touch /your/folder/path/daemon.json
vim /your/folder/path/daemon.json

⚠️ 경고: runtime 디렉토리의 파일을 직접 삭제하지 마십시오

# 구성 템플릿을 수정하고 daemon.json에 작성

{
  "datasource": [
    {
      "type":"file",
      "app_id": "YOUR APP ID",
      "file_patterns": ["/test-data/*.json"],
      "app_id":""
    },
    {
      "type":"kafka",
      "app_id": "YOUR APP ID",
      "brokers": ["localhot:9092"],
      "topic":"ta-message",
      "consumer_group":"ta",
      "app_id":""
    }
  ],
  "push_url": "YOUR PUSH URL WITHOUT SUFFIX OF/logbus"
}

# 데이터 폴더를 마운트하고, LogBus를 시작

docker run -d \
  --name logbus-v2 \
  --restart=always \
  -v /your/data/folder:/test-data/ \
  -v /your/folder/path/conf/:/ta/logbus/conf/ \
  -v /your/folder/path/log/:/ta/logbus/log/ \
  -v /your/folder/path/runtime/:/ta/logbus/runtime/ \
thinkingdata/ta-logbus-v2:latest

# K8s에서 LogBus2 실행하기

# 환경 준비

  1. Kubectl이 k8s 클러스터에 연결할 수 있고 배포 권한이 있어야 합니다.
  2. 의존성 설치(Installing dependencies): helm 파일 https://helm.sh/ja/docs/intro/install/에 따라 로컬 커맨드 라인에 helm을 설치합니다.

# logbus v2 helm 파일 다운로드

Download Link (opens new window)

tar xvf logBusv2-helm.tar && cd logbusv2

# logbus 구성하기

# 준비 사항

  1. 콘솔에서 업로드할 로그 pvc를 생성합니다.
  2. pvc 이름을 가져오고 네임스페이스를 확인합니다.
  3. TE 시스템의 app id, 수신자 url을 가져옵니다.

# values.yaml 수정하기

pvc:
  name: pvc name
logbus_version: 2.1.0.2
namespace: namcspace name
logbus_configs:
  - push_url: "http://receiver address of TA upload data"
    datasource:
      - file_patterns:
        - "container:wildcard of the relative path to the file" # Do not delete the prefix "container:"
        - "container: wildcard of the relative path to the file" # Do not delete the prefix "container:"
        app_id: app id of TA system

# 미리 보기 렌더링을 위한 yaml

helm install --dry-run -f values.yaml logbus .

# helm을 사용하여 logbusv2 배포

 helm install -f values.yaml logbus-v2 .

# 생성된 statefulset 확인

kubectl get statefulset

# 생성된 파드 확인

kubectl get pods

# K8s에서 LogBus 업데이트

vim value.yaml # 이전의 values.yaml 파일을 수정합니다
# logbus_version을 최신으로 수정하세요. 
# 주의: 역호환성을 고려하여 최신 버전을 사용하는 것보다는 좋지 않을 수 있습니다!
logbus_version:2.0.1.8 -> logbus_version:2.1.0.2
# 저장 후 종료
helm upgrade -f values.yaml logbus .
# 롤링 업데이트를 기다립니다

# 참고

  • Logbusv2는 마운트된 로그의 pvc에 대한 읽기 및 쓰기 권한을 가집니다.
  • Logbusv2는 pod마다 PVC에 파일 소비 기록과 실행 로그를 각각 기록합니다. PVC에서 logbus 관련 기록을 삭제하면 데이터 재전송의 위험이 있습니다.

# 구성 세부 사항

실행 명령:

helm show values .

사용 가능한 구성 표시:

#logbusv2 기본 설정 값입니다.
#이 파일은 YAML 포맷으로 작성되었습니다.
#템플릿으로 전달될 변수들을 선언하세요.

pvc:
  name: pvc-logbus
logbus_version: 2.1.0.2
namespace: big-data

logbus_configs:
  #### pod 1
  #### push_url: 수신자 URL, http:// 또는 https:// 접두사가 필요합니다.
  - push_url: "http://172.17.16.6:8992/"
    datasource:
      - file_patterns:
        #### PVC 내 대상 파일의 상대 경로
        - "container:/ta-logbus-0/data_path/*"
        #### TA app_id
        app_id: "thinkingAnalyticsAppID"
  #### pod 2
  - push_url: "http://172.26.18.132:8992/"
    datasource:
      - file_patterns:
        - "container:/ta-logbus-1/data_path/*"
        app_id: "thinkingAnalyticsAppID"
  #### pod 3
  - push_url: "http://172.26.18.132:8992/"
    datasource:
      - file_patterns:
        - "container:/ta-logbus-2/data_path/*"
        app_id: "thinkingAnalyticsAppID"

#### logbus pod 요청
#requests:
#  cpu: 2
#  memory: 1Gi

요청이 명확하게 구성되지 않으면 YAML에 반영되지 않습니다.

# pvc 주문 카탈로그

pvc:
  name: write the actual pvc name

namespace: existing namespace

logbus_configs:
  - push_url: http or https, write the TE receiver URL that the pod can access
    datasource:
      - file_patterns:
        - "container:/ta-logbus-0/data_path/*" "container:" is a placeholder that will be replaced with the absolute path accessible by the container during the YAML deployment process. When configuring directories, the directory needs to include the "container:" prefix.
        app_id: "thinkingengineAppID" TE system app id

pvc 내 여러 디렉토리

pvc 내 여러 디렉토리를 읽을 때, 이들을 팟에 배포하고 각 팟이 한 폴더를 담당하도록 하는 것이 권장됩니다. 이를 통해 배포 성능과 보안이 향상됩니다.


pvc:
  name: pvc-logbus

namespace: big-data

logbus_configs:
  #### pod 1
  #### push_url: receiver url, need http:// https:// prefix
  - push_url: "http://172.17.16.6:8992/"
    datasource:
      - file_patterns:
        #### target files relative path in pvc
        - "container:/ta-logbus-0/data_path/*"
        #### TA app_id
        app_id: "thinkingAnalyticsAppID"
  #### pod 2
  - push_url: "http://172.26.18.132:8992/"note that each app id and push url need to be configured separately
    datasource:
      - file_patterns:
        - "container:/ta-logbus-1/data_path/*"
        app_id: "thinkingAnalyticsAppID"
  #### pod 3
  - push_url: "http://172.26.18.132:8992/"
    datasource:
      - file_patterns:
        - "container:/ta-logbus-2/data_path/*"
        app_id: "thinkingengineAppID"

# 다중 pvc

현재 단일 pvc의 배포만 지원되며, 다중 pvc는 values.yaml 파일의 다중 구성이 필요합니다.

# 7. 자주 묻는 질문들

Q: 폴더 삭제가 활성화되어 있음에도 불구하고 LogBus가 폴더를 삭제하지 않는 이유는 무엇인가요?

A: LogBus의 폴더 삭제 기능은 현재 폴더 내의 파일이 LogBus에 의해 모두 읽혀졌고 해당 폴더에 다른 파일이 존재하지 않을 경우에만 트리거됩니다.

Q: 로그를 업로드할 수 없는 이유는 무엇인가요?

A: LogBus가 읽는 데이터 파일에는 한 데이터 단위에 개행 문자를 포함하지 말아야 합니다. 설정된 데이터 파일은 정규 표현식을 지원하지 않으며, 와일드카드(Glob)만 사용할 수 있습니다. 설정된 데이터 파일 규칙이 파일과 일치하는지 확인해 주세요.

Q: 파일이 반복해서 업로드되는 이유는 무엇인가요?

A: LogBus에서 처리하는 데이터 파일에 한 데이터 단위에 개행 문자를 포함하지 않도록 해야 합니다. 설정된 데이터 파일은 정규 표현식을 지원하지 않으며, 와일드카드(Glob)만 사용 가능합니다. 설정된 데이터 파일 규칙이 파일과 일치하는지 확인해 주세요.

Q: 왜 데이터가 치우쳐지는가?

A: 현재 TE는 고객의 distinct_id를 데이터 UUID로 사용하여 shuffle을 수행하는데, 방대한 양의 데이터에서 distinct_id가 동일한 문자열을 사용할 경우, 단일 기계의 메모리 부하가 증가하여 데이터 치우침/지연의 위험이 증가할 수 있습니다.

# 8. 릴리스 기록

# 버전: 2.1.0.8 --- 2023.6.06

최적화

  • 플러그인이 정확하게 종료되도록 보장
  • 프로세스 간 통신 및 로그 출력 최적화

수정

  • CPU limit 로그아웃 출력
  • Linux ARM 아키텍처 컴파일 프로세스

# 버전: 2.1.0.2 --- 2022.12.13

추가

  • 플러그인은 속성 분할을 지원

수정

  • 여러 파이프라인 아래에서 meta_name 생성