通过 Prometheus 监控 OceanBase 数据

本文介绍如何通过部署 OBCloud Exporter 和 Prometheus 进行 OceanBase 云数据库的监控。

背景信息

OBCloud Exporter 是云数据库 OceanBase 提供的一款数据库数据处理工具,可通过该工具完成 OceanBase 数据库的鉴权和数据获取。再结合本地 Prometheus 工具对数据库进行相应的监控。

下文通过系统直接部署和通过 docker 部署两种方式说明相应的工具使用方法。

前提条件

  1. 已部署 Java 8 及以上的运行环境。

  2. 已完成 Docker 部署。

系统运行 Prometheus 监控 OceanBase 云数据

  1. 下载 OBCloud Exporter。

    说明

    目前 OBCloud Exporter 暂未放开直接下载,可联系技术支持人员获取。

  2. 部署 OBCloud Exporter。

    1. 解压 OBCloud Exporter 安装包,安装目录为 /opt/obcloud-exporter

      mkdir /opt/obcloud-exporter
      unzip Obcloud_Exporter.zip -d /opt/obcloud-exporter

      解压后目录包含如下文件:

      • Dockerfile:Docker 容器构建文件。

      • muticloud_metric_config.yaml:指标配置文件,此文件默认不需要修改。

      • application.yaml:采集配置文件。

      • obcloud-exporter-1.0-SNAPSHOT-jar-with-dependencies.jar:OBCloud Exporter 程序。

      • readme.md:项目说明。

    2. 编辑配置文件 application.yaml。

      aliyun_monitor:
        ## 身份凭据
        credential:
          access_key_id: xxx
          access_key_secret: xx
          region_id: ap-southeast-1
          end_point: xxx
        metric_meta_auto_refresh: false
        default_metric:
          - sql_all_rt
          - sql_delete_rt
        ## 实例信息
        instances:
          instance_id: xxx
          tenant_id: xxx
          instance_type: cluster
          metrics: 
            - sql_all_rt
            - sql_delete_rt

      参数说明:

      参数名称

      是否必填

      参数描述

      示例值

      access_key_id

      鉴权信息,访问 我的账号 > AccessKey 获取,可在对应平台申请。具体操作,请参见,创建AccessKey

      ************

      access_key_secret

      鉴权信息,访问 我的账号 > AccessKey 获取,可在对应平台申请。具体操作,请参见,创建AccessKey

      ************

      region_id

      地域信息请参见 公有云服务区域说明

      ap-southeast-1

      end_point

      终端地址请参见 公有云服务区域说明

      oceanbasepro.ap-southeast-1.aliyuncs.com

      metric_meta_auto_refresh

      是否定时刷新 metric 指标,默认为 false。

      false

      default_metric

      默认指标,当没有配置 instances 指定采集的实例和指标时,可通过 default_metric 控制账号下所有实例采集指定的指标。

      - sql_all_rt

      instance_id

      集群实例 ID 或租户实例 ID。可包含多个集群、租户实例,通过短划线(-)并列填入。

      ob************

      tenant_id

      • 查询集群下指定租户,需配置 tenant_id, instance_type=cluster 时可以不配置。

      • 当实例为租户实例时,需 instance_id 和 tenant_id 都配置相同的实例 ID,并且指定 instance_type 为 tenant。

      t************

      instance_type

      实例类型:

      • cluster:集群主机维度监控指标,并且会自动采集集群下所有租户的监控数据。

      • tenant:租户数据库维度指标。

      tenant

      metrics

      指标信息,默认为采集全部指标。具体指标清单,请参见本文 监控指标清单 章节。

      说明

      采集指标过多可能会影响采集速度,适当情况下拆分为多个 exporter。

      - sql_all_rt

  3. 通过 Java 运行 OBCloud Exporter。

    1. 可以通过如下命令,指定配置文件启动 OBCloud Exporter。

      java -Dconfig=/xx/application.yaml -jar obcloud-exporter-1.0-SNAPSHOT-jar-with-dependencies.jar --spring.config.location=/xx/application.properties
      • -Dconfig:(可选)指定监控配置文件启动。

      • --spring.config.location:(可选)程序默认集成并开启了 SpringBoot 的 actuator 组件,默认端口为 8082,实际使用中也可以自行配置,根据实际配置的地址端口进行访问。默认配置为:

        server.port=-1
        management.server.port=8082
        management.endpoints.web.exposure.include=health,info
        management.endpoint.health.show-details=always

        常见示例:

        # 默认配置启动 OBCloud Exporter
        java -jar obcloud-exporter-1.0-SNAPSHOT-jar-with-dependencies.jar
        # 指定环境配置变量启动 OBCloud Exporter
        java -jar obcloud-exporter-1.0-SNAPSHOT-jar-with-dependencies.jar --spring.config.location=/xx/application.properties
        # 指定监控配置文件启动 OBCloud Exporter
        java -Dconfig=/xx/application.yaml -jar obcloud-exporter-1.0-SNAPSHOT-jar-with-dependencies.jar
        # 同时指定监控配置文件和环境变量配置启动 OBCloud Exporter
        java -Dconfig=/xx/application.yaml -jar obcloud-exporter-1.0-SNAPSHOT-jar-with-dependencies.jar --spring.config.location=/xx/application.properties
    2. 通过浏览器验证部署结果,访问对应 IP 地址的 9400 端口,确认是否获取到监控数据。

      说明

      实际使用中,根据实际配置的地址端口进行访问。

  4. 下载 Prometheus 软件,在官网找到所需版本的 Prometheus 安装包,进行下载,如下以 2.50.1 的 Linux 版本为例。

    wget https://github.com/prometheus/prometheus/releases/download/v2.50.1/prometheus-2.50.1.linux-amd64.tar.gz
  5. 部署 Prometheus。

    1. 解压并安装 Prometheus 软件,安装目录为 /opt/prometheus

      mkdir -p /opt/prometheus
      tar -zxvf prometheus-2.50.1.linux-amd64.tar.gz -C /opt/prometheus --strip-components=1
    2. 转移配置文件 prometheus.yml 到工作目录,并根据需要进行编辑。

      mv /opt/prometheus/prometheus.yml /usr/local/bin/
      vi /usr/local/bin/prometheus.yml

      修改如下参数:

      global:
        scrape_interval: 30s
        scrape_timeout: 20s
      
      scrape_configs:
        - job_name: "nodes"
          static_configs:
          - targets: ['localhost:9400']
    3. 新建 Prometheus 服务文件和相关数据存储目录。

      mkdir /var/lib/prometheus/
      sudo vim /etc/systemd/system/Prometheus.service

      填写如下内容并保存。

      说明

      User(用户)和 Group(用户组)参数是可选的,设置方法请参考下一步骤 设置用户名和用户组

      [Unit]
      Description=Prometheus
      Wants=network-online.target
      After=network-online.target
      
      [Service]
      User=prometheus
      Group=prometheus
      Restart=on-failure
      ExecStart=/opt/prometheus/prometheus \
            --config.file /usr/local/bin/prometheus.yml \
            --storage.tsdb.path /var/lib/prometheus/
      
      [Install]
      WantedBy=multi-user.target
    4. (可选)设置用户名和用户组,上一步骤中配置已有的用户/用户组或者没有配置,可忽略此步骤。

      sudo groupadd prometheus
      sudo useradd -r -g prometheus prometheus
      sudo chown -R prometheus:prometheus /opt/prometheus /var/lib/prometheus
      sudo chmod -R 755 /opt/prometheus /var/lib/prometheus
  6. 启动 Prometheus 服务。

    # 加载新的 systemd 配置
    sudo systemctl daemon-reload
    
    # 启动 Prometheus 服务
    sudo systemctl start prometheus
    
    # 设置开机启动
    sudo systemctl enable prometheus
    
    # 检查服务状态
    sudo systemctl status prometheus
  7. 确认 Prometheus 是否启动成功。

     sudo netstat -ntlp | grep 9090

