目录
此内容是否有帮助?

# LogBus2 使用指南

# 一、LogBus2 简介

LogBus2 是在原 LogBus 基础上,重新开发的日志同步工具。相比原 LogBus,其内存占用减少至原先的五分之一,速度提升5倍。


Logbus2 主要用于将后端的日志数据实时地导入到 TA 后台,其核心工作原理类似于 Flume、Loggie,会监控服务器日志目录下的文件流,当目录下任意日志文件有新数据产生时,会对新数据进行校验,并实时发送至 TA 后台。

我们建议以下几类用户使用 LogBus2 接入数据:

  1. 使用服务端 SDK 的用户,通过 LogBus2 上传数据
  2. 对数据的准确性及维度要求较高,仅通过客户端 SDK 无法满足数据需求,或不方便接入客户端 SDK
  3. 不想自己开发后端数据推送流程
  4. 需要传输大批量历史数据
  5. 对内存使用、传输效率有一定要求

# 二、下载 LogBus2

最新版本:2.0.1.8

更新时间为:2022-07-21

Linux版本下载地址 (opens new window)

Windows版本下载地址 (opens new window)

Mac Apple Silicon下载地址 (opens new window)

Mac Intel 下载地址 (opens new window)

Docker Image (opens new window)

#

# 三、使用前数据准备

  1. 确定上传数据的文件存放的目录,并配置 LogBus2 的相关配置,LogBus2 会监控文件目录下的文件变更(监控文件新建或 tail 已有文件)。
  2. 请勿对存放于监控目录下且已经上传的数据日志直接进行重命名,重命名日志相当于新建文件,LogBus2 将可能会重新上传这些文件,造成数据重复。
  3. 由于 LogBus2 运行目录下存在当前日志传输进度快照,请勿自行对 runtime 目录下的文件进行操作

# 四、LogBus2 的安装与升级

# 安装

下载 LogBus2 安装包 (opens new window),并解压。

解压后的目录结构:

  • Logbus:LogBus2:二进制文件
  • conf:
    • daemon.json:配置文件模版2
  • tools:
    • configConvert:配置转换工具

# 升级

要求:LogBus2 版本 ≥ 2.0.1.7

直接执行

./logbus update即可,完成升级后执行

./logbus start

# 五、Logbus2 的使用及配置

# 启动参数

# 启动

./logbus start

# 停止

./logbus stop

# 重启

./logbus restart

# 检查配置、检查与 TA 系统的连通性

./logbus env

# 重置 LogBus 读取记录

./logbus reset
# Kafka当前不可用

# 查看传输进度

./logbus progress
# Kafka当前不可用

# 校验文件格式

./logbus dev
# Kafka当前不可用

# 配置文件指南

# 默认配置模版

{
 "datasource": [
  {
     "file_patterns": [
       "/data/log1/*.txt",
       "/data/log2/*.log"
    ],//文件匹配符
     "app_id": "app_id",//app_id来自ta官网的token,请在TA后台的项目配置页面获取接入项目的APPID并填入此处
  },
],
 "push_url": "http://RECEIVER_URL"//http传输请使用http://receiver.ta.thinkingdata.cn/,如果您使用的是私有化部署服务,请修改传输URL为:http://数据采集地址/
}

# 常用配置

# 文件
{
    "datasource": [
      {
        "type":"file",
        "file_patterns": ["/data/log1/*.txt", "/data/log2/*.log"],  //文件Glob匹配规则
        "app_id": "app_id", //APPID来自ta官网的token,请在TA后台的项目配置页面获取接入项目的APPID并填入此处
        "unit_remove": "day"| "hour", //文件删除单位
        "offset_remove": 7,//unit_remove*offset_remove 得到最后的移除时间 **offset必须大于0,否则不会生效
        "remove_dirs": true|false,//是否开启文件夹删除 NOTE:只有当该文件夹下所有文件消费完毕之后才会进行文件夹删除
        "http_compress": "gzip"|"none",//是否开启http压缩,
      }
    ],
    "cpu_limit": 4, //限制Logbus2使用的CPU核数
  
    "push_url": "http://RECEIVER_URL"
  }
  

# Kafka
{
    "datasource": [
      {
        "type":"kafka",    //类型为Kafka
        "topic":"ta",    //具体消费主题
        "brokers":[
          "localhost:9091"    //Kafka Brokers 地址
        ],
        "consumer_group":"logbus",    //消费者组名称
        "cloud_provider":"ali"|"tencent"|"huawei", //云厂商名称
        "username":"",    //Kafka 用户名
        "password":"",    //Kafka 验证密码
        "instance":"",    //云厂商实例名
        "protocol":"none"|"plain"|"scramsha256"|"scramsha512", //身份验证协议
        "block_partitions_revoked":true,
      }
    ],
    "cpu_limit": 4, //限制Logbus2使用的CPU核数
  
    "push_url": "http://RECEIVER_URL"
  }

