分析
下面我们开始分析这个问题.综合第一节的描述,初步的猜想是告警在到达 AlertManager 前的某些阶段的处理过程太长,导致告警到达 AlertManager 后就已经过了自动解决时间.我们从分析平台里一条告警的流转过程入手,找出告警在哪个处理阶段耗时过长.首先,一条告警的产生需要两方面的配合:
metric 数据
告警规则
将 metric 数据输入到告警规则进行计算,如果符合条件则产生告警.DMP 平台集成了 Thanos 的相关组件,数据的提供和计算则会分开,数据还是由 Prometheus Server 提供,而告警规则的计算则交由 Thanos Rule(下文简称 Ruler)处理.下图是 Ruler 组件在集群中所处的位置:
看来,想要弄清楚现告警的产生到 AlertManager 之间的过程,需要先弄清除 Ruler 的大致机制.官方文档对 Ruler 的介绍是:You can think of Rule as a simplified Prometheus that does not require a sidecar and does not scrape and do PromQL evaluation (no QueryAPI).
不难推测,Ruler 应该是在 Prometheus 上封装了一层,并提供一些额外的功能.通过翻阅资料大致了解,Ruler 使用 Prometheus 提供的库计算告警规则,并提供一些额外的功能.下面是 Ruler 中告警流转过程:
首先,图中每个告警规则 Rule 都有一个 active queue(下面简称本地队列),用来保存一个告警规则下的活跃告警.
其次,从本地队列中取出告警,发送至 AlertManager 前,会被放入 Thanos Rule Queue(下面简称缓冲队列),该缓冲队列有两个属性:
capacity(默认值为 10000):控制缓冲队列的大小,
maxBatchSize(默认值为 100):控制单次发送到 AlertManager 的最大告警数
thanos_alert_queue_alerts_dropped_total
thanos_alert_queue_alerts_pushed_total
thanos_alert_queue_alerts_popped_total
通过观察 thanos_alert_queue_alerts_dropped_total 的值,看到存在告警丢失的总数,也能佐证了缓冲队列在某些时刻存在已满的情况.
注意事项
上面的计算过程只是提供一个参考思路,如果最终计算出该值过大,很有可能对 AlertManager 造成压力,因而失去缓冲队列的作用,所以还是需要结合实际情况,具体分析.因为 DMP 将 Ruler 集成到了自己的组件中,所以可以比较方便地对这个值进行修改.如果是依照官方文档的介绍使用的 Ruler 组件,那么需要对源码文件进行定制化修改.
首先了解什么是外部表,与其它表的区别,建立一个简单的外部表(主要看操作过程),最后我们用外部表查看ORACLE报警日志
①了解oracle外部表
外部表定义:结构被存放在数据字典,而表数据被放在OS文件中的表
作用:在数据库中查询OS文件的数据,还可以将OS文件数据装载到数据库中
与其它表的区别:在外部表上不能执行DML操作,也不能在外部表上建索引,只能执行select操用
因为外部表主要是查看OS上的文件,首先在OS上建一个文件
mkdir -p /oracle/ext
vi /oracle/ext/ext.dat
在此我们先建一个新用户
用户授权
SQL grant create any directory to test;
建立目录对象
Connected.
SQL create directory ext as '/oracle/ext';
Directory created.
SQL create table exttable(
)organization external
(type oracle_loader
default directory ext
access parameters
(records delimited by newline
fields terminated by ','
)location('ext.dat')
);
SQL select * from exttable;
ID NAMEI
---------- ---------- ----------
测试成功,可见在数据库中可以查询OS文件的数据
由于在上面实验中已建立了一个用户,并赋相应的权限,而且也有了OS文件(即报警文件alert_SID.log),所以在此直接建立目录对象并建立外部表就可以了.
①建立目录对象
SQL create table alert_log(
default directory bdump
SQL select * from alert_log where rownum 10;
TEXT
--------------------------------------------------------------------------------
Starting ORACLE instance (normal)
Cannot determine all dependent dynamic libraries for /proc/self/exe
Unable to find dynamic library libocr10.so in search paths
LD_LIBRARY_PATH is not set!
The default library directories are /lib and /usr/lib
Unable to find dynamic library libocrb10.so in search paths
Unable to find dynamic library libocrutl10.so in search paths
测试成功
然后我们测试查报警信息'ORA-%'
SQL select * from alert_log where text like 'ORA-%';
.dbf'
og' - file cannot be created
测试成功,
可见我们可以使用外部表来方便的查看ORACLE的报警信息
要获得逻辑驱动器或存储卷的性能计数器数据,必须在命令提示符下键入diskperf –yv.
默认情况下,操作系统使用diskperf –yd命令包含物理驱动器数据.
使用命令diskperf的详细信息,请在命令提示符下键入diskperf -?.
①.、问题复现:Spring boot 应用启动时候正常,但是页面访问后台接口,程序再访问数据库时,控制台报错如下:没有匹配的身份验证协议
....
OracleOraDb11g_home1TNSListener服务启动后停止
①.、问题复现:有时候连接 Oralce 的时候发现连接不上,然后打开 "services.msc" 服务面板发现 xxxxTNSListener 监听服务没有启动,当手动启动监听服务的时候,它弹框提示:"本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停止.某些服务在未由其他服务或程序使用时将自动停止."
以上就是土嘎嘎小编为大家整理的Oracle错误怎么看相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!