OceanBase
English日本語简体中文
Docs Home
Products
Integrations
Release Notes

Databases

OceanBase DatabaseOceanBase Cloud OceanBase Best Practices

Tools

OceanBase Cloud PlatformOceanBase Migration ServiceOceanBase Developer CenterOceanBase Migration AssessmentOceanBase Admin ToolOceanBase Loader and DumperOceanBase DeployerKubernetes operator for OceanBaseOceanBase Diagnostic Tool OceanBase Binlog Service

Connectors and Middleware

OceanBase Database Proxy OceanBase Connector/C OceanBase Connector/J OceanBase Connector/ODBC OceanBase Connector/NETOceanBase Command-Line Client

Databases

OceanBase DatabaseOceanBase Cloud OceanBase Best Practices

Connectors and Middleware

OceanBase Database Proxy OceanBase Connector/C OceanBase Connector/J OceanBase Connector/ODBC OceanBase Connector/NETOceanBase Command-Line Client

Tools

OceanBase Cloud PlatformOceanBase Migration ServiceOceanBase Developer CenterOceanBase Migration AssessmentOceanBase Admin ToolOceanBase Loader and DumperOceanBase DeployerKubernetes operator for OceanBaseOceanBase Diagnostic Tool OceanBase Binlog Service
OceanBase DatabaseOceanBase Cloud ToolsConnectors and MiddlewareLifecycle Support Policy

OceanBase Diagnostic Tool

