写点什么

生态对对碰丨 OceanBase 如何与 Prometheus 与 Grafana 监控结合

  • 2022 年 6 月 02 日
  • 本文字数:7168 字

    阅读完需:约 24 分钟

一、OceanBase 数据库简介

OceanBase 数据库是一个原生的分布式关系数据库,它是完全由阿里巴巴和蚂蚁集团自主研发的项目,近期成立单独的商业公司北京奥星贝斯进行运营,并于 2021 年 6 月 1 日开源。

OceanBase 数据库构建在通用服务器集群上,基于 Paxos 协议和分布式架构,提供金融级高可用和线性伸缩能力,不依赖特定硬件架构,具备高可用、线性扩展、高性能、低成本等核心技术优势。

当前社区版仅开放了 MySQL 租户模式供大家使用,商业版还提供 Oracle 租户模式, OceanBase 数据库具有如下特点:

  1. 高可用

  2. 线性扩展

  3. MySQL/Oracle 高度兼容

  4. 高性能

  5. 低成本

  6. 多租户

下面放一张完整的架构图,让大家有一个整体的认识:



二、OceanBase 监控解决方案


2.1 方案一:OCP 云管平台


当前 OceanBase 数据库官方开放了云管平台 OCP 的 Docker 镜像,供用户下载和使用,OCP 云管平台是 OB 官方提供的一站式管理解决方案,他的架构如下:



从上面的体系架构可以看出 OCP 管理服务提供打包好的一站式监控告警和运维服务,OCP 管理服务会将数据存储在 OceanBase 集群中,对应创建的 [元信息数据库] 和 [监控数据库] 中,并在 OBServer、OBProxy 和 主机上提供 OCP Agent 代理服务,用来收集信息和执行任务。


由于本文主要介绍方案二:基于 Prometheus

的解决方案,所以在这里不展开讨论,如果大家感兴趣,可以查阅官方文档:https://open.oceanbase.com/docs/ocp-cn/V3.1.1/0000000000167441


2.2 方案二:基于 Prometheus 的监控


基于 Prometheus+Grafana 的监控方案主要是配合 OBProxy 暴露的 2884 端口,以及 社区生态工具 OBAgent 形成的解决方案,可以满足企业已有 Prometheus 集群监控体系的接入。针对这个方案,我也画了一张图,方便大家理解逻辑架构:



三、Grafana + Prometheus 方案配置


3.1 前置条件


整个方案,我们需要提前准备好一些基础条件,下面简单列出一些需要的内容,如果大家已经具备部分条件,可以忽略,只针对性的准备需要的内容即可。


OceanBase 集群:本文章不涉及集群部署,如有需要请参考 快速入门指南 文档内容。

OBProxy:OBProxy 按理说是在 OceanBase 集群中部署的,但是在 Docker 和 单机部署环境中,也可以只部署 OBServer 而不部署 OBProxy。这里单独强调一下,是因为 OBProxy 也提供单独的 Prometheus 监控服务,在本文中也会涉及。

Prometheus 软件:Prometheus 软件是监控服务的核心,用来收集监控数据,提供存储、查询和告警功能,Prometheus 所需要的配置文件,OBAgent 会帮我们自动生成。下载地址 传送门,注意区别对应的平台架构。

Alert Manager 软件: Prometheus 监控的告警组建,需要单独下载,传送门,注意区别对应的平台架构。

Grafana 软件:Grafana 是视图展示层,取 Prometheus 存储的数据,社区也有发布对应的 Dashboard 方便大家一键集成。下载地址 传送门,注意区别对应的平台架构。

Grafana Dashboard:

Oceanbase Metrics:https://grafana.com/grafana/dashboards/15215

Host Metrics:https://grafana.com/grafana/dashboards/15216

Obproxy Metrics:https://grafana.com/grafana/dashboards/15354

本文中我采用了一个最简单的三节点 OB 集群架构,另外配置了一台 OBProxy 机器,共 4 台机器,Prometheus 和 Grafana 服务都部署到 OBProxy 机器上,服务器物理架构如下:



3.2 OBAgent 部署


上面简单介绍了一下逻辑架构和物理架构,下面我们就开始实际操作起来。由于 OBProxy 的 2884 端口是服务安装时已经配置好的,所以不需要部署 OBAgent 服务,我们只需要使用 OBDeploy 工具将 OBAgent 部署到 OBServer 服务器即可。(如果您是在初始化 OceanBase 集群,也可以将 OBAgent 的配置文件一起写到 OB 配置文件中,一并进行初始化;我这里采用的是分开单独部署的形式)。


