# LogBus2 使用指南
# 一、LogBus2 简介
LogBus2 是在原 LogBus 基础上,重新开发的日志同步工具。相比原 LogBus,其内存占用减少至原先的五分之一,速度提升5倍。
Logbus2 主要用于将后端的日志数据实时地导入到 TE 后台,其核心工作原理类似于 Flume、Loggie,会监控服务器日志目录下的文件流,当目录下任意日志文件有新数据产生时,会对新数据进行校验,并实时发送至 TE 后台。
我们建议以下几类用户使用 LogBus2 接入数据:
- 使用服务端 SDK / Kafka / SLS 存储TE格式数据的用户,通过 LogBus2 上传数据
 - 对数据的准确性及维度要求较高,仅通过客户端 SDK 无法满足数据需求,或不方便接入客户端 SDK
 - 不想自己开发后端数据推送流程
 - 需要传输大批量历史数据
 - 对内存使用、传输效率有一定要求
 
注意:Logbus v1 迁移至Logbus v2 请联系数数技术支持.
# 二、下载 LogBus2
最新版本:2.1.1.3
更新时间为:2024-2-23
Linux-amd64版本下载地址 (opens new window)
Linux-arm64版本下载地址 (opens new window)
Windows版本下载地址 (opens new window)
Mac Apple Silicon下载地址 (opens new window)
Mac Intel 下载地址 (opens new window)
Docker Image (opens new window)
# 三、使用前准备
# 文件类型
- 确定上传数据的文件存放的目录,并配置 LogBus2 的相关配置,LogBus2 会监控文件目录下的文件变更(监控文件新建或 tail 已有文件)。
 - 请勿对存放于监控目录下且已经上传的数据日志直接进行重命名,重命名日志相当于新建文件,LogBus2 将可能会重新上传这些文件,造成数据重复。
 - 由于 LogBus2 运行目录下存在当前日志传输进度快照,请勿自行对 runtime 目录下的文件进行操作
 
# Kafka
- 确定Kafka消息格式,Logbus仅会对Kafka Message的value做处理
 - 确保用户ID于分区隔离,避免数据乱序问题
 - 请开启自由使用Kafka Consumer Group,防止多Logbus消费时出现故障
 - 默认从earliest开始消费,若需要从指定位点消费需要先创建consumer group和特定位点
 
# SLS
- 联系阿里云开启Kafka协议消费
 
# 四、LogBus2 的安装与升级
# 安装
下载 LogBus2 安装包,并解压。
解压后的目录结构:

- Logbus:LogBus2:二进制文件
 - conf:
- daemon.json:配置文件模版2
 
 - tools:
- configConvert:配置转换工具
 
 
# 升级
要求:LogBus2 版本 ≥ 2.0.1.7
直接执行
./logbus update即可,完成升级后执行
./logbus start
# 五、Logbus2 的使用及配置
# 启动参数
# 启动
./logbus start
# 停止
./logbus stop
# 重启
./logbus restart
# 检查配置、检查与 TE 系统的连通性
./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来自TE官网的token,请在TE后台的项目配置页面获取接入项目的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来自TE官网的token,请在TE后台的项目配置页面获取接入项目的APPID并填入此处
        "unit_remove": "day", //文件删除单位,支持 "day", "hour"
        "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 Brokers 地址
        ],
        "consumer_group":"logbus",    //消费者组名称
        "cloud_provider":"ali", //云厂商名称,支持"ali"、"tencent"、"huawei"
        "username":"",    //Kafka 用户名
        "password":"",    //Kafka 验证密码
        "instance":"",    //云厂商实例名
        "protocol":"none", //身份验证协议,支持 "none"|"plain"|"scramsha256"|"scramsha512"
        "block_partitions_revoked":true,
        "app_id":"YOUR_APP_ID"
      }
    ],
    "cpu_limit": 4, //限制Logbus2使用的CPU核数
  
    "push_url": "http://RECEIVER_URL"
  }
