TUXEDO在线运行监控浅谈(一):事件监控

[复制链接]
查看11 | 回复9 | 2007-1-24 12:56:49 | 显示全部楼层 |阅读模式
从03年开始接触TUXEDO到现在已经有些年头,从开始的一知半解、略懂皮毛到现在的稍有小成,也算积累了一些知识和经验。之前一直想将一些知识和经验总结一下,但总是有想法没有动手,年底趁着有点空闲整理了几年来的知识,希望能跟大家一起探讨一下。
由于我们的客户主要是电信,系统是7*24运行,不能间断,系统运行压力比较大,而且系统和很多外围系统存在着大量的接口,因此当客户端比较多或者是外围系统出现问题时,TUXEDO系统经常也会出现不稳定,例如客户端并发使用量比较大而导致系统性能下降时,会出现消息队列出现堵塞,客户端和服务端异常死亡,服务被清除,客户端连接数已经达到LICENCE最大连接数,进程数已经达到系统设置的最大的进程数等严重错误,出现这种错误时,往往无法立即知道情况,需要过一段时间从使用者才知道有问题发生,而且也不知道是何错误,需要从TUXEDO日志才能了解一些信息。如果是在深夜发生,那么维护是相当麻烦。
因此当时便有写一个TUXEDO在线监控程序的想法,阅读了TUXEDO的官方文档,总算在文档中找到了一些TUXEDO的管理办法。TUXEDO的管理方法有几种,一种就是我们常用的命令行方式,用tmadmin,dmadmin,tmconfig等命令来查看TUXEDO系统状况。另一种就是通过设置服务的日志方式来记录执行情况。另外两种就是我下面重点介绍的事件通知和通过查询方式。
TUXEDO提供了一个事件(event)监控(EventBroker)的机制,用我们熟悉的订阅/发布方式来提供事件发生通知。事件分为2种,一种是TUXEDO提供的系统事件,例如服务异常死亡、消息队列堵塞等;另一种就是我们自己的编写发布的服务,在服务中通过tppost()通知订阅者。这两种方式的事件订阅方式都是一样,用tpsubscribe()通知TUXEDO系统要订阅那些事件,对于系统事件来说,由TUXEDO自身通知订阅者,对于非系统服务来说,需要我们在服务中调用tppost()来通知订阅者。下面介绍一下如何订阅和接收事件。
首先我们要编写一个服务,此服务用来接收TUXEDO系统的事件通知发布,只要我们订阅的事件有发生,那么TUXEDO就会调用这个服务,我们就可以根据事件来处理一些错误,例如服务异常死亡,那么我们可以自动将改服务重新启动。订阅的代码简单如下:
TPEVCTLevctl; //事件订阅和接收的结构体
long retHandle;


//定义订阅的事件类型
evctl.flags=TPEVSERVICE;
strcpy(evctl.name1,monitorSrv);//定义用于接收事件通知的服务


//调用tpsubscribe()向TUXEDO系统订阅事件。subscribeEvent为事件、SERVICE的变量,例如服务异常死亡为:.SysServerDied。
retHandle=tpsubscribe(subscribeEvent,NULL,&evctl,TPSIGRSTRT);
if(retHandle==-1)
{

userlog("订阅事件(%s)出错,错误信息:%s",t_subscribeEvent,tpstrerror(tperrno));
}

从上面代码我们可以看到,订阅时间非常简单,剩下的事情就是接收事件,在我们自己编写的服务中处理。建议将需要监控的事件定义在数据库表中或者是配置文件中,这样我们可以写一个服务,在服务的tpsvrinit()中进行订阅,然后在tpsvrdone()中取消订阅。
下面简单谈一下事件接收服务该如何写。
事件接收服务跟我们平常写的服务一样,只不过是TUXEDO系统调用了这个服务而已,TUXEDO将EVENT的一些数据写在FML32数据区中。
事件接收的代码简单如下:
FBFR32 *transf;