通过 docker 部署 prometheus 监控 OceanBase 云数据库

  1. 下载 OBCloud Exporter。

    说明

    目前 OBCloud Exporter 暂未放开直接下载,可联系技术支持人员获取。

  2. 部署 OBCloud Exporter。

    1. 解压 OBCloud Exporter 安装包,安装目录为 /opt/obcloud-exporter

      mkdir /opt/obcloud-exporter
      unzip Obcloud_Exporter.zip -d /opt/obcloud-exporter

      解压后目录包含如下文件:

      • Dockerfile:Docker 容器构建文件。

      • muticloud_metric_config.yaml:指标配置文件,此文件默认不需要修改。

      • application.yaml:采集配置文件。

      • obcloud-exporter-1.0-SNAPSHOT-jar-with-dependencies.jar:OBCloud Exporter 程序。

      • readme.md:项目说明。

    2. 编辑配置文件 application.yaml。

      aliyun_monitor:
        ## 身份凭据
        credential:
          access_key_id: xxx
          access_key_secret: xx
          region_id: ap-southeast-1
          end_point: xxx
        metric_meta_auto_refresh: false
        default_metric:
          - sql_all_rt
          - sql_delete_rt
        ## 实例信息
        instances:
          instance_id: xxx
          tenant_id: xxx
          instance_type: cluster
          metrics: 
            - sql_all_rt
            - sql_delete_rt

      参数说明:

      参数名称

      是否必填

      参数描述

      示例值

      access_key_id

      鉴权信息,访问 我的账号 > AccessKey 获取,可在对应平台申请。具体操作,请参见,创建AccessKey

      ************

      access_key_secret

      鉴权信息,访问 我的账号 > AccessKey 获取,可在对应平台申请。具体操作,请参见,创建AccessKey

      ************

      region_id

      地域信息请参见 公有云服务区域说明

      ap-southeast-1

      end_point

      终端地址请参见 公有云服务区域说明

      oceanbasepro.ap-southeast-1.aliyuncs.com

      metric_meta_auto_refresh

      是否定时刷新 metric 指标,默认为 false。

      false

      default_metric

      默认指标,当没有配置 instances 指定采集的实例和指标时,可通过 default_metric 控制账号下所有实例采集指定的指标。

      - sql_all_rt

      instance_id

      集群实例 ID 或租户实例 ID。可包含多个集群、租户实例,通过短划线(-)并列填入。

      ob************

      tenant_id

      • 查询集群下指定租户,需配置 tenant_id, instance_type=cluster 时可以不配置。

      • 当实例为租户实例时,需 instance_id 和 tenant_id 都配置相同的实例 ID,并且指定 instance_type 为 tenant。

      t************

      instance_type

      实例类型:

      • cluster:集群主机维度监控指标,并且会自动采集集群下所有租户的监控数据。

      • tenant:租户数据库维度指标。

      tenant

      metrics

      指标信息,默认为采集全部指标。具体指标清单,请参见本文 监控指标清单 章节。

      说明

      采集指标过多可能会影响采集速度,适当情况下拆分为多个 exporter。

      - sql_all_rt

  3. 通过 Docker 启动 OBCloud Exporter。

    1. /opt/obcloud-exporter目录下,构建 obcloud-exporter 容器。

      cd /opt/obcloud-exporter
      docker build -t obcloud-exporter:1.0 .
    2. 启动容器或者映射外部配置文件启动。

      1. 直接启动 Docker 容器

        docker run -itd -p9400:9400 --name obcloud-exporter obcloud-exporter:1.0
      2. 通过映射外部配置文件启动 Docker 容器。

        docker run -itd -p9400:9400 -v /opt/obcloud-exporter/application.yaml:/app/application.yaml --name obcloud-exporter obcloud-exporter:1.0
  4. 通过浏览器验证部署结果,访问对应 IP 地址的 9400 端口,确认是否获取到监控数据。

    说明

    实际使用中,根据实际配置的地址端口进行访问。

  5. 创建 Prometheus 配置文件 prometheus.yml。

    vi /usr/local/bin/prometheus.yml

    编辑配置文件内容:

    global:
      scrape_interval: 30s
      evaluation_interval: 30s
    
    scrape_configs:
      - job_name: obcloud-exporter-test
        static_configs:
            # 本地服务器加端口
          - targets: ['obcloud-exporter:9400']
            labels:
              instance: obcloud-exporter
  6. 启动 Prometheus 服务。

     docker run  -d \
       -p 9090:9090 \
       -v /usr/local/bin/prometheus.yml:/etc/prometheus/prometheus.yml  \
       --link obcloud-exporter  \
       --name prometheus \
       prom/prometheus
  7. 确认 Prometheus 是否启动成功。

    sudo netstat -ntlp | grep 9090