V4.3.0
  • obdiag Overview
  • obdiag installation
  • obdiag configuration
  • One-click Cluster Inspection
    • One-click cluster inspection
    • Detailed explanation of cluster inspection indicators
  • One-click Information Gathering
    • One-click routine information collection
      • OceanBase cluster log collection
      • Host information collection
      • SQL details collection
      • Stack information collection
      • Flame Picture/Bian Que Picture Collection
      • ASH report collection
      • Collect table-related information
      • Cluster parameter collection
      • Variable collection
      • clog/slog collection
      • DBMS_XPLAN information collection
      • Core file collection
      • AWR report collection
      • obproxy log collection
      • OMS log collection
      • Collect all information
    • One-click scenario-based information collection
      • Overview
      • Collect basic cluster information
      • Collect backup problem information
      • Collect backup cleanup problem information
      • Collect clog disk full problem information
      • Collect cluster downtime problem information
      • Collect merge problem information
      • Collect CPU high problem information
      • Collect information on delay issues in primary and standby databases
      • Collect I/O problem information
      • Collect log archiving problem information
      • Collect long transaction problem information
      • Collect memory problem information
      • Collect SQL performance problem information
      • Collect PX error reporting information
      • Collect recovery problem information
      • Collect observer restart information without reason
      • Collect owner-cutting problem information
      • Collect information about hanging transaction issues
      • Collect copy imbalance problem information
      • Collect SQL error reporting information
      • Collect cluster TopSQL information
      • Collect application error information
      • Collect obproxy restart problem information for no reason
      • Collect ODP parameter information
      • Collect unspecified scenario problem information
  • One-click Diagnostic Analysis
    • One-click diagnostic analysis log
    • One-click full-link diagnostic log analysis
    • Parameter analysis (compared with default values)
    • Parameter analysis (parameter differences on different observers)
    • Analyze variables
    • Instructions for using index space analysis
    • One-click diagnostic analysis of memory
    • One-click diagnosis and analysis of queue backlog
  • One-click Root Cause Analysis
    • One-click root cause analysis
    • Root cause analysis scenario: disconnection
    • Root cause analysis scenario: card merging major_hold
    • Root cause analysis scenario: lock conflict lock_conflict
    • Root cause analysis scenario: executing DDL and reporting disk full error ddl_disk_full
    • Root cause analysis scenario: clog disk is full clog_disk_full
    • Root cause analysis scenario: log error log_error
    • Root cause analysis scenario: DDL failure ddl_failure
    • Root cause analysis scenario: Troubleshooting index build execution error index_ddl_error
    • Root cause analysis scenario: transaction disconnection scenario transaction_disconnection
    • Root cause analysis scenario: transaction execution times out and error transaction_execute_timeout
    • Root cause analysis scenario: transaction does not end and error transaction_not_ending is reported
    • Root cause analysis scenario: transaction other errors transaction_other_error
    • Root cause analysis scenario: transaction rollback error transaction_rollback
    • Root cause analysis scenario: transaction wait timeout error transaction_wait_timeout
    • Root cause analysis scenario: OMS full migration exception oms_full_trans
    • Root cause analysis scenario: OMS obcdc component analysis oms_obcdc
    • Root cause analysis scenario: suspended transaction suspend_transaction
    • Root cause analysis scenario: Unit GC exception unit_gc
    • Root cause analysis scenario: OceanBase cluster playback card
    • Root cause analysis scenario: OceanBase cluster memory explosion
    • Root cause analysis scenario: Abnormal deletion of OBServer node
    • Root cause analysis scenario: GC troubleshooting gc_troubleshooting
    • Root cause analysis scenario: Schema leak schema_leak
    • Root cause analysis scenario: partition split scheduling error split_schedule_error
    • Root cause analysis scenario: weak read problem troubleshooting weak_read_troubleshooting
    • Root cause analysis scenario: SQL execution memory is too high execute_memory_high
  • One-click Cluster Insights
    • Overview
    • Cluster overview information insights
    • Cluster node information insight
    • Cluster unit information insight
    • Cluster Zone Information Insights
    • Cluster RS Information Insights
    • Cluster tenant information insight
    • Cluster event information insight
    • Cluster lock information insight
    • Cluster topsql information insight
    • Cluster slowsql information insight
    • Cluster table information insight
    • Cluster processlist information insight
    • SQL execution plan information insights
    • Insights into database disk usage information
    • Insight on the disk usage of the specified table in the database
    • Insights into the full tenant information of the cluster
    • Cluster node CPU usage information insights
    • Internal table name fuzzy matching information insight
    • Cluster leader information insight
    • Information insights into locks held on a certain table
    • Cluster long transaction information information insight
    • Actual execution plan operator information insight
    • Memory information insights for all tenants
    • processlist Real-time session summary information insights
    • Table/index storage method information insight
    • Table NDV Information Insights
    • Table index information insight
    • Merge status display
    • clog log volume/capacity statistics
  • Plug-in file upgrade
  • Update and uninstall
  • Telemetry Mode
  • FAQ
  • Tools
    • Configuration file encryption
    • AI Intelligent Diagnosis Assistant
    • Disk IO performance detection
    • Configure verification tool
  • Release Notes
    • obdiag V4.2.0
    • obdiag V4.1.0
    • obdiag V4.0.0
    • obdiag V3.7.2
    • obdiag V3.7.1
    • obdiag V3.7.0
    • obdiag V3.6.0
    • obdiag V3.5.0
    • obdiag V3.4.0
    • obdiag V3.3.0
    • obdiag V3.2.0
    • obdiag V3.1.0
    • obdiag V3.0.0
    • obdiag V2.6.0
    • obdiag V2.5.0
    • obdiag V2.4.0
    • obdiag V2.3.0
    • obdiag V2.2.0
    • obdiag V2.1.0
    • obdiag V2.0.0
    • obdiag V1.6.2
    • obdiag V1.6.1
    • obdiag V1.6.0
    • obdiag V1.5.2
    • obdiag V1.5.1
    • obdiag V1.5.0
    • obdiag V1.4.0
    • obdiag V1.3.0

Download PDF

Document Feedback
  1. Documentation Center
  2. OceanBase Diagnostic Tool
  3. V4.3.0

OceanBase cluster log collection

Last Updated:2026-09-04 08:22:12

Instructions for use
Usage example
Method 1: Use without configuration file (out of the box)
Complete example

This article applies to the scenario of independently deploying obdiag. Use the obdiag gather log command to collect the logs of the OceanBase cluster to which it belongs in one click.

If it is a cluster deployed by obd, you can directly collect information on the selected cluster through the obd side diagnostic command group.

Instructions for use

obdiag gather log [options]

The options are explained below:

Option name
Is it required
Data type
Default value
Description
--from No string Default is empty The start time of log collection, the format is: yyyy-mm-dd hh:mm:ss.

Explanation

If the obdiag used is a version before V2.0.0, there is no need to add quotation marks when configuring this option, otherwise an error will be reported. V2.0.0 and later versions no longer limit whether to include quotes when configuring this option.

--to No string Default is empty The end time of log collection, the format is: yyyy-mm-dd hh:mm:ss.

Explanation

If the obdiag used is a version before V2.0.0, there is no need to add quotation marks when configuring this option, otherwise an error will be reported. V2.0.0 and later versions no longer limit whether to include quotes when configuring this option.