transf=(FBFR32 *)transb->data;
eveCount=Foccur32(transf,TA_EVENT_NAME);
for(i=0;i<eveCount;i++)
{
Fgets32(transf,TA_EVENT_NAME,i,t_EventName);

Fgets32(transf,TA_EVENT_DESCRIPTION,i,t_EventDescript);

Fgets32(transf,TA_EVENT_SEVERITY,i,t_EventSeverity);


Fgets32(transf,TA_SERVERNAME,i,t_ServerName);

..........

//将事件通知插入到日志中

//根据事件和事件类型进行相应的处理。

................
}
从上面代码可以看出,接收服务也很简单。
从上面的例子我们可以看到,利用TUXEDO的事件监听机制,我们可以很好的监控到我们关心的事件,根据事件自动处理一些错误和
异常,对于严重的错误,可以实时给系统管理员通过发短信、电话通知、邮件等方式来告警。对于一些我们自己编写的重要服务,我们也可以设立监控,实时监控流程的进行。当时笔者将这个事件监控加载到在线TUXEDO系统以后,系统的稳定性得到了很大的提高,维护工作量减少了很多,很多异常由监控程序自身完成。而且可以将维护工作交给系统管理员,由他们去做日常查看和维护工作。
下一篇文章我将介绍如何通过接口编程方式来实时监控TUXEDO系统的运行状况,例如监控消息队列的长度、服务的调用情况、
客户端的连接情况、域间通讯的连接状态等。
欢迎大家到我的搏客来讨论:http://i.cn.yahoo.com/07604066096
回复

使用道具 举报

千问 | 2007-1-24 12:56:49 | 显示全部楼层
这东西还有用的?
回复

使用道具 举报

千问 | 2007-1-24 12:56:49 | 显示全部楼层
TUXEDO过时了! 楼主是做广告吧?
回复

使用道具 举报

千问 | 2007-1-24 12:56:49 | 显示全部楼层
TUXEDO现在仍然广泛的应用于电信和银行等很多行业,过时了吗?软件系统最重要还是要看是否适合是于行业应用,技术不是最重要的。
我只是一个电信服务提供商的一个软件人员,不是卖东西的。:)))
回复

使用道具 举报

千问 | 2007-1-24 12:56:49 | 显示全部楼层
原帖由 ALONLIN123 于 2009-1-22 11:09 发表
TUXEDO现在仍然广泛的应用于电信和银行等很多行业,过时了吗?软件系统最重要还是要看是否适合是于行业应用,技术不是最重要的。
我只是一个电信服务提供商的一个软件人员,不是卖东西的。:)))

但是这里是JAVA社区,你弄些C++的东西,恐怕没有人看得懂啊!


回复

使用道具 举报

千问 | 2007-1-24 12:56:49 | 显示全部楼层


,以前我这里也看到有关TUXEDO的帖子,所以就发了个帖子。跑错地盘了。:)))。
有时间在这里跟大家讨论一下JBOSS和HIBERNATE。
回复

使用道具 举报

千问 | 2007-1-24 12:56:49 | 显示全部楼层
原帖由 ALONLIN123 于 2009-1-22 11:37 发表

,以前我这里也看到有关TUXEDO的帖子,所以就发了个帖子。跑错地盘了。:)))。
有时间在这里跟大家讨论一下JBOSS和HIBERNATE。





回复

使用道具 举报

千问 | 2007-1-24 12:56:49 | 显示全部楼层
原帖由 ALONLIN123 于 2009-1-22 11:37 发表

,以前我这里也看到有关TUXEDO的帖子,所以就发了个帖子。跑错地盘了。:)))。
有时间在这里跟大家讨论一下JBOSS和HIBERNATE。

兴趣好广啊
回复

使用道具 举报

千问 | 2007-1-24 12:56:49 | 显示全部楼层
在银行和电信tuxedo还是用得很多得,但是在java区里还是不要弄些c或c++得玩意,免得误导新人以为又出来什么新框架了
回复

使用道具 举报

千问 | 2007-1-24 12:56:49 | 显示全部楼层
监控TUXEDO 的软件推荐用这个,专业,权威.并能提供报警和报表.
Oracle Tuxedo Cartridge for Foglight
详细参考http://www.innovatedigital.com/node/709
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行