通过 Prometheus 查看数据库监控

通过浏览器访问 Prometheus 服务地址:http://localhost:9090/targets,查看相应的监控信息。lQLPJxcJ683eZ_HNAmbNDuKwDdAnFkHqjxkF4KMzI2DYAA_3810_614

配置示例

动态获取账号下实例

  • 采集所有指标

    ## 监控名称
    monitor:
      ## 身份凭据
      credential:
        access_key_id: xxx
        access_key_secret: xx
        region_id: ap-southeast-1
        ## 终端地址
        end_point: xxx
      metric_meta_auto_refresh: false
  • 采集指定指标

    ## 监控名称
    monitor:
      ## 身份凭据
      credential:
        access_key_id: xxx
        access_key_secret: xx
        region_id: ap-southeast-1
        ## 终端地址
        end_point: xxx
      metric_meta_auto_refresh: false
      ## 默认指标,当没有配置instances自动获取实例时,可通过 default_metric 指定采集的指标
      default_metric:
        - sql_all_rt
        - sql_delete_rt

采集账号下指定的集群

  • 采集所有指标,instance_type 值设定为 cluster 时,可同时采集集群的主机指标和租户数据库指标。

    ## 监控名称
    monitor:
      ## 身份凭据
      credential:
        access_key_id: xxx
        access_key_secret: xx
        region_id: ap-southeast-1
        end_point: xxx
      metric_meta_auto_refresh: false
      instances:
          instance_id: xxx
          instance_type: cluster
  • 采集租户数据库所有指标,instance_type 值设定为 tenant 时,只采集指定租户的租户数据库指标。

    ## 监控名称
    monitor:
      ## 身份凭据
      credential:
        access_key_id: xxx
        access_key_secret: xx
        region_id: ap-southeast-1
        end_point: xxx
      metric_meta_auto_refresh: false
      instances:
          instance_id: xxx
          tenant_id: xx
          instance_type: tenant
  • 采集指定的指标,可根据实际情况选择 instance_type。

    ## 监控名称
    monitor:
      ## 身份凭据
      credential:
        access_key_id: xxx
        access_key_secret: xx
        region_id: ap-southeast-1
        end_point: xxx
      metric_meta_auto_refresh: false
      instances:
          instance_id: xxx
          tenant_id: xxx
          instance_type: tenant
          metrics: 
            - sql_all_rt
            - sql_delete_rt

