人大金仓 KingbaseES 监控利器 KMonitor:部署策略与实战应用
一、人大金仓KMonitor工具简述
KMonitor(金仓数据库监控工具)是一款KES数据库的全访问监控平台,可对服务器状态、数据库资源和数据库性能、集群情况进行全天候监控和告警,使用户全面掌握KES运行情况、健康状况,及时获取异常信息并快速做出合理应对,保障数据库及业务应用安全。此外,DBA用户也可通过直观丰富的数据库性能报表,快速排查故障问题以及进行容量规划。
核心功能
- 全方位监控:KMonitor支持对服务器状态、数据库资源和数据库性能、集群情况等多维度多指标的监控,确保用户能够全面掌握数据库的运行情况和健康状况。
- 告警功能:该系统提供邮件、短信等多种告警方式,以便在检测到异常或潜在故障时,能够及时向用户发出告警信息,帮助用户快速响应和处理。
- 可视化展示:KMonitor通过直观的可视化界面,展示数据库的各项指标和监控状况,包括CPU、内存、磁盘使用率、磁盘读写的吞吐量、TCP连接状态等,使用户能够更直观地了解数据库的运行状态。
核心优势
- 多维度性能指标分析:KMonitor支持对服务器、数据库资源、性能、集群等多维度多指标的监控、管理、可视化展示和综合分析,帮助用户全面了解数据库的运行状况。
- 故障预警与定位:通过专业的指标监控规则设计和问题分析与定位功能,KMonitor能够提前预知故障风险,并及时发出告警信息。同时,它还提供故障发生时的各项指标数据,辅助用户进行故障分析和定位。
- 灵活个性化配置:KMonitor支持自定义监控展现样式和监控指标,告警指标和告警方式也可灵活配置,满足不同用户的个性化需求。
二、部署概要
本文通过虚拟机部署KMonitor工具演示监控KingbaseESV9R1集群。
最新版安装介质,联系工具研发中心项目经理获取下载地址 tar -zxzf KMonitor_*_ 数据库版本_ 服务器架构.tar.gz && cd monitor
三、拓扑规划
官方监控系统建议部署架构图:
- 建议将监控服务kmonitor、prometheus、consul、alertmanager单独部署于监控服务器。
- 连接集群时,主节点部署kingbase_exporter以及node_exporter,备节点仅部署node_exporter。
- 单机部署时同时部署kingbase_exporter和node_exporter。
本次实验环境
节点名称 | 数据库版本 | 操作系统版本 | IP | 配置 |
---|---|---|---|---|
appnode1 | KingbaseESV9R1 | Redhat7.8 | 192.168.126.10 | 主节点、Kmonitor监控节点 |
dbnode1 | KingbaseESV9R1 | Redhat7.8 | 192.168.126.11 | 备节点、node_exporter节点 |
adminnode | KingbaseESV9R1 | Redhat7.8 | 192.168.126.110 | Yum&&NTP&&witness点 |
四、环境准备
1、KMonitor监控系统安装包结构
1.工具目录
脚本工具除init_sql外都存放于monitor/scripts目录
init_sql
数据库初始化SQL脚本目录,位于monitor/kingbase_exporter目录下,包括以下脚本:
- kmonitor_user.sql:创建监控用户语句
- kmonitor_r3_pg.sql:创建监控用户语句,R3版本qps、tps函数创建语句
- kmonitor_r6_oracle.sql:创建监控用户语句,R6版本oracle模式qps、tps函数创建 语句
- kmonitor_r6_mysql.sql:创建监控用户语句,R6版本mysql模式qps、tps函数创建语 句
- kmonitor_r6_pg.sql:创建监控用户语句,R6版本pg模式qps、tps函数创建语句 注意:当前R6版本中已自带qps、tps函数,仅部分老版本需要手动创建
# 使用方法: ksql test system -f monitor/kingbase_exporter/init_sql/filename.sql
jasypt.sh
明文加密脚本(仅支持kmonitor.properties中 KINGBASE_PASSWD 参数以及 kingbase_exporter/application.yaml 中加密参数):
# 使用方法: cd monitor/scripts bash jasypt.sh passwd # OUTPUT下为加密文本,生成多次直至仅包含大小字母和数字时可用
systemctl.sh
配置系统服务脚本,将 KMONITOR_SERVER 参数中服务添加至系统服务中,包括开机 自启和宕机拉起功能,需要root权限执行:
# 使用方法: bash monitor/scripts/systemctl.sh
KMonitorTool.jar
监控服务工具包,支持prom导出excel、操作KRDS下发实例等功能
2.服务说明
集成脚本
kmonitor.sh为集成脚本,负责一键启停本地所有服务,包括start、stop、restart、 status、register参数
服务脚本
服务目录/*_ctl,sh为服务脚本,配置系统服务和集成脚本都依赖此脚本,负责启动当前目 录服务,包括start、stop、restart、status参数
数据库采集器
monitor/kingbase_exporter为数据库采集器工作目录,使用服务脚本启动时,会根据 properties配置文件中信息进行初始化后启动,默认HTTP服务地址为 http://localhost:1234/kingbase
application.yaml中包含所有指标单独开关
服务器采集器
monitor/node_exporter为服务器采集器工作目录,使用服务脚本启动时,会根据 properties配置文件中信息进行初始化后启动,默认HTTP服务地址为 http://localhost:9200/metrics
2、创建服务器监控用户
建议部署在kingbase用户家目录,或单独部署在kmonitor用户家目录。
useradd -m -s /bin/bash -d /home/kmonitor kmonitor
建议:所有安装节点使用相同用户
3、JAVA环境配置
java --version
注意:kingbase_exporter运行依赖JAVA环境,至少1.8版本
4、上传相关安装包
监控服务部署节点使用KMonitor*.tar.gz安装包,其余被监控节点使用 KMonitor_Exporter*.tar.gz安装包
5、时间同步
在启动KMonitor监控系统前,请确保集群内部时间同步,以及客户端与服务端时间差小于5分钟。
6、执行权限
在进行KMonitor监控部署时,请确保安装包解压后的执行程序具有可执行权限,如果权限不足执行对应报错程序的授权命令(执行授权命令时,确保执行命令用户具有授权权限)。
7、网络权限
在进行KMonitor监控部署时,请确保各服务器之间网络通畅,防止出现网络问题导致的安装失败,使用以下命令检查端口号。
telnet $IP $PORT
8、当前集群信息
确认主库和备库(图中显示:node1是主库、node2是备库、node5是仲裁库)
repmgr cluster show
repmgr service status
确认同步备库、异步备库(图中显示:node2是同步备库)
ksql -h 192.168.126.10 -U system -d test
SELECT application_name,client_addr,state,sync_priority,sync_state FROM sys_stat_replication;
五、安装与配置
1、解压相关文件(主节点)
主节点上传并解压
$ tar -zxf KMonitor_V003R001C001B20240528R6_x86_64.tar.gz
$ cd monitor/
2、创建数据库监控用户
创建监控kmonitor用户并授权。
$ ksql test system -f kingbase_exporter/init_sql/kmonitor_user.sql
-- 创建监控用户 CREATE USER kmonitor with password 'kmonitor';
-- 添加用户标注 COMMENTON ROLE kmonitor IS'kingbase KMonitor user'; -- 授权监控用户 GRANT pg_monitor TO kmonitor;
-- 授权监控用户使用 kwr 扩展
-- 未开启 kwr 插件或不支持 kwr 插件版本请执行 scripts/FunctionInit_ 数据库版本_ 模式.sql 中对应版本创建语句 GRANT USAGE ON SCHEMA perf TO kmonitor;
3、修改配置文件kmonitor.properties(主节点)
$ monitor.properties kmonitor.properties.bak
$ vi kmonitor.properties
# kmonitor server ("kmonitor" "prometheus" "consul" "kingbase_exporter" "node_exporter")
KMONITOR_SERVER=("kmonitor" "prometheus" "consul" "kingbase_exporter" "node_exporter")
KMONITOR_SERVER_ADDRESS="192.168.126.10"
# start as TLS, enable(1) disable(0)
ENABLE_TLS=0
# kmonitor config
KMONITOR_PORT=3000
# prometheus config
PROMETHEUS_PORT=9091
# kingbase_exporter config
KINGBASE_EXPORTER_PORT=1234
# node_exporter config
NODE_EXPORTER_PORT=9200
# consul config
CONSUL_SERVER_PORT=8300
CONSUL_SERF_LAN_PORT=8301
CONSUL_SERF_WAN_PORT=8202
CONSUL_HTTP_PORT=8500
CONSUL_HTTPS_PORT=8501
CONSUL_DNS_PORT=8600
# kingbase config
KINGBASE_ADDRESS="192.168.126.10"
KINGBASE_PORT=54321
KINGBASE_DB="test"
KINGBASE_USER="kmonitor"
KINGBASE_PASSWD="kmonitor"
# alertmanager config
ALERTMANAGER_PORT=9093
ALERTMANAGER_CLUSTER_PORT=9094
# register config, clusterName_instanceIp
REGISTER_KINGBASE_LIST=("KingbaseCluster_192.168.126.10" "KingbaseCluster_192.168.126.11")
REGISTER_NODE_LIST=("KingbaseCluster_192.168.126.10" "KingbaseCluster_192.168.126.11")
# deregister config, clusterName_instanceIp
DEREGISTER_LIST=()
4、解压相关文件
$ tar -zxvf KMonitor_Exporter_V003R001C001B20240528R6_x86_64.tar.gz
$ cd monitor/
5、修改配置文件kmonitor.properties(备节点)
$ monitor.properties kmonitor.properties.bak
$ vi kmonitor.properties
# kmonitor server ("kmonitor" "prometheus" "consul" "kingbase_exporter" "node_exporter")
KMONITOR_SERVER=(kingbase_exporter node_exporter)
KMONITOR_SERVER_ADDRESS="192.168.126.10”
# start as TLS, enable(1) disable(0)
ENABLE_TLS=0
# kmonitor config
KMONITOR_PORT=3000
# prometheus config
PROMETHEUS_PORT=9091
# kingbase_exporter config
KINGBASE_EXPORTER_PORT=1234
# node_exporter config
NODE_EXPORTER_PORT=9200
# consul config
CONSUL_SERVER_PORT=8300
CONSUL_SERF_LAN_PORT=8301
CONSUL_SERF_WAN_PORT=8202
CONSUL_HTTP_PORT=8500
CONSUL_HTTPS_PORT=8501
CONSUL_DNS_PORT=8600
# kingbase config
KINGBASE_ADDRESS="192.168.126.11"
KINGBASE_PORT=54321
KINGBASE_DB="test"
KINGBASE_USER="kmonitor"
KINGBASE_PASSWD="kmonitor"
# alertmanager config
ALERTMANAGER_PORT=9093
ALERTMANAGER_CLUSTER_PORT=9094
# register config, clusterName_instanceIp
REGISTER_KINGBASE_LIST=("KingbaseCluster_0.0.0.0")
REGISTER_NODE_LIST=("KingbaseCluster_0.0.0.0")
# deregister config, clusterName_instanceIp
DEREGISTER_LIST=()
6、部署过程
在monitor目录下执行下面命令初始化KMonitor监控系统,此命令只配置监控系统不启动服务,如果直接执行启动命令会自动进行初始化。
bash kmonitor.sh init
# 执行部署脚本(192.168.126.10)
bash kmonitor.sh start
bash kmonitor.sh register
# 执行部署脚本(192.168.126.11)
bash kmonitor.sh start
# 查看监控工具状态(192.168.126.10)
bash kmonitor.sh status
# 查看监控工具状态(192.168.126.11)
bash kmonitor.sh status
7、登录测试
浏览器访问http://IP:KMONITOR_PORT(默认3000)进行用户登陆,admin用户具有增删改查权限(默认密码K1ngb@se),kingbase用户仅查看权限(默认密码kingbase)。
http://192.168.126.10:3000/login
数据库性能展示
数据库性能展示
数据库资源展示
8、配置监控kmonitor 用户环境变量
使用kmonitor用户请配置数据库环境变量
$ vi .bash_profile
#使该环境变量生效
source .bash_profile
9、可视化监控系统配置相关规则
可以配置监控告警并邮件等形式推送。
monitor/alertmanager/kingbase_alarm服务采集prometheus中告警信息并推送通知,此 服务仅负责推送功能,实际告警规则配置以及触发由prometheus完成,告警规则配置文件位 于prometheus/rules下
启动alertmanager
cd monitor/alertmanager && bash start.sh
停止alertmanager
cd monitor/alertmanager && bash stop.sh
10、监控服务启停
bash kmonitor.sh 'start | stop | restart | status | register'
六、问题总结
问题:
启动监控脚本报失败,重新停止,等待相关进程完全之后再次启动。
总结:
有条件建议单独部署监控服务器系统。
由于KMonitor工具不对外开放,想深入研究请沟通相关厂家技术人员指导,此外官方论坛也提供了更多交流渠道