作者简介:阿福,中经网架构师,在OceanBase社区输出多篇文章,为其他同学解疑答惑,对文档质量提升做出重要贡献。
一、OceanBase 数据库简介
OceanBase 数据库是一个原生的分布式关系数据库,它是完全由阿里巴巴和蚂蚁集团自主研发的项目,近期成立单独的商业公司北京奥星贝斯进行运营,并于2021年6月1日开源。
OceanBase 数据库构建在通用服务器集群上,基于 Paxos 协议和分布式架构,提供金融级高可用和线性伸缩能力,不依赖特定硬件架构,具备高可用、线性扩展、高性能、低成本等核心技术优势。
当前社区版仅开放了 MySQL 租户模式供大家使用,商业版还提供 Oracle 租户模式, OceanBase 数据库具有如下特点:
- 高可用
- 线性扩展
- MySQL/Oracle 高度兼容
- 高性能
- 低成本
- 多租户
下面放一张完整的架构图,让大家有一个整体的认识:
二、OceanBase 监控解决方案
2.1 方案一:OCP 云管平台
当前 OceanBase 数据库官方开放了云管平台 OCP 的 Docker 镜像,供用户下载和使用,OCP 云管平台是 OceanBase 官方提供的一站式管理解决方案,它的架构如下:
从上面的体系架构可以看出 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
本文中我采用了一个最简单的三节点 OceanBase 集群架构,另外配置了一台 OBProxy 机器,共 4 台机器,Prometheus 和 Grafana 服务都部署到 OBProxy 机器上,服务器物理架构如下:
3.2 OBAgent 部署
上面简单介绍了一下逻辑架构和物理架构,下面我们就开始实际操作起来。由于 OBProxy 的 2884 端口是服务安装时已经配置好的,所以不需要部署 OBAgent 服务,我们只需要使用 OBDeploy 工具将 OBAgent 部署到 OBServer 服务器即可。(如果您是在初始化 OceanBase 集群,也可以将 OBAgent 的配置文件一起写到 OceanBase 配置文件中,一并进行初始化;我这里采用的是分开单独部署的形式)。
3.2.1 初始化文件编写
配置文件与数据库初始化配置文件有一些地方是需要一致的,具体参考链接说明,我这里最终的文件内容如下:
obagent:servers:- name: server1ip: 10.211.55.74- name: server2ip: 10.211.55.75- name: server3ip: 10.211.55.76global:home_path: /home/chris/obagentserver_port: 8088pprof_port: 8089sql_port: 2881rpc_port: 2882log_level: INFOlog_path: log/monagent.logcrypto_method: plainlog_size: 30log_expire_day: 7log_file_count: 10http_basic_auth_user: adminhttp_basic_auth_password: rootpprof_basic_auth_user: adminpprof_basic_auth_password: rootmonitor_user: rootmonitor_password: observercluster_name: obcluster server1:zone: zone1server2:zone: zone2server3:zone: zone3
将以上内容创建 yaml 文件到 OBD 机器上(截图示例,部分内容略):
3.2.2 使用 OBD 部署 OBAgent
指定 OBAgent 的配置文件,进行一键部署,执行过程会从 OceanBase 官方仓库拉取 OBAgent 并安装:
[chris@obd ~]$ obd cluster deploy obagent-only -c obagent_only.yaml Update OceanBase-community-stable-el7 ok Update OceanBase-development-kit-el7 ok Download obagent-1.1.1-2.el7.x86_64.rpm (7.03 M): 100% [###################################################################################] Time: 0:00:10 701.81 kB/s Package 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 ok Parameter check ok Open ssh connection ok Remote obagent-1.1.1-03b01616911abfbbc80092006955f24ed4c2f461 repository install ok Remote obagent-1.1.1-03b01616911abfbbc80092006955f24ed4c2f461 repository lib check ok Cluster status check ok Initializes obagent work home ok obagent-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/ 总用量 16 drwxr-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/ 总用量 28 drwxrwxr-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 bin drwxrwxr-x 5 chris chris 4096 5月 10 15:48 conf drwxrwxr-x 2 chris chris 4096 5月 10 15:48 lib drwxrwxr-x 2 chris chris 4096 5月 10 15:48 log drwxrwxr-x 2 chris chris 4096 5月 10 15:48 run
3.2.3 使用 OBD 启动 OBAgent
启动 OBAgent 之前,我先启动 OceanBase 集群(如果您的集群已经在服务,该步骤可以省略):
[chris@obd ~]$ obd cluster start obcluster Get local repositories and plugins ok Open ssh connection ok Load cluster param plugin ok Check before start observer ok Check before start obproxy ok Start observer ok observer program health check ok Connect to observer ok Wait 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 ok obproxy program health check ok Connect to obproxy ok Initialize cluster +------------------------------------------------+ | obproxy | +--------------+------+-----------------+--------+ | ip | port | prometheus_port | status | +--------------+------+-----------------+--------+ | 10.211.55.73 | 2883 | 2884 | active | +--------------+------+-----------------+--------+ obcluster running
下面执行命令启动 OBAgent:
[chris@obd ~]$ obd cluster start obagent-only Get local repositories and plugins ok Open ssh connection ok Load cluster param plugin ok Check before start obagent ok Start obagent ok obagent 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 rules prometheus.yaml rules/ rules/host_rules.yaml rules/ob_rules.yaml
拉取解压缩:
cd /home/chris/prometheus-2.35.0.darwin-amd64 scp chris@observer1:/home/chris/obagent/conf/prometheus_config/prule.tgz . mv prometheus.yml prometheus.yml.bak tar 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 configuration alerting:alertmanagers:- static_configs:- targets:- localhost:9093
重启 Prometheus。
配置 alertmanager 的 SMTP 信息:
打开 alertmanager 目录下的 alertmanager.yml 文件,按照如下配置进行修改:
global: smtp_smarthost: 'smtp.126.com:25' # smtp地址及端口,不加密默认25smtp_from: 'username@126.com' # 发件人 smtp_auth_username: 'username@126.com' # 发件邮箱 smtp_auth_password: 'pwd' # 邮箱密码 smtp_require_tls: false # 不启用TLS route: group_by: ['alertname'] group_wait: 30sgroup_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/bin nohup ./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 的监控界面,如下:
以上就是关于 OceanBase 的 Prometheus 与 Grafana 监控解决方案,希望能够帮助到您!
最后的最后,您有任何疑问都可以通过以下方式联系到我们~
联系我们
欢迎广大 OceanBase 爱好者、用户和客户随时与我们联系、反馈,方式如下:
社区版官网论坛
社区版项目网站提 Issue
钉钉群:33254054