# 完整配置项

# 配置项目列表与说明
配置
类型
示例
必填
说明
cpu_limit
Number
4
限制 Logbus2 允许使用的最大 CPU 核数
push_url
String
✔️
receiver 地址。需要 http/https 开头。
datasource
Object list
✔️
数据源列表

# datasource(数据源配置)

# 文件
配置
类型
示例
必填
默认值
说明
app_id
String
✔️
""
数据上报项目appid
appid_in_data
Bool
false
false
在使用文件内appid进行分发时,开启此选项,Logbus2不再使用app_id当中的appid进行分发
specified_push_url
Bool
false
true:不解析 push_url,按照用户配置的 push_url 原样进行发送,即http://yourhost:yourport。false:解析 push_url 后按照 receiver 规定的
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
""
用户文件删除。按天 (day) 或小时 (hour) 删除。注意:如果没有配置文件自动删除,LogBus2 内存占用会慢慢增高
offset_remove
Int
0
用户文件删除。offset_remove>0 且配置了 unit_remove 为 day 或 hour 时用户文件删除功能生效。
remove_dirs
Bool
true|false
false
是否开启文件夹删除
http_timeout
String
500ms
600s
向 receiver 端发送数据时的超时时间,默认值: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。

NOTE: 首先进行max_batch_size校验,其次是batch长度校验,如果最后发送间隔达到2秒强制发送.

# Kafka

NOTE:使用Logbus Kafka模式前,务必开启Consumer Group自由使用

配置
类型
示例
必填
默认值
说明
brokers
String List
["localhost:9092"]
✔️
[""]
Kafka Brokers
topic
String
"ta-msg-chan"
✔️
""
Kafka消费主题
consumer_group
String
"ta-consumer"
✔️
""
Kafka Consumer Group
protocol
String
"plain"
"none"
Kafka认证模式
username
String
"ta-user"
""
Kafka 用户名
password
String
"ta-password"
""
Kafka 密码
instance
String
""
""
CKafka需要的实例ID
fetch_count
Number
1000
10000
每次Poll的消息数量
fetch_time_out
Number
30
5
Poll的超时时间
disable_tls
Bool
true
false
关闭tls验证
cloud_provider
String
"tencent"
""
公网接入Kafka时启用,目前支持的云厂商有:tencent,huawei,ali
block_partitions_revoked
Bool
false
false
是否阻塞消费,若不开启,在多
Logbus
处于同一个consumer_group时会出现数据重复问题

NOTE:Logbusv2当前采用负载均衡模式对Kafka进行消费,Logbusv2部署数量≤partition num

# 六、进阶使用

# 多事件使用单个Logbus进行上报

在单Logbus部署情况下,由于IO限制,可能存在部分信息延后消费的情况,例如

由于轮询的关系,消费顺序为event_*/log.1 -> event_*/log.2 -> event_*/log.3在这种情况下,会导致文件消费进度慢的情况,可以通过开启多个Logbus,对没有上下文语意的日志通过Glob进行切割,使Glob匹配到的文件并行上传

# 多 PipeLine 配置

NOTE:多 PipeLine下 appid 不能重复

{
    "datasource": [
      {
        "file_patterns": ["/data/log1/*.txt", "/data/log2/*.log"],  //文件Glob匹配规则
        "app_id": "app_id", //APPID来自ta官网的token,请在TA后台的项目配置页面获取接入项目的APPID并填入此处
        "unit_remove": "day"| "hour", //文件删除单位
        "offset_remove": 7,//unit_remove*offset_remove 得到最后的移除时间 **offset必须大于0,否则不会生效
        "remove_dirs": true|false,//是否开启文件夹删除 NOTE:只有当该文件夹下所有文件消费完毕之后才会进行文件夹删除
        "http_compress": "gzip"|"none",//是否开启http压缩
      },
      {
        "file_patterns": ["/data/log1/*.txt", "/data/log2/*.log"],  //文件Glob匹配规则
        "app_id": "app_id", //APPID来自ta官网的token,请在TA后台的项目配置页面获取接入项目的APPID并填入此处
        "unit_remove": "day"| "hour", //文件删除单位
        "offset_remove": 7,//unit_remove*offset_remove 得到最后的移除时间 **offset必须大于0,否则不会生效
        "remove_dirs": true|false,//是否开启文件夹删除 NOTE:只有当该文件夹下所有文件消费完毕之后才会进行文件夹删除
        "http_compress": "gzip"|"none",//是否开启http压缩
      }
    ],
    "cpu_limit": 4, //限制Logbus2使用的CPU核数
  
    "push_url": "http://RECEIVER_URL"
  }