# SLS
NOTE:使用SLS消费前请联系阿里云开启SLS Kafka消费协议
{
  "datasource": [
    {
      "type":"kafka",
      "brokers":["{PROJECT}.{ENTRYPOINT}:{PORT}"],    //NOTE:详见https://help.aliyun.com/document_detail/29008.htm#reference-wgx-pwq-zdb
      "topic":"{SLS_Logstore_NAME}",    //Logstore名称
      "protocol":"plain",
      "consumer_group":"{YOUR_CONSUMER_GROUP}",     // ConsumerGroup
      "username":"{PROJECT}",    // Project名称
      "disable_tls":true,
      "password":"{ACCESS_ID}#{ACCESS_PASSWORD}",    //    阿里云 RAM授权
      "app_id":"YOUR_APP_ID"
    }
  ],
  "push_url": "http://RECEIVER_URL"
}
# 完整配置项
# 配置项目列表与说明
| 配置 | 类型 | 示例 | 必填 | 说明 | 
|---|---|---|---|---|
| cpu_limit | Number | 4 | 限制 Logbus2 允许使用的最大 CPU 核数 | |
| push_url | String | ✔️ | receiver 地址。需要 http/https 开头。 | |
| datasource | Object list | ✔️ | 数据源列表 | |
| min_disk_free_space | uint64 | 1024 | logbus2所在目录可用空间检测,小于配置值时自动关闭,单位KB,默认为1*1024*1024 | 
# 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。 | |
| filters | object list | 事件过滤器,多个过滤器之间为或的关系 | |||
| filters[0].key | string | #event_name | ✔️ | 需要过滤的key值 | |
| filters[0].value | interface{} | register | ✔️ | 需要过滤的value值 | |
| filter[0].type | string | string | string | value值的类型,默认string,支持 string | boolean | int64 | 
# Kafka
NOTE:使用LogbusKafka模式前,务必开启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的超时时间 | |
| 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 | 是否阻塞消费,若不开启,在多Logbus处于同一个consumer_group时会出现数据重复问题 | |
| auto_reset_offset | String | "earliest" | "earliest" | 指定没有提交偏移量时的默认行为的参数 | 
NOTE:Logbusv2当前采用负载均衡模式对Kafka进行消费,Logbusv2部署数量≤partition num
# 监控配置以及看板搭建
请查看:监控配置 DEMO (opens new window)
# 告警配置
请查看:告警配置 DEMO (opens new window)
# 插件使用
请查看:插件配置 DEMO (opens new window)
# 六、进阶使用
# 多事件使用单个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来自TE官网的token,请在TE后台的项目配置页面获取接入项目的APPID并填入此处
        "unit_remove": "day", //文件删除单位,支持 "day", "hour"
        "offset_remove": 7,//unit_remove*offset_remove 得到最后的移除时间 **offset必须大于0,否则不会生效
        "remove_dirs": true,//是否开启文件夹删除,默认false NOTE:只有当该文件夹下所有文件消费完毕之后才会进行文件夹删除
        "http_compress": "gzip"//是否开启http压缩,默认none
      },
      {
        "file_patterns": ["/data/log1/*.txt", "/data/log2/*.log"],  //文件Glob匹配规则
        "app_id": "app_id", //APPID来自TE官网的token,请在TE后台的项目配置页面获取接入项目的APPID并填入此处
        "unit_remove": "day", //文件删除单位,支持 "day", "hour"
        "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"
  }