采集多个账号

## 监控名称
aliyun:
  ## 身份凭据
  credential:
    access_key_id: xxx
    access_key_secret: xx
    region_id: ap-southeast-1
    end_point: xxx
  metric_meta_auto_refresh: false
muti:
  ## 身份凭据
  credential:
    access_key_id: xxx
    access_key_secret: xx
    end_point: xxx

监控指标清单

集群主机

采集项名称

采集项说明

采集项单位

load1

过去1分钟系统平均负载

-

load5

过去5分钟系统平均负载

-

load15

过去15分钟系统平均负载

-

cpu_percent

CPU 使用率

%

memory_buffers

内核 Buffer Cache 大小

GB

memory_cached

缓存使用的内存

GB

memory_free

可用物理内存大小

GB

memory_used

使用物理内存大小

%

net_recv

每秒接收数据量

MB

net_send

每秒发送数据量

MB

net_throughput

网络吞吐率

MB

ntp_offset_milliseconds

ntp时钟偏移

ms

ob_data_disk_percent

OB 数据盘使用率

%

ob_clog_disk_percent

OB 日志盘使用率

%

ob_data_disk_used_size

磁盘使用量

GB

ob_process_exists

OB进程存活状态

-

ob_clog_io

OB 日志盘平均每秒 IO 次数