--since No string 30m Log collection for a recent period of time, the format is: <n><m|h|d>, where n is a number, m represents minutes, h represents hours, and d represents days. For example, 30m represents collecting the logs of the last 30 minutes.
--recent_count No int 0 Only collect the most recent N log files; --from, --to, --since are ignored when greater than 0.
--scope No string all Select the OceanBase cluster log type to collect. The configurable values are observer, election, rootservice, all.
--grep No string Default is empty Select keywords for query.
--store_dir No string Defaults to the current path where the command is executed The local path where the results are stored.
--temp_dir No string /tmp The temporary file storage directory generated by the remote node during the log collection process.
--redact No string Default is empty Select the desensitization rule, for example, it can be configured as all_sql. When using multiple rules, use English commas (,) to separate them. To write the rules, refer to the introduction of this article [Preparation of desensitization rules] (#Preparation of desensitization rules).
-c No string ~/.obdiag/config.yml Configuration file path.
--inner_config No string Default is empty obdiag's own configuration. Fixed style: --inner_config key1=value1 --inner_config key2=value2.

Explanation

For parameters that support configuration through this option, please refer to the system configuration file (obdiag's own configuration) chapter.

--config No string Default is empty Configuration of the cluster to be diagnosed by obdiag, fixed style: --config key1=value1 --config key2=value2.

Explanation

The parameters that support configuration through this option can be found in obdiag configuration.

--config_password No string Default is empty obdiag When using an encrypted configuration file, you need to pass in the corresponding password through this option.

Explanation

For details, see Configuration file encryption.

Usage example

Method 1: Use without configuration file (out of the box)

  • Collect logs for a specified period of time
  obdiag gather log --from "2022-06-30 16:25:00" --to "2022-06-30 18:30:00" \
      --config obcluster.servers.nodes[0].ip=xx.xx.xx.1 \
      --config obcluster.servers.nodes[1].ip=xx.xx.xx.2 \
      --config obcluster.servers.global.ssh_username=test \
      --config obcluster.servers.global.ssh_password=****** \
      --config obcluster.servers.global.home_path=/home/admin/oceanbase

The output is as follows:

  ...
  ZipFileInfo:
  +-------------------+-----------+
  | Node              | LogSize   |
  +===================+===========+
  | xxx.xxx.xxx.xxx   | 36.184M   |
  +-------------------+-----------+
  ...
  
  ZipFileInfo:
  +-------------------+-----------+
  | Node              | LogSize   |
  +===================+===========+
  | xxx.xxx.xxx.xxx   | 44.176M   |
  +-------------------+-----------+
  ...
  
  Summary:
  +-------------------+-----------+----------+--------+-------------------------------------------------------------------------------+
  | Node              | Status    | Size     | Time   | PackPath                                                                      |
  +===================+===========+==========+========+===============================================================================+
  | xxx.xxx.xxx.xxx   | Completed | 36.762M  | 19 s   | obdiag_gather_pack_20220701183246/ob_log_xxx.xxx.xxx.xxx_20220701183247.zip   |
  +-------------------+-----------+----------+--------+-------------------------------------------------------------------------------+
  | xxx.xxx.xxx.xxx   | Completed | 638.200M | 718 s  | obdiag_gather_pack_20220701183246/ob_log_xxx.xxx.xxx.xxx_20220701183918.zip   |
  +-------------------+-----------+----------+--------+-------------------------------------------------------------------------------+
  ```* Quickly collect logs from the most recent period

```shell
  # Passwordless SSH to targets: collect last 1h of logs
  obdiag gather log --since 1h \
    --config obcluster.servers.nodes[0].ip=xx.xx.xx.1 \
    --config obcluster.servers.nodes[1].ip=xx.xx.xx.2 \
    --config obcluster.servers.nodes[2].ip=xx.xx.xx.3 \
    --config obcluster.servers.global.home_path=/home/admin/oceanbase

  # Passwordless: last 1h; cap 300MB and 5 files per node (skip node if exceeded)
  obdiag gather log --since 1h \
    --config obcluster.servers.nodes[0].ip=xx.xx.xx.1 \
    --config obcluster.servers.nodes[1].ip=xx.xx.xx.2 \
    --config obcluster.servers.nodes[2].ip=xx.xx.xx.3 \
    --config obcluster.servers.global.home_path=/home/admin/oceanbase \
    --inner_config obdiag.basic.file_number_limit=5
    --inner_config obdiag.basic.file_size_limit=300M

  # Passwordless: last 1h; cap 1GB and 5 files per node (skip node if exceeded)
  obdiag gather log --since 1h \
    --config obcluster.servers.nodes[0].ip=xx.xx.xx.1 \
    --config obcluster.servers.nodes[1].ip=xx.xx.xx.2 \
    --config obcluster.servers.nodes[2].ip=xx.xx.xx.3 \
    --config obcluster.servers.global.home_path=/home/admin/oceanbase \
    --inner_config obdiag.basic.file_number_limit=5
    --inner_config obdiag.basic.file_size_limit=1G

  # Passwordless: collect last 30m of logs
  obdiag gather log --since 30m \
    --config obcluster.servers.nodes[0].ip=xx.xx.xx.1 \
    --config obcluster.servers.nodes[1].ip=xx.xx.xx.2 \
    --config obcluster.servers.nodes[2].ip=xx.xx.xx.3 \
    --config obcluster.servers.global.home_path=/home/admin/oceanbase

  # When OBServer nodes differ: collect last 30m of logs
  obdiag gather log --since 30m \
    --config obcluster.servers.nodes[0].ip=xx.xx.xx.1 \
    --config obcluster.servers.nodes[0].ssh_username=test1 \
    --config obcluster.servers.nodes[0].ssh_password=****** \
    --config obcluster.servers.nodes[0].home_path=/home/test1/oceanbase \
    --config obcluster.servers.nodes[1].ip=xx.xx.xx.2
    --config obcluster.servers.nodes[1].ssh_username=test2 \
    --config obcluster.servers.nodes[1].ssh_password=****** \
    --config obcluster.servers.nodes[1].home_path=/home/test2/oceanbase

  # Provide sys tenant conn string; obdiag resolves nodes and collects last 1h
  obdiag gather log --since 1h \
    --config db_host=xx.xx.xx.xx \
    --config db_port=xxxx \
    --config tenant_sys.user=root@sys \
    --config tenant_sys.password=*** \
    --config obcluster.servers.global.ssh_username=test \
    --config obcluster.servers.global.ssh_password=****** \
    --config obcluster.servers.global.home_path=/home/admin/oceanbase
  ```* Filter keyword collection

```shell
  # Collect last 30m of logs filtered by keyword TRACE_ID
  obdiag gather log --grep "TRACE_ID"  \
    --config db_host=xx.xx.xx.xx \
    --config db_port=xxxx \
    --config tenant_sys.user=root@sys \
    --config tenant_sys.password=*** \
    --config obcluster.servers.global.ssh_username=test \
    --config obcluster.servers.global.ssh_password=****** \
    --config obcluster.servers.global.home_path=/home/admin/oceanbase

  # Collect last 30m filtered by multiple keywords e.g. AAAAA and BBBBB
  obdiag gather log --grep "AAAAA" --grep "BBBBB" \
    --config db_host=xx.xx.xx.xx \
    --config db_port=xxxx \
    --config tenant_sys.user=root@sys \
    --config tenant_sys.password=*** \
    --config obcluster.servers.global.ssh_username=test \
    --config obcluster.servers.global.ssh_password=****** \
    --config obcluster.servers.global.home_path=/home/admin/oceanbase

  # Collect given time range with multiple keyword filters
  obdiag gather log --from "2022-06-30 16:25:00" --to "2022-06-30 18:30:00" --grep "AAAAA" --grep "BBBBB" \
    --config db_host=xx.xx.xx.xx \
    --config db_port=xxxx \
    --config tenant_sys.user=root@sys \
    --config tenant_sys.password=*** \
    --config obcluster.servers.global.ssh_username=test \
    --config obcluster.servers.global.ssh_password=****** \
    --config obcluster.servers.global.home_path=/home/admin/oceanbase
  ```<main id="notice" type='notice'>
    <h4>Attention</h4>
    <p> If multiple keywords are used for filtering, the relationship between them is an "AND" relationship. Only the collected log lines that satisfy multiple keywords in grep will be collected. </p>
  </main>

### Method 2: Use with configuration file

You need to ensure that the login information of the node to be collected has been configured in the obdiag configuration file <code>~/.obdiag/config.yml</code>. For related detailed configuration introduction, see [obdiag configuration](../../300.obdiag-config-guide.md).

* Collect logs for a specified period of time

```shell
  obdiag gather log --from "2022-06-30 16:25:00" --to "2022-06-30 18:30:00"

The output is as follows:

  ...
  ZipFileInfo:
  +-------------------+-----------+
  | Node              | LogSize   |
  +===================+===========+
  | xxx.xxx.xxx.xxx   | 36.184M   |
  +-------------------+-----------+
  ...
  
  ZipFileInfo:
  +-------------------+-----------+
  | Node              | LogSize   |
  +===================+===========+
  | xxx.xxx.xxx.xxx   | 44.176M   |
  +-------------------+-----------+
  ...
  
  Summary:
  +-------------------+-----------+----------+--------+-------------------------------------------------------------------------------+
  | Node              | Status    | Size     | Time   | PackPath                                                                      |
  +===================+===========+==========+========+===============================================================================+
  | xxx.xxx.xxx.xxx   | Completed | 36.762M  | 19 s   | obdiag_gather_pack_20220701183246/ob_log_xxx.xxx.xxx.xxx_20220701183247.zip   |
  +-------------------+-----------+----------+--------+-------------------------------------------------------------------------------+
  | xxx.xxx.xxx.xxx   | Completed | 638.200M | 718 s  | obdiag_gather_pack_20220701183246/ob_log_xxx.xxx.xxx.xxx_20220701183918.zip   |
  +-------------------+-----------+----------+--------+-------------------------------------------------------------------------------+
  
  ```* Quickly collect logs from the most recent period

```shell
  # Collect last 1h of logs
  obdiag gather log --since 1h

  # Collect last 30m of logs
  obdiag gather log --since 30m

  # Collect last 30m with explicit cluster config file
  obdiag gather log --since 30m -c /root/config.yml
  ```* Filter keyword collection

```shell
  # Collect last 30m of logs filtered by keyword TRACE_ID
  obdiag gather log --grep "TRACE_ID"

  # Collect last 30m filtered by multiple keywords e.g. AAAAA and BBBBB
  obdiag gather log --grep "AAAAA" --grep "BBBBB"

  # Collect given time range with multiple keyword filters
  obdiag gather log --from "2022-06-30 16:25:00" --to "2022-06-30 18:30:00" --grep "AAAAA" --grep "BBBBB"
  ```<main id="notice" type='notice'>
    <h4>Attention</h4>
    <p> If multiple keywords are used for filtering, the relationship between them is an "AND" relationship. Only the collected log lines that satisfy multiple keywords in grep will be collected. </p>
  </main>

## Interpretation of results

After the command is executed, a folder will be generated in the specified directory. The folder looks like: obdiag_gather_pack_20240808105846

## Writing desensitization rules

In many cases, masking rules are defined by the business side, that is, users define what sensitive data is. Obdiag began to support custom masking rules in version 2.5.0. The files about desensitization rules in obdiag are located under `~/.obdiag/gather/redact/`. All py files are corresponding rules, and the file name is the rule name.

This time we use `a_test` as an example to introduce how to write desensitization rules.

1. Create a rule file

   Create a py file under `~/.obdiag/gather/redact/`. When writing rules, we stipulate that the file name is the rule name. In this example, the file name is `a_test.py`, which creates `~/.obdiag/gather/redact/a_test.py`.

2. Create a unified class

   In order to facilitate unified management in the future, you need to create a rule class that inherits the RedactBase class. The class name can be customized and is generally consistent with the file name. The example is as follows:``` shell
   from handler.gather.plugins.redact import RedactBase
   class a_test(RedactBase):
   ```3. Create rule methods

   Our rule class needs to implement the redact method. text is the input file content (not separated into lines). If branch processing is required, just perform branch processing, as follows:

```shell
   text_lines = text.split('\n')
   ```4. Return the processed information in the form of string

   It should be noted that branch processing will cause the processing time to increase significantly. It is recommended not to do this unless the demand is strong.

5. Create a rule instance

   According to the rules of obdiag, a variable with a rule name needs to be set for calling the obdiag kernel. According to the example, a variable of a_test needs to be added. The specific implementation is as follows:

```shell
   a_test = a_test()

Complete example

from handler.gather.plugins.redact import RedactBase
import re
class a_test(RedactBase):
    def redact(self, text):
        text_lines = text.split('\n')
        redacted_log = ''
        for line in text_lines:
            if 'test' in line:
                redacted_log = redacted_log + re.sub('test', '******', line)
        return redacted_log
a_test = a_test()

Previous topic

Detailed explanation of cluster inspection indicators
Last

Next topic

Host information collection
Next
on this page
Instructions for use
Usage example
Method 1: Use without configuration file (out of the box)
Complete example