# LogBus2 On Docker

# 拉取最新镜像

docker pull thinkingdata/ta-logbus-v2:latest

# 宿主机上创建持久化folder,初始化配置文件

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"],
      "appid":""
    },
    {
      "type":"kafka",
      "app_id": "YOUR APP ID",
      "brokers": ["localhot:9092"],
      "topic":"ta-message",
      "consumer_group":"ta",
      "appid":""
    }
  ],
  "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

# LogBus2 On K8s

# 环境准备

  1. kubectl 可以连接到k8s集群且有部署权限。
  2. 安装依赖:按照helm文档安装helm到本地命令行 https://helm.sh/zh/docs/intro/install/

# 下载 logbus v2 helm 文件

下载链接 (opens new window)


tar xvf ta-logBusv2-2.0.1.8-helm.tar && cd logbusv2

# 配置 logbus

# 准备

  1. 控制台创建要上传的日志 pvc
  2. 获取 pvc 名称,确认namespace
  3. 获取 TA 的app id、receiver url

# 修改values.yaml

pvc:
  name: pvc名称
logbus_version: 2.0.1.2
namespace: namcspace名称
logbus_configs:
  - push_url: "http://TA上传数据的receiver地址"
    datasource:
      - file_patterns:
        - "container:文件的相对路径的通配符" # 注意:“container:”前缀不要删除
        - "container:文件的相对路径的通配符" # 注意:“container:”前缀不要删除
        app_id: TA系统的app id

# 预览渲染的 yaml

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

# 使用 helm 部署 logbusv2

 helm install -f values.yaml logbus-v2 .

检查创建的statefulset

kubectl get statefulset
  • 检查创建的pod
kubectl get pods

# 注意

logbusv2 需要对挂载的日志的 pvc 具有可读写权限。

logbusv2 把文件消费记录和运行日志按照 pod 分别写入 pvc,如果 pvc 删除 logbus 相关记录有数据重传隐患。

helm下载安装包速度慢可以下载下面的包安装:


# 配置详细说明

执行命令:

helm show values .

显示可用的配置:

# Default values for logbusv2.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

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/"
    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
#requests:
#  cpu: 2
#  memory: 1Gi

requests部分如果没有明确配置,不会体现在yaml内。

# pvc下单目录

pvc:
  name: 写入实际 pvc 名称

namespace: 已经存在的namespace

logbus_configs:
  - push_url: http或https,写pod可以访问到的TA receiver URL
    datasource:
      - file_patterns:
        - "container:/ta-logbus-0/data_path/*" "container:"是占位符,在yaml部署过程中会把相对路径替换成容器可以访问的绝对路径,在配置目录时候目录需要带上container:前缀。
        app_id: "thinkingAnalyticsAppID" TA系统app id

# pvc下多目录

读取pvc内多个目录时建议分pod部署,每个pod负责一个文件夹。这样部署性能和安全性更好。


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/" 注意每个app id和push url都需要单独配置
    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"

# 多pvc

目前只支持了单个 pvc 的部署,多 pvc 需要配置多次 values.yaml 文件

# 七、常见问题

Q:为什么开启了文件夹删除,但是 LogBus 并没有删除文件夹

A:LogBus 删除文件夹的前提是,当前文件夹内的文件被 LogBus 读取过,且没有任何文件在该文件夹下,才会触发文件夹删除

Q:日志怎么上传不了?

A:LogBus 读取的数据文件中,单条数据里不要有换行符。配置的数据文件不支持正则,只能使用通配符(Glob)。配置的数据文件规则是否可以匹配到文件

Q:为什么文件重复上传

A:LogBus 读取的数据文件中,单条数据里不要有换行符。配置的数据文件不支持正则,只能使用通配符(Glob)。配置的数据文件规则是否可以匹配到文件

# 八、Releases Note

# 版本:2.0.1.8 --- 2022.07.20

新增:

  • dev(格式校验命令)
  • Kafka Source
  • 多平台支持

修复:

  • 多次唤醒文件传输进度进程的问题
  • 减少日志量
  • Progress 针对文件传输时间排序
  • 多pipeline优化
  • Docker image精简

# 版本:2.0.1.7 --- 2022.03.01

优化:

  • 运行效率,提升性能
  • 文件删除逻辑
  • 位点文件导出逻辑
  • 内存占用