# LogBus2 On Docker
# 拉取最新镜像
docker pull thinkingdata/ta-logbus-v2:latest
# 宿主机上创建持久化folder,初始化配置文件
mkdir -p /your/folder/path/{conf,log,runtime}
touch /your/folder/path/conf/daemon.json
vim /your/folder/path/conf/daemon.json
⚠️警告:请勿自行删除runtime目录下的任何文件
# 修改配置模版并写入至daemon.json
 {
  "datasource": [
    {
      "type":"file",
      "app_id": "YOUR APP ID",
      "file_patterns": ["/test-data/*.json"]
    },
    {
      "type":"kafka",
      "app_id": "YOUR APP ID",
      "brokers": ["localhot:9092"],
      "topic":"ta-message",
      "consumer_group":"ta"
    }
  ],
  "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
# 环境准备
- kubectl 可以连接到k8s集群且有部署权限。
 - 安装依赖:按照helm文档安装helm到本地命令行 https://helm.sh/zh/docs/intro/install/
 
# 下载 logbus v2 helm 文件
tar xvf logBusv2-helm.tar && cd logbusv2
# 配置 logbus
# 准备
- 控制台创建要上传的日志 pvc
 - 获取 pvc 名称,确认namespace
 - 获取 TE 的app id、receiver url
 
# 修改values.yaml
pvc:
  name: pvc名称
logbus_version: 2.1.0.2
namespace: namcspace名称
logbus_configs:
  - push_url: "http://TE上传数据的receiver地址"
    datasource:
      - file_patterns:
        - "container:文件的相对路径的通配符" # 注意:“container:”前缀不要删除
        - "container:文件的相对路径的通配符" # 注意:“container:”前缀不要删除
        app_id: TE系统的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
更新K8s内LogBus版本
vim value.yaml # 修改之前的value.yaml文件
# 修改 logbus_version 至最新 NOTE:考虑到向后兼容,最好不要使用latest!
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 .
显示可用的配置:
# Default values for logbusv2.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
pvc:
  name: pvc-logbus
logbus_version: 2.1.0.2
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可以访问到的TE receiver URL
    datasource:
      - file_patterns:
        - "container:/ta-logbus-0/data_path/*" "container:"是占位符,在yaml部署过程中会把相对路径替换成容器可以访问的绝对路径,在配置目录时候目录需要带上container:前缀。
        app_id: "thinkingAnalyticsAppID" TE系统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.1.1.3 --- 2024.2.23
优化
- Kafka Progress 体验增强
 - 支持auto_reset_offset参数
 - 日志记录Kafka Client 相关信息
 
修复
- 强制停机导致Logbus杀死错误的进程
 - 内存泄漏问题
 - Goroutine泄漏问题
 - Kafka 超时不消费
 - Windows版本 启动失败
 - Windows版本 无法更新
 
# 版本:2.1.1.2 --- 2024.2.2
优化
- 日志格式以及部分i18n混杂的问题
 
# 版本:2.1.1.1 --- 2024.1.10
优化
progress命令的准确性
# 版本:2.1.1.0 --- 2023.12.11
修复
- 日志默认值修正为默认保留7天、单文件100M切割、最大保留30份日志。在不升级的情况下,配置log配置项也可。
 
影响
- 在数据源产生大量不能解析的错误数据的情况下,由于日志会记录错误数据,会造成日志文件越来越大。
 
# 版本:2.1.0.9 --- 2023.10.26
新增
- 支持事件过滤器,在客户端进行数据过滤
 - 支持logbus所在目录的空间检测
 
# 版本:2.1.0.8 --- 2023.6.06
优化
- 保证插件正确关闭
 - 优化进程通信以及日志输出
 
修复
- cpu limit日志输出
 - linux arm架构编译过程
 
# 版本:2.1.0.7 --- 2023.4.07
新增
- 支持kafka数据源progress命令
 
优化
- 自定义标签支持获取环境变量
 
# 版本:2.1.0.6 --- 2023.3.28
优化
- 支持自定义标签,追踪数据来源
 - 支持自定义插件分隔符
 
# 版本:2.1.0.5 --- 2023.2.20
优化
- 数据分流项目支持数组,兼容数字和字符串基本类型
 - 监控指标计算逻辑
 
# 版本:2.1.0.4 --- 2023.1.12
新增
- 支持配置读取无换行符文件数据源
 - 支持配置循环读取次数与间隔时间
 
修复
- 监控指标统计并发bug修复
 
# 版本:2.1.0.3 --- 2022.12.23
新增
- 允许通过配置覆盖数据内部appid数据
 
修复
- 使用appid_in_data,去掉appid的默认值
 
# 版本:2.1.0.2 --- 2022.12.13
新增
- 插件支持属性拆分
 
修复
- 多pipeline下,meta_name创建
 
# 版本:2.1.0.1 --- 2022.11.29
新增
- kafka数据源支持事务读已提交
 - 插件命令支持sh环境依赖
 
修复
- 无appid配置下,meta_name创建
 
# 版本:2.1.0.0 --- 2022.11.22
新增
- 数据分流,根据配置appidMap分流数据到不同项目中
 - kafka数据源支持多topic消费
 - 限流器,限制上报速度,降低服务端压力
 - 多pipeline执行数据上报
 - 基于grpc自定义插件解析器
 - 实时性能监控(prometheus、pushgateway、grafana)
 - 压缩算法新增lz4 | lzo
 
修复
- 文件消费阻塞问题
 - kafka数据源下,修复logbus无法停止的bug
 - file数据源下,修复文件活跃度高无法跳出的bug
 - 修复文件监听器关闭问题
 
# 版本:2.0.1.8 --- 2022.07.20
新增
- dev(格式校验命令)
 - Kafka Source
 - 多平台支持
 
修复
- 多次唤醒文件传输进度进程的问题
 - 减少日志量
 Progress针对文件传输时间排序- 多pipeline优化
 Docker image精简
# 版本:2.0.1.7 --- 2022.03.01
优化
- 运行效率,提升性能
 - 文件删除逻辑
 - 位点文件导出逻辑
 - 内存占用
 
← 更新日志 LogBus 使用指南 →