times/s

ob_clog_io_read

OB 日志盘平均每秒读 IO 次数

times/s

ob_clog_io_write

OB 日志盘平均每秒写IO 次数

times/s

ob_clog_io_read_time

OB 日志盘平均每次读 IO 耗时

ms

ob_clog_io_time

OB 日志盘平均每次 IO 耗时

ms

ob_clog_io_write_time

OB 日志盘平均每次写 IO 耗时

ms

ob_clog_io_byte

OB 日志盘平均每秒 IO 数据量

MB

ob_clog_io_read_byte

OB 日志盘每秒读 IO 数据量

MB

ob_clog_io_write_byte

OB 日志盘每秒写 IO 数据量

MB

ob_clog_io_util

OB 日志盘 IO 使用率

%

ob_data_io

OB 数据盘平均每秒 IO 次数

times/s

ob_data_io_read

OB 数据盘平均每秒读 IO 次数

times/s

ob_data_io_write

OB 数据盘平均每秒写 IO 次数

times/s

ob_data_io_read_time

OB 数据盘平均每次读 IO 耗时

ms

ob_data_io_time

OB 数据盘平均每次 IO 耗时

ms

ob_data_io_write_time

OB 数据盘平均每次写 IO 耗时

ms

ob_data_io_byte

OB 数据盘平均每秒 IO 数据量

MB

ob_data_io_read_byte

OB 数据盘每秒读 IO 数据量

MB

ob_data_io_write_byte

OB 数据盘每秒写 IO 数据量

MB

ob_data_io_util

OB 数据盘 IO 使用率

%

租户数据库

性能与 SQL

采集项名称

采集项说明

采集项单位

sql_all_count

每秒处理 SQL 语句数

times/s

sql_delete_count

每秒处理 Delete 语句数

times/s

sql_insert_count

每秒处理 Insert 语句数

times/s

sql_other_count

DDL, DCL, DTL 等其他语句数

times/s

sql_replace_count

每秒处理 Replace 语句数

times/s

sql_select_count

每秒处理 Select 语句数

times/s

sql_update_count

每秒处理 Update 语句数

times/s

sql_all_rt

SQL 语句平均处理耗时

ms

sql_delete_rt

Delete 语句平均处理耗时

ms

sql_insert_rt

Insert 语句平均处理耗时

ms

sql_other_rt

DDL, DCL, DTL 等其他语句平均处理耗时

ms

sql_replace_rt

Replace 语句平均处理耗时

ms

sql_select_rt

Select 语句平均处理耗时

ms

sql_update_rt

Update 语句平均处理耗时

ms

p99_sql_all_rt

99 分位 SQL 语句平均处理耗时

ms

active_session

当前活跃会话数

-

all_session

当前会话数

-

sql_distributed_count

每秒处理分布式执行计划数

times/s

sql_local_count

每秒处理本地执行数

times/s

sql_remote_count

每秒处理远程执行计划数

times/s

system_event_internal_total_waits

每秒内部等待事件次数

times/s

system_event_io_total_waits

每秒 IO 等待事件次数

times/s

system_event_latch_total_waits

每秒 latch 等待事件次数

times/s

system_event_other_total_waits

每秒其他等待事件次数

times/s

system_event_row_lock_wait_total_waits

每秒锁等待事件次数

times/s

system_event_sync_rpc_total_waits

每秒同步 RPC 等待事件次数

times/s

wait_event_count

每秒等待事件次数

times/s

system_event_internal_time_waited

内部等待事件平均耗时

ms

system_event_io_time_waited

IO 等待事件平均耗时

ms

system_event_latch_time_waited

latch 等待事件平均耗时

ms

system_event_other_time_waited

其他等待事件平均耗时

ms

system_event_row_lock_wait_time_waited

锁等待时间平均耗时

ms

system_event_sync_rpc_time_waited

同步 RPC 等待事件平均耗时

ms

wait_event_rt

