# Logbus2 利用ガイド
# 1. LogBus2 の紹介
LogBus2は、元のLogBusをベースに再開発されたログ同期ツールです。元のLogBusと比べて、メモリ使用量が5分の1に減少し、速度が5倍向上しています。
Logbus2はバックエンドのログデータをTE Systemにリアルタイムでインポートするために使用されます。その主な仕組みは、FlumeやLoggieと似ており、サーバーのログディレクトリ内のファイルストリームを監視し、任意のログファイルに新しいデータが生成されると、新しいデータを検証してTE Systemにリアルタイムで送信します。
以下の場合がLogBus2を使用してデータに送信することを推奨します。
- サーバーSDK/Kafka/SLSを使用してデータをTE形式で保存し、LogBus2を介してデータをアップロードする場合
- データの精度とディメンションに高い要件があり、クライアントSDKだけでは要件を満たせず、またクライアントSDKへのアクセスが不便な場合
- バックエンドのデータプッシュフローを自社で開発しにくい場合
- 大量の過去のデータを転送する必要がある場合
- メモリ使用量と転送効率に一定の要件がある場合
# 2. LogBus2 をダウンロード
最新バージョン: 2.1.1.3
更新時間:2024-2-23
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. 使用前の準備
# ファイルのタイプ
- データのアップロード先ディレクトリを確認し、LogBus2 の関連設定を構成します。LogBus2 はファイルディレクトリ内のファイル変更を監視します。(新規作成または既存ファイルのtail)
- 監視ディレクトリに保存され、既にアップロードされたデータログを直接的に名前を変更しないでください。名前の変更は新しいファイルとして扱われ、LogBus2 がこれらのファイルを再度アップロードする可能性があり、データの重複を引き起こすことがあります。
- LogBus2の実行ディレクトリに現在のログ転送進捗スナップショットが存在するため、runtimeディレクトリ内のファイルを操作しないでください。
# Kafka
- Kafkaのメッセージ形式を確定し、LogbusはKafka Messageのvalueのみを処理します。
- ユーザーIDがパーティションで分離され、データの順序の混乱を避けるようにしてください。
- Kafka Consumer Groupの自由な使用を有効にして、複数のLogbusが消費時に障害が発生しないようにしてください。
- デフォルトではearliestから消費します。指定した場所から消費するには、最初に特定のオフセットを持つconsumer groupを作成する必要があります。
# SLS
- Alibaba Cloud に連絡して Kafka プロトコルのサポートを有効にする必要があります。
# 4. LogBus2のインストールとアップデート
# インストール
installation package. LogBus2 をダウンロードして解凍します。
解凍されたディレクトリ構造:
- Logbus: LogBus2: バイナリ ファイル
- conf:
- daemon.json: 構成ファイル テンプレート 2
- tools:
- configConvert: 構成変換ツール
# Update
要件: LogBus2 version ≥ 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://te-receiver-aws.thinkingdata.jp](https://te-receiver-aws.thinkingdata.jp/logbus)または[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": "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", //taip: Kafka
"topic":"ta", //specific topic
"brokers":[
"localhost:9091" //Kafka Brokers address
],
"consumer_group":"logbus", //consumer group name
"cloud_provider":"ali", //Cloud service provider name, supports "ali", "tencent", "huawei".
"username":"", //Kafka username
"password":"", //Kafka password
"instance":"", //cloud provider instance name
"protocol":"none"|"plain"|"scramsha256"|"scramsha512", //authentication protocol
"block_partitions_revoked":true,
"app_id":"YOUR_APP_ID"
}
],
"cpu_limit": 4, //limit the number of CPU cores used by Logbus2
"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 | Limit the maximum allowable number of CPU cores used by Logbus2 | |
push_url | String | ✔️ | Receiver address, starting with http/https. | |
datasource | Object list | ✔️ | Data source list | |
min_disk_free_space | uint64 | 1024 | logbus2 directory available space detection, automatically closes when less than the configured value, unit KB, default is 1*1024*1024 |
# datasource(データ ソース構成)
# ファイル
構成 | タイプ | 例 | 必須フィールド | デフォルト | 説明 |
---|---|---|---|---|---|
app_id | String | ✔️ | "" | Data reporting project appid | |
appid_in_data | Bool | false | false | When set to true, logbus2 will use appid from data instead rather than app_id. | |
specified_push_url | Bool | false | True: do not parse push_url, and send it as the push_url configured by the user, that is, http://yourhost:yourport. False: After parsing the push_url, send it according to the logbus url specified by the receiver, namely http://yourhost:yourport/logbus. | ||
add_uuid | Bool | false | True: Add the uuid property in each piece of data or not (the transmission efficiency will reduce if enabled). | ||
file_patterns | String list | ✔️ | [""] | Directory wildcards are supported, but regular expressions are not supported at this time. If without special configuration, it is bypassed by default. Files suffixed with gz/.iso/.rpm/.zip/.bz/.rar/.bz2 | |
ignore_files | String list | [""] | Files filtered in file_patterns | ||
unit_remove | String | "" | Delete user files. Delete by day or hour. Note: If no configuration file is automatically deleted, the memory footprint of LogBus2 will gradually increase | ||
offset_remove | Int | 0 | Delete user files. When offset_remove>0 and unit_remove is configured by day or hour, the user file deletion function can be enabled. | ||
remove_dirs | Bool | true|false | false | Delete the folder or not | |
http_timeout | String | 500ms | 600s | Timeout when sending data to receiver, default value: 600s. Range: 200ms - 600s. Support milliseconds "ms", seconds "s", minutes "m", hours "h". | |
iops | int | 20000 | 20000 | Limit Logbus data traffic per second (number of items) | |
limit | bool | true|false | false | Turn on the speed limit switch | |
http_compress | String | none | gzip | none | Format of data compression when sending http. none=no compression. Default value: none. | |
filters | object list | Event filters, with multiple filters having an OR relationship | |||
filters[0].key | string | #event_name | ✔️ | Key values to be filtered | |
filters[0].value | interface{} | register | ✔️ | Value to be filtered | |
filter[0].type | string | string | string | The type of the value, default is string, supports string | boolean | int64. |
# Kafka
注意:LogbusKafkaモードを使用する前に、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 | Number of messages per Poll | |
fetch_time_out | Number | 30 | 5 | Poll timeout | |
read_committed | Bool | true | false | Consume Kafka UnCommitted data or not | |
disable_tls | Bool | true | false | Disable tls verification | |
cloud_provider | String | "tencent" | "" | Enabled when the public network is connected to Kafka. Currently, the following cloud providers provide this service: tencent, huawei, ali | |
block_partitions_revoked | Bool | false | false | Block consumption or not. If disabled, data duplication will occur when multiple Logbuses are in the same consumer_group | |
auto_reset_offset | String | "earliest" | "earliest" | A parameter that specifies the default behavior when there are no committed offsets |
注意:Logbusv2は現在Kafkaを消費するためにロードバランスモードを使用しています。Logbus v2のデプロイ数≤ partition num です。
# 監視構成とダッシュボードの構築
Monitoring Configuration DEMO (opens new window)
# アラート構成
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です。NOTE:このフォルダ内のすべてのファイルが消費された後、フォルダが削除されます。
"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です。NOTE:このフォルダ内のすべてのファイルが消費された後、フォルダが削除されます。
"http_compress": "gzip",//HTTPの圧縮を有効にするかどうか、デフォルトは「none」です。
}
],
"cpu_limit": 4, //Logbus2の使用するCPUコア数を制限します。
"push_url": "http://RECEIVER_URL"
}
# LogBus2 On Docker
# Pull the latest mirror
docker pull thinkingdata/ta-logbus-v2:latest
# Create a persistent folder on the host and initialize the configuration file
mkdir -p /your/folder/path/{conf,log,runtime}
touch /your/folder/path/daemon.json
vim /your/folder/path/daemon.json
⚠️ Warning: Do not delete any file in the runtime directory by yourself
# Modify the configuration template and write to 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"
}
# Mount the data folder and start 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
# Prepare the environment
- Kubectl can connect to the k8s cluster and has deployment permissions.
- Installing dependencies: install helm to the local command line according to the helm file https://helm.sh/ja/docs/intro/install/
# Download the logbus v2 helm file
Download Link (opens new window)
tar xvf logBusv2-helm.tar && cd logbusv2
# Configure logbus
# Preparations
- Create the log pvc to be uploaded on the console
- Get the pvc name and confirm the namespace
- Get TE System's app id, receiver url
# Modify 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 for preview rendering
helm install --dry-run -f values.yaml logbus .
# Use helm to deploy logbusv2
helm install -f values.yaml logbus-v2 .
Check the created statefulset
kubectl get statefulset
Check the created pod
kubectl get pods
Update the LogBus in K8s
vim value.yaml # Modify the previous value.yaml file
# Modify logbus_version to the latest NOTE: Considering backward compatibility, it's better not to use the latest!
logbus_version:2.0.1.8 -> logbus_version:2.1.0.2
# save and exit
helm upgrade -f values.yaml logbus .
# Wait for rolling update
# Notes
Logbusv2 has read and write permissions on the pvc of the mounted log.
Logbusv2 writes file consumption records and running logs to PVC respectively according to pod. If PVC deletes logbus-related records, there is a risk of data retransmission.
# Configuration details
Execute command:
helm show values .
Show available configurations:
# 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 not clearly configured will not be reflected in yaml.
# pvc order catalog
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
Multiple directories in pvc
When reading multiple directories in pvc, it is recommended to deploy them in pods, and each pod is responsible for a folder. This allows for better deployment performance and security.
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"
# Multi-pvc
Currently, it only supports the deployment of a single pvc, and multi-pvc requires multiple configurations of values.yaml file
# 7. FAQs
Q: フォルダーの削除が有効になっているのに、LogBus がフォルダーを削除しないのはなぜですか?
A: LogBusのフォルダー削除は、現在のフォルダー内のファイルがLogBusによって読み取られ、そのフォルダーに他のファイルが存在しない場合にのみトリガーされます。
Q: ログをアップロードできないのはなぜですか?
A: LogBusが読み込むデータファイルでは、1つのデータに改行文字を含めないでください。設定されたデータファイルは正規表現をサポートしておらず、ワイルドカード(Glob)のみ使用できます。設定されたデータファイルの規則はファイルに一致しているかどうかを確認してください。
Q: ファイルが繰り返しアップロードされるのはなぜですか?
A: LogBusのデータファイルで、1つのデータに改行文字を含めないでください。設定されたデータファイルは正規表現をサポートしておらず、ワイルドカード(Glob)しか使用できません。設定されたデータファイルの規則はファイルに一致しているかどうかを確認してください。
Q: データの偏りの理由は何ですか?
A: 現在TEはデータUUIDとして顧客のdistinct_idを使用してshuffleを行っています。大量のデータで同じ文字列がdistinct_idとして使用される場合、単一のマシン内でメモリ負荷が増加し、データの偏りや遅延のリスクが高まる可能性があります。
# 8. リリース履歴
# バージョン:2.1.1.3 --- 2024.2.23
最適化
- Kafka Progress の体験を向上させました。
auto_reset_offset
パラメーターのサポートを追加しました。- Kafka Client 関連情報のログ記録を行いました。
バグ修正
- 強制シャットダウンにより、誤ったプロセスが Logbus を終了させる問題を修正しました。
# バージョン:2.1.1.2 --- 2024.2.2
改善
- i18n ログ形式
# バージョン:2.1.1.1 --- 2024.1.10
改善
- 進行コマンドの精度向上
# バージョン:2.1.1.0 --- 2023.12.11
修正
- ログのデフォルト値が調整され、デフォルトでログを7日間保持し、個々のファイルを100MBで分割し、最大30個のログファイルを保持します。アップグレードせずに、ログ構成オプションを使用して構成することもできます。
影響
- データソースで解釈できない大量のエラーデータが生成される場合、これらのエラーのログ記録によりログファイルがますます大きくなる可能性があります。
# バージョン:2.1.0.9 --- 2023.10.26
追加
- イベントフィルターサポートにより、クライアント側でデータフィルタリングを実行できます。
- ログバスディレクトリ内のスペース検出のサポート
# バージョン:2.1.0.8 --- 2023.6.06
改善
- プラグインの適切な終了を確保することが重要です。
- プロセス通信とログ出力の最適化は、全体的なシステムパフォーマンスの向上に重要です。
修正
- CPU制限ログ出力
- Linux ARMバージョンのコンパイル
# バージョン:2.1.0.7 --- 2023.4.07
追加
- Kafkaソースサポートコマンドの進行
改善
- カスタムタグサポート環境変数の取得
# バージョン:2.1.0.6 --- 2023.3.28
改善
- データソースのトレースにカスタムタグのサポートを追加
- カスタムプラグインデリミタのサポートを追加
# バージョン:2.1.0.5 --- 2023.2.20
改善
- データストリーミングプロジェクトが配列をサポートし、数値および文字プリミティブ型と互換性があります
- 監視メトリック計算ロジック
# バージョン:2.1.0.4 --- 2023.1.12
追加
- 改行文字のないファイルからデータを読み取る構成のサポート
- 循環読み取りの反復回数と間隔時間の構成のサポート
修正
- 監視メトリック統計の並行性バグの修正
# バージョン:2.1.0.3 --- 2022.12.23
追加
- 構成を介して内部appidデータを上書きできるようにする
修正
- appidのデフォルト値を削除するためのappid_in_dataの使用
# バージョン:2.1.0.2 --- 2022.12.13
追加
- プラグインがプロパティ分割をサポートします
修正
- 複数のパイプラインでmeta_nameを作成します
# バージョン:2.1.0.1 --- 2022.11.29
追加
- kafkaデータソースがトランザクションの読み取りをサポートします
- プラグインコマンドがsh環境依存性をサポートします
修正
- appid構成なしでmeta_nameを作成します
# バージョン:2.1.0.0 --- 2022.11.22
追加
- データ分配:構成されたappidMapに従ってデータを異なるプロジェクトに分配します
- Kafkaデータソースがマルチトピックの消費をサポートします
- リミッター、レポート速度を制限してサーバーの圧力を軽減します
- 複数のパイプラインがデータレポートを実行します
- gRPCをベースにしたカスタムプラグインパーサー
- リアルタイムパフォーマンスモニタリング(prometheus、pushgateway、grafana)
- 圧縮アルゴリズムにlz4を追加
修正
- kafkaデータソースの下でlogbusが停止しないバグを修正します
- ファイルデータソースの下でファイルが活発すぎてジャンプするバグを修正します
- ファイルモニターのクローズの問題を修正します
# バージョン:2.0.1.8 --- 2022.07.20
追加
- dev(フォーマット検証コマンド)
- Kafkaソース
- マルチプラットフォーム
修正
- ファイル転送を数回起こす問題
- ログボリュームが少ない
- ファイル転送時間による進行の並べ
← リリース履歴 LogBus 利用ガイド →