3.2.1 初始化文件编写


配置文件与数据库初始化配置文件有一些地方是需要一致的,具体参考链接说明,我这里最终的文件内容如下:


obagent:  servers:    - name: server1      ip: 10.211.55.74    - name: server2      ip: 10.211.55.75    - name: server3      ip: 10.211.55.76  global:    home_path: /home/chris/obagent    server_port: 8088    pprof_port: 8089    sql_port: 2881    rpc_port: 2882    log_level: INFO    log_path: log/monagent.log    crypto_method: plain    log_size: 30    log_expire_day: 7    log_file_count: 10    http_basic_auth_user: admin    http_basic_auth_password: root    pprof_basic_auth_user: admin    pprof_basic_auth_password: root    monitor_user: root    monitor_password: observer    cluster_name: obcluster
server1: zone: zone1 server2: zone: zone2 server3: zone: zone3
复制代码


将以上内容创建 yaml 文件到 OBD 机器上(截图示例,部分内容略):



3.2.2 使用 OBD 部署 OBAgent


指定 OBAgent 的配置文件,进行一键部署,执行过程会从 OB 官方仓库拉取 OBAgent 并安装:


[chris@obd ~]$ obd cluster deploy obagent-only -c obagent_only.yamlUpdate OceanBase-community-stable-el7 okUpdate OceanBase-development-kit-el7 okDownload obagent-1.1.1-2.el7.x86_64.rpm (7.03 M): 100% [###################################################################################] Time: 0:00:10 701.81 kB/sPackage obagent-1.1.1 is available.install obagent-1.1.1 for local ok+---------------------------------------------------------------------------+|                                  Packages                                 |+------------+---------+---------+------------------------------------------+| Repository | Version | Release | Md5                                      |+------------+---------+---------+------------------------------------------+| obagent    | 1.1.1   | 2.el7   | 03b01616911abfbbc80092006955f24ed4c2f461 |+------------+---------+---------+------------------------------------------+Repository integrity check okParameter check okOpen ssh connection okRemote obagent-1.1.1-03b01616911abfbbc80092006955f24ed4c2f461 repository install okRemote obagent-1.1.1-03b01616911abfbbc80092006955f24ed4c2f461 repository lib check okCluster status check okInitializes obagent work home okobagent-only deployed[chris@obd ~]$ obd cluster list+------------------------------------------------------------------------+|                              Cluster List                              |+--------------+---------------------------------------+-----------------+| Name         | Configuration Path                    | Status (Cached) |+--------------+---------------------------------------+-----------------+| obcluster    | /home/chris/.obd/cluster/obcluster    | stopped         || obagent-only | /home/chris/.obd/cluster/obagent-only | deployed        |+--------------+---------------------------------------+-----------------+
复制代码


安装完成后,我们看一下 OBD 机器和 OBServer 机器上是否已经有了对应的文件夹:


[chris@obd ~]$ ls -al ~/.obd/cluster/obagent-only/总用量 16drwxr-xr-x 2 chris chris 4096 5月  10 15:48 .drwxr-xr-x 4 chris chris 4096 5月  10 15:48 ..-rw-rw-r-- 1 chris chris  714 5月  10 15:48 config.yaml-rw-rw-r-- 1 chris chris  160 5月  10 15:48 .data
复制代码


[chris@observer1 ~]$ ls -al ~/obagent/总用量 28drwxrwxr-x   7 chris chris 4096 5月  10 15:48 .drwx------. 20 chris chris 4096 5月  10 15:48 ..drwxrwxr-x   2 chris chris 4096 5月  10 15:48 bindrwxrwxr-x   5 chris chris 4096 5月  10 15:48 confdrwxrwxr-x   2 chris chris 4096 5月  10 15:48 libdrwxrwxr-x   2 chris chris 4096 5月  10 15:48 logdrwxrwxr-x   2 chris chris 4096 5月  10 15:48 run
复制代码


3.2.3 使用 OBD 启动 OBAgent


启动 OBAgent 之前,我先启动 OceanBase 集群(如果您的集群已经在服务,该步骤可以省略):


[chris@obd ~]$ obd cluster start obclusterGet local repositories and plugins okOpen ssh connection okLoad cluster param plugin okCheck before start observer okCheck before start obproxy okStart observer okobserver program health check okConnect to observer okWait for observer init ok+------------------------------------------------+|                    observer                    |+--------------+---------+------+-------+--------+| ip           | version | port | zone  | status |+--------------+---------+------+-------+--------+| 10.211.55.74 | 3.1.3   | 2881 | zone1 | active || 10.211.55.75 | 3.1.3   | 2881 | zone2 | active || 10.211.55.76 | 3.1.3   | 2881 | zone3 | active |+--------------+---------+------+-------+--------+
Start obproxy okobproxy program health check okConnect to obproxy okInitialize cluster+------------------------------------------------+| obproxy |+--------------+------+-----------------+--------+| ip | port | prometheus_port | status |+--------------+------+-----------------+--------+| 10.211.55.73 | 2883 | 2884 | active |+--------------+------+-----------------+--------+obcluster running
复制代码


下面执行命令启动 OBAgent:


[chris@obd ~]$ obd cluster start obagent-onlyGet local repositories and plugins okOpen ssh connection okLoad cluster param plugin okCheck before start obagent okStart obagent okobagent program health check ok+--------------------------------------------------+|                     obagent                      |+--------------+-------------+------------+--------+| ip           | server_port | pprof_port | status |+--------------+-------------+------------+--------+| 10.211.55.74 | 8088        | 8089       | active || 10.211.55.75 | 8088        | 8089       | active || 10.211.55.76 | 8088        | 8089       | active |+--------------+-------------+------------+--------+obagent-only running
复制代码


3.3 Prometheus 配置


3.3.1 拉取自动生成的 OBServer 配置并启动 Prometheus


OBAgent 启动后会在 OBServer 服务器上自动生成 Prometheus 所需要的配置文件,该配置文件被放在 OBAgent 安装目录下,例如我这里的地址: /home/chris/obagent/conf/prometheus_config/。配置文件可以从任何 OBServer 服务器上拿下来直接给 Prometheus 使用。我这里直接打包 prometheus_config 下的所有文件,放到监控服务器对应的 prometheus 可执行程序同级目录下:


打包:


[chris@observer1 prometheus_config]$ tar -czvf prule.tgz prometheus.yaml rulesprometheus.yamlrules/rules/host_rules.yamlrules/ob_rules.yaml
复制代码


拉取解压缩:


cd /home/chris/prometheus-2.35.0.darwin-amd64scp chris@observer1:/home/chris/obagent/conf/prometheus_config/prule.tgz .mv prometheus.yml prometheus.yml.baktar xzvf prule.tgz
复制代码


指定配置文件启动 Prometheus:

nohup ./prometheus --config.file=prometheus.yaml &
复制代码


3.3.2 检查 Prometheus 监控状态


通过上一步启动 Prometheus 服务后,正常情况下,可以通过访问地址来查看监控状态了,我这里的地址是:http://10.211.55.73:9090/targets

可以看到,如下图,OBServer 的监控目标一切正常:



告警规则的状态也均正常(注意这里还没有配置 AlertManager,所以不会发送告警信息):访问地址 http://10.211.55.73:9090/alerts


Prometheus 的告警规则,使用的是 host_rules.yaml 和 ob_rules.yaml 两个规则。



如果 OBAgent 提供的默认报警项(配置文件位于 conf/prometheus_config/rules,其中,host_rules.yaml 存储主机报警项,ob_rules.yaml 存储 OceanBase 数据库报警项)还不能满足您的使用。可以按照以下方式自定义报警项:


groups:- name: node-alert    rules:    - alert: disk-full    expr: 100 - ((node_filesystem_avail_bytes{mountpoint="/",fstype=~"ext4|xfs"} * 100) / node_filesystem_size_bytes {mountpoint="/",fstype=~"ext4|xfs"}) > 80    for: 1m    labels:        serverity: page    annotations:        summary: "{{ $labels.instance }} disk full "        description: "{{ $labels.instance }} disk > {{ $value }} "
复制代码


3.3.3 配置 OBProxy 监控


3.3.1 和 3.3.2 两个章节,我们把 OBServer 配置上了,OBProxy 的配置比较简单,只需要在刚才的 yaml 文件最后,增加如下内容即可:

groups:- name: node-alert    rules:    - alert: disk-full    expr: 100 - ((node_filesystem_avail_bytes{mountpoint="/",fstype=~"ext4|xfs"} * 100) / node_filesystem_size_bytes {mountpoint="/",fstype=~"ext4|xfs"}) > 80    for: 1m    labels:        serverity: page    annotations:        summary: "{{ $labels.instance }} disk full "        description: "{{ $labels.instance }} disk > {{ $value }} "
复制代码


然后重启 Prometheus 服务,并查看目标状态:



3.3.4 配置 Alert Manager


在【前置条件】部分已经贴了下载传送门,下面我们把下载好的 Alert Manager 也解压缩到 OBD 服务器,并启动服务看是否正常:


./alertmanager
复制代码


访问地址 http://10.211.55.73:9093/ ,出现下面页面证明可以正常启动,然后我们开始配置 Alert Manager:



刷新 Prometheus 配置中的 Alert 部分:

切换到 Prometheus 目录,并在 prometheus.yaml 文件最底下增加如下内容,打通 Prometheus 和 Alert Manager 的服务:

# Alertmanager configurationalerting:  alertmanagers:    - static_configs:        - targets:          - localhost:9093
复制代码


重启 Prometheus。


配置 alertmanager 的 SMTP 信息:

打开 alertmanager 目录下的 alertmanager.yml 文件,按照如下配置进行修改:


global:  smtp_smarthost: 'smtp.126.com:25'          # smtp地址及端口,不加密默认25  smtp_from: 'username@126.com'               # 发件人  smtp_auth_username: 'username@126.com'      # 发件邮箱  smtp_auth_password: 'pwd'                   # 邮箱密码  smtp_require_tls: false # 不启用TLSroute:  group_by: ['alertname']  group_wait: 30s  group_interval: 5m  repeat_interval: 1h  receiver: 'web.hook'receivers:  - name: 'web.hook'    email_configs:      - to: 'username@126.com,292523671@qq.com'inhibit_rules:  - source_match:      severity: 'critical'    target_match:      severity: 'warning'    equal: ['alertname', 'dev', 'instance']
复制代码


配置 prometheus 中的 rules,增加一个测试告警规则,模拟报错:


vim prometheus/rules/tt_rules.yaml
groups: - name: node-alert rules: - alert: disk-full expr: 100 - ((node_filesystem_avail_bytes{mountpoint="/",fstype=~"ext4|xfs"} * 100) / node_filesystem_size_bytes {mountpoint="/",fstype=~"ext4|xfs"}) > 70 for: 1m labels: serverity: page annotations: summary: "{{ $labels.instance }} disk full " description: "{{ $labels.instance }} disk > {{ $value }} "
复制代码


配置完成后,重启 prometheus,在告警界面等待一会出现告警信息:



等待一会查看 AlertManager 界面,已经接收到告警信息:



此时,如果没有意外的话,你配置的接收影响应该会收到如下邮件:



有关 Alert Manager 发送告警邮件的内容,在这里不再赘述,如果大家没有收到邮件,请注意以下两点:


alertmanager.yml 中的邮箱信息配置是否正确;

您的邮箱代理商,通常会关闭 SMTP,比如如下截图,我在 126 上开启了访问,并且输入了 126 提供的访问密码(与邮箱登录密码不同哦)



3.4 Grafana 配置


3.4.1 启动 Grafana 服务


完成了上面 Prometheus 的配置后,下面我们开始配置 Grafana,同样需要把安装包解压到 OBD 服务器下,然后直接启动服务就可以了,配置都是在页面上进行的:


解压启动服务:

tar xzvf grafana-8.5.2.tgz cd grafana-8.5.2/binnohup ./grafana-server &
复制代码


访问 Grafana 页面:

http://10.211.55.73:3000 ,初次访问用户名为 admin,密码会让您自己设定一下。

正常登录后界面如下:



3.4.2 在 Grafana 中配置 Prometheus 数据源


如下,配置上面已经安装好的 Prometheus 数据源地址:






3.4.3 导入 3 个 Dashboard


分别导入如下三个 Dashboard,并设置数据源为刚刚配置好的 Prometheus:


Grafana Dashboard:

Oceanbase Metrics:https://grafana.com/grafana/dashboards/15215

Host Metrics:https://grafana.com/grafana/dashboards/15216

Obproxy Metrics:https://grafana.com/grafana/dashboards/15354



外网环境有点慢,需要耐心等待导入:



3.4.4 Grafana 切换视图查看监控


可以在顶端切换视图,查看 3 个 Dashboard 展示的采集数据,我截取了一个 Oceanbase Server 的监控界面,如下:



用户头像

企业级原生分布式数据库 2020.05.06 加入

github:https://github.com/oceanbase/oceanbase 欢迎大家

评论

发布
暂无评论
生态对对碰丨OceanBase如何与Prometheus与Grafana监控结合_Grafana_OceanBase 数据库_InfoQ写作社区