等待事件平均耗时

ms

request_dequeue_count

从处理队列出队的请求数量

times/s

request_enqueue_count

进入处理队列的请求数量

times/s

request_queue_time

SQL 请求在等待队列中的等待耗时

μs

ob_cpu_percent

租户线程CPU使用率

-

memstore_percent

MEMStore使用百分比

-

rpc_packet_in_rt

Rpc 收包平均耗时

μs

rpc_packet_out_rt

Rpc 发包平均耗时

μs

rpc_packet_in

Rpc 收包吞吐量

byte

rpc_packet_out

Rpc 发包吞吐量

byte

opened_cursors_count

打开的游标数

-

ob_worktime

数据库工作时间

s

ob_foreground_worktime

数据库前台工作时间

s

ob_background_worktime

数据库后台工作时间

s

ob_no_idle_waiting_time

数据库非空闲等待时间

s

ob_foreground_no_idle_waiting_time

数据库前台非空闲等待时间

s

ob_background_no_idle_waiting_time

数据库后台非空闲等待时间

s

slow_sql_count

慢sql数量

-

事务

采集项名称

采集项说明

采集项单位

transaction_commit_count

每秒提交事务数

times/s

transaction_count

TPS

times/s

transaction_rollback_count

每秒回滚事务数

times/s

transaction_timeout_count

每秒超时事务数

times/s

transaction_commit_rt

事务平均提交耗时

ms

transaction_rollback_rt

事务平均回滚耗时

ms

transaction_rt

服务端每个事务平均处理时间

ms

trans_commit_log_count

每秒提交的事务日志数

times/s

clog_trans_log_total_size

每秒提交的事务日志大小

byte

memstore_write_lock_fail_count

写锁等待失败次数

times/s

memstore_write_lock_succ_count

写锁等待成功次数

times/s

memstore_write_lock_wait_time

写锁平均等待耗时

μs

transaction_multi_partition_count

每秒分布式事务数

times/s

transaction_single_partition_count

每秒普通事务数

times/s

trans_commit_log_sync_rt

每次事务日志网络同步平均耗时

ms

存储与缓存

采集项名称

采集项说明

采集项单位

active_memstore_used

活跃 MEMStore 大小

MB

major_freeze_trigger

触发合并阈值

MB

memstore_limit

MEMStore的limit

MB

total_memstore_used

MEMStore 总大小

MB

io_read_count

SSStore 每秒读次数

times/s

io_write_count

SSStore 每秒写次

times/s

io_read_rt

SSStore 每次读取平均耗时

ms

io_write_rt

SSStore 每次写入平均耗时

ms

io_read_size

SSStore 每秒读取数据量

byte

io_write_size

SSStore 每秒写入数据量

byte

block_cache_size

块缓存大小

MB

bloom_filter_cache_size

bloom filter 缓存大小

MB

clog_cache_size

Clog 缓存大小

MB

location_cache_size

location 缓存大小

MB

plan_cache_size

执行计划缓存大小

MB

row_cache_size

行缓存大小

MB

block_cache_hit_ratio

块缓存命中率

-

bloom_filter_cache_hit_ratio

bloom filter 缓存命中率

-

clog_cache_hit_ratio

Clog 缓存命中率

-

location_cache_hit_ratio

location 缓存命中率

-

plan_cache_hit_ratio

执行计划缓存命中率

-

row_cache_hit_ratio

行缓存命中率

-

block_cache_req_total

块缓存请求次数

-

bloom_filter_cache_req_total

bloom filter 缓存请求次数

-

clog_cache_req_total

Clog 缓存请求次数

-

location_cache_req_total

location 缓存请求次数

-

row_cache_req_total

行缓存请求次数

-

ob_tenant_binlog_disk_used

binlog日志磁盘使用量

GB

ob_tenant_memory_percent

OB租户内存使用率

%

ob_tenant_log_disk_total_bytes

日志盘总量

GB

ob_tenant_log_disk_used_bytes

日志盘使用量

GB

ob_tenant_server_required_size

数据占用量

GB

ob_tenant_server_data_size

数据量

GB