就在上周,我们的一个客户小张就遇到了这样的问题。他负责运维的公司数据库有几个表空间,不同业务的Oracle表空间,其容量大小和重要程度各不相同。他希望对这些表空间设置不同的使用率告警阈值,并且根据不同表空间的总容量,设置不同的表空间使用率告警策略。
当前,小张用的是云和恩墨的zCloud预置的的监控指标oracle_space_tablespace来对Oracle表空间进行监控告警的,但oracle_space_tablespace只能通过剩余空间和剩余空间百分比来监控,这显然不能完全满足他的需求。
好消息是,当zCloud预置表空间使用率监控项无法满足个性化监控需求时,可以灵活利用zCloud Prometheus中预制的oracle_space_tablespace指标编写Promethues表达式,并通过zCloud自定义告警项功能满足个性化Oracle表空间使用率监控需求。
什么Promethues表达式?
Prometheus 表达式是 Prometheus 监控系统中用于查询和分析时间序列数据的查询语言。你可以把它想象成一个“公式”,通过这个“公式”,你可以从zCloud预置的指标中计算出你想要的数据。比如,你可以计算出某个表空间的已使用空间百分比,然后根据这个百分比设置不同的告警阈值。
如何使用Promethues表达式?
以利用Prometheus 表达式自定义Oracle表空间使用率监控指标为例,通常包含以下几个步骤:
1、获取表空间总容量
oracle_space_tablespace_total_bytes{tablespace!=""}
2、计算表空间使用率
(oracle_space_tablespace_bytes{tablespace!=""} /
oracle_space_tablespace_total_bytes{tablespace!=""} ) * 100
3、根据表空间总容量设置告警阈值
if (oracle_space_tablespace_total_bytes{tablespace!=""} < 100GB) { 0.9}else if (oracle_space_tablespace_total_bytes{tablespace!=""} < 500GB) { 0.8}else { 0.7}
有了这个Prometheus表达式,就可以根据不同表空间的总容量,设置不同的表空间使用率告警阈值了。
本示例为满足小张监控需求的表达式
1、场景需求:根据不同表空间总容量,使用不同使用率告警策略如下:
序号 | 表空间总容量 (TOTAL) | 使用率告警策略 (FREE_MB) |
1 | <=200 | <2 |
2 | >200<=500 | <100 |
3 | >500<=1000 | <200 |
4 | >1000<=5000 | <400 |
5 | >5000<=10000 | <1000 |
6 | >10000<=50000 | <2000 |
7 | >50000<=100000 | <3000 |
8 | >100000<=150000 | <5000 |
9 | >150000 | <6000 |
2、实施步骤:
1)利用zCloud预置的Promethues指标oracle_space_tablespace编写如下Promethues表达式。
group by(alertObj,clusterId,databaseId,hostIp,instance,instanceId,job,objType,tenantId,tablespace_name,pdb_name,objId,hostId)
( (oracle_space_tablespace{ metric_name="total_mb"} > 150000 and ignoring(metric_name) oracle_space_tablespace{metric_name="free_mb"}<6000 )
or (oracle_space_tablespace{ metric_name="total_mb"} > 100000 and oracle_space_tablespace{ metric_name="total_mb"} <= 150000 and ignoring(metric_name) oracle_space_tablespace{metric_name="free_mb"}<5000)
or (oracle_space_tablespace{ metric_name="total_mb"} > 50000 and oracle_space_tablespace{ metric_name="total_mb"} <= 100000 and ignoring(metric_name) oracle_space_tablespace{metric_name="free_mb"}<3000)
or (oracle_space_tablespace{ metric_name="total_mb"} > 10000 and oracle_space_tablespace{ metric_name="total_mb"} <= 50000 and ignoring(metric_name) oracle_space_tablespace{metric_name="free_mb"}<2000)
or (oracle_space_tablespace{ metric_name="total_mb"} > 5000 and oracle_space_tablespace{ metric_name="total_mb"} <= 10000 and ignoring(metric_name) oracle_space_tablespace{metric_name="free_mb"}<1000)
or (oracle_space_tablespace{ metric_name="total_mb"} > 1000 and oracle_space_tablespace{ metric_name="total_mb"} <= 5000 and ignoring(metric_name) oracle_space_tablespace{metric_name="free_mb"}<400)
or (oracle_space_tablespace{ metric_name="total_mb"} > 500 and oracle_space_tablespace{ metric_name="total_mb"} <= 1000 and ignoring(metric_name) oracle_space_tablespace{metric_name="free_mb"}<200)
or (oracle_space_tablespace{ metric_name="total_mb"} > 200 and oracle_space_tablespace{ metric_name="total_mb"} <= 500 and ignoring(metric_name) oracle_space_tablespace{metric_name="free_mb"}<100)
or (oracle_space_tablespace{ metric_name="total_mb"} <= 200 and ignoring(metric_name) oracle_space_tablespace{metric_name="free_mb"}<2))
or (group by(alertObj,clusterId,databaseId,hostIp,instance,instanceId,job,objType,tenantId,tablespace_name,pdb_name,objId,hostId)(oracle_space_tablespace{ metric_name="total_mb"}) -1)
2)通过zCloud自定义告警项配置如上表达式
- 进入告警中心->告警项配置->创建自定义告警项
- 输入自定义监控项必要的基本信息及告警条件(表达式框输入如上表达式),并点击预览采集结果。
注:
—点击”预览采集结果”通过后,方可进行自定义告警项保存,否则无法进行保存
—上图告警条件中表达式即为如上Promethues表达式;
—该表达式返回值为0或1,因此可以这里仅设置严重告警级别。
—0表示表空间剩余空间未超过规则阀值;
—1表示表空间剩余空间已超过规则阀值。
- 在创建告警项相同页面,设置告警对象粒度并编写告警信息文案。
- 效果验证:进入告警中心-活动告警查看告警
- 进入该数据库表空间管理查看总容量为6.08GB,剩余容量为654.75MB。
结论:经过验证,zCloud平台可以根据预先设置好的告警策略触发告警。
序号 | 表空间总容量 (TOTAL) | 使用率告警策略 (FREE_MB) |
1 | <=200 | <2 |
2 | >200<=500 | <100 |
3 | >500<=1000 | <200 |
4 | >1000<=5000 | <400 |
5 | >5000<=10000 | <1000 |
6 | >10000<=50000 | <2000 |
7 | >50000<=100000 | <3000 |
8 | >100000<=150000 | <5000 |
9 | >150000 | <6000 |
通过以上设置,通过利用zCloud Prometheus中的表达式功能,小张轻松实现了个性化Oracle表空间使用率监控。当某个表空间的使用率超过了预设的阈值,zCloud就会及时发出告警,提醒小张采取措施。
总结
zCloud Prometheus表达式,让您的数据库表空间监控更加灵活、个性化。通过它,不仅可以计算自定义指标、还可以根据不同的业务需求,设置不同的告警阈值,通过精细化的监控,及时发现潜在问题,打造一套专属的监控体系,为您的数据库保驾护航。