We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

System management with RHQ and Jopr

00:00

Formal Metadata

Title
System management with RHQ and Jopr
Alternative Title
Systems management with RHQ and Jopr
Title of Series
Number of Parts
97
Author
License
CC Attribution 2.0 Belgium:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Identifiers
Publisher
Release Date
Language

Content Metadata

Subject Area
Genre
Abstract
Jopr is the open source systems management and monitoring platform from JBoss / Red Hat. While it is specially tailored towards JBoss projects, it can be easily extended in various ways. This talk will present the Jopr / RHQ system and its architecture and then talk about the extension points and how to write extensions for monitoring, management and alerting. This presentation will also talk about the relation to RHQ-project.org, which used to be the upstream to Jopr and which now includes the Jopr bits.
Operator (mathematics)Data managementProjective planeJava appletPosition operatorWordSoftwareNeighbourhood (graph theory)Process (computing)System administratorQuicksortBitSlide ruleOpen sourceLecture/Conference
Projective planeBlogAreaSlide ruleSoftware bugWikiProcess (computing)Open sourceTerm (mathematics)BitFlow separationRepository (publishing)TouchscreenGodJava appletCodeOptical disc driveTraffic reportingInstance (computer science)Service (economics)CuboidBlock (periodic table)Row (database)Lecture/Conference
Demo (music)Web pagePlug-in (computing)Electronic mailing listCartesian coordinate systemServer (computing)Physical systemService (economics)Slide ruleOpen sourceData managementMeasurementAuthorizationOrder (biology)PermanentMatrix (mathematics)Staff (military)Moment (mathematics)LaptopVirtual machineDirected graphInformationBitGroup actionQuicksortSource codeComputer animation
Server (computing)Axiom of choiceProduct (business)Cartesian coordinate systemPhysical systemOperator (mathematics)LeakSemiconductor memoryBootingComputer iconLaptopSoftware developerElectronic mailing listQuicksortSource codeComputer animation
Structured programmingDefault (computer science)Sanitary sewerConvex hullSimulationRange (statistics)Moment (mathematics)Computer iconElectronic visual displayOperator (mathematics)Physical systemRight angleFlagContent (media)Plug-in (computing)Computer animation
Inclusion mapInformation managementHand fanSimulationVacuumTwin primeCodeDefault (computer science)Computer hardwareConfiguration spaceService (economics)Metric systemBound stateMeasurement1 (number)Graph (mathematics)SpacetimeElectronic mailing listGraph (mathematics)Web pageProduct (business)QuicksortIP addressPhysical systemAddress spaceSoftwareComputer iconRange (statistics)AlgorithmBitComputer configurationCondition numberVirtual machineCartesian coordinate systemCountingThread (computing)Exception handlingChemical equationSampling (statistics)Structural loadMereologyDrop (liquid)Series (mathematics)Category of beingTable (information)Chi-squared distributionTablet computerError messageIntegrated development environmentInformation overloadComputer animation
DatabaseDefault (computer science)Physical systemString (computer science)ExplosionMathematicsRevision controlData storage deviceRow (database)AdditionGraph (mathematics)Maxima and minimaScheduling (computing)Form (programming)NumberWave packetSound effectEndliche ModelltheorieBit rateComputer animation
Plug-in (computing)Server (computing)Default (computer science)DatabaseVirtual machineCovering spaceLevel (video gaming)Group actionComplete metric spaceLatent heatMetric systemWeb pageArmCASE <Informatik>Multiplication signType theoryComputer animation
Chi-squared distributionExecution unitTeilerfunktionToken ringRevision controlSoftware developerError messageMoment (mathematics)DatabaseLibrary (computing)Structural loadExecution unitDemosceneFile formatPhysical systemRecurrence relationBitMultiplication signDifferent (Kate Ryan album)Server (computing)Operator (mathematics)Java appletGroup actionProjective planeTable (information)Event horizonTime zoneCategory of beingConnected spaceWeb pageNetwork topologyScripting languageSelectivity (electronic)Green's functionView (database)Function (mathematics)Scheduling (computing)Graphical user interfaceFrequencyShooting methodCuboidType theoryOpen sourceVirtual machineElectronic mailing listTouchscreenMereologyMenu (computing)Electronic visual displayArithmetic meanVideo gameLine (geometry)ResultantComputer animation
Menu (computing)GradientConnected spaceDirectory serviceVector spaceSoftwareWeb 2.0Multiplication signComplete metric spaceData centerMereologyExpressionSoftware frameworkSystem administratorPlug-in (computing)Computer programmingLine (geometry)Group actionOcean currentAffine spaceVideo gameMoment (mathematics)LastteilungOutlierJava appletRevision controlRange (statistics)Operator (mathematics)InformationConnectivity (graph theory)Metric systemMathematicsPerformance appraisalView (database)LaptopBitResultant2 (number)NumberPhysical systemSoftware developerProcess (computing)DatabaseAverageLoginTouchscreenCartesian coordinate systemVideo game consoleCoefficient of determinationServer (computing)Product (business)QuicksortDrop (liquid)Service (economics)Dot productOpen sourceConfiguration spaceSlide ruleControl flowDivisorFormal languageGraphical user interfaceSocial classCentralizer and normalizerDefault (computer science)Mobile WebWritingSource codeComputer animation
Data typeAbelian categoryStatisticsServer (computing)Service (economics)Sanitary sewerEuclidean vectorComponent-based software engineeringConfiguration spaceOperator (mathematics)Group actionOperations researchSoftwareContent (media)Lipschitz-StetigkeitMeasurementPlug-in (computing)Perspective (visual)Inclusion mapExtension (kinesiology)Menu (computing)Web pageJava appletCodeOpen sourceLine (geometry)CuboidFormal languageSystem administratorScripting languageRight angleElectronic mailing listSocial classCorrespondence (mathematics)MetadataSemiconductor memoryScheduling (computing)CountingGraphical user interfaceThread (computing)Process (computing)Server (computing)Bus (computing)TelecommunicationPlug-in (computing)Firewall (computing)ImplementationType theoryService (economics)Core dumpInformationCartesian coordinate systemCategory of beingNormal (geometry)DatabaseNumbering schemeComplete metric spaceView (database)Functional (mathematics)BitConnectivity (graph theory)Connected spaceLatent heatInterface (computing)SoftwareHierarchyJava appletFacebookMereologyMeasurementRule of inferenceProjective planeoutputQuicksortOpen sourceRevision controlRecursionMessage passingLevel (video gaming)CodeVirtual machineWeb pageWritingMenu (computing)Extension (kinesiology)FingerprintVideo gamePerspective (visual)Form (programming)Inverter (logic gate)Table (information)GodResultantWindowFamilyWeb browserData managementStaff (military)MathematicsMaizeComputer animation
Event horizonJava appletAbelian categoryRootServer (computing)Computer hardwareOracleTwitterCache (computing)DatabasePlug-in (computing)Traffic reportingImplementationCodeType theoryServer (computing)Plug-in (computing)Cache (computing)Java appletFile formatMetadataReal numberWindowTraffic reportingMereologyOnline helpIntegrated development environmentService (economics)Generic programmingEvent horizonOpen sourceElectronic mailing listSocial classSkeleton (computer programming)Computer fileNetwork topologyFile archiverBlogSource codeSoftwareBlock codeRootFile systemDomain nameVideoconferencingPhysical systemCryptographyHierarchyCodeTouchscreenMobile WebDifferent (Kate Ryan album)Multiplication signComputer animation
Plug-in (computing)Sanitary sewerImplementationDefault (computer science)Scripting languageEmailConfiguration spaceCategory of beingPlastikkarteCorrelation and dependenceConvex hullString (computer science)Wechselseitige InformationExtension (kinesiology)Field (computer science)outputMetadataLatent heatElectronic mailing listPlug-in (computing)Slide ruleEmailParameter (computer programming)State of matterDefault (computer science)BitObject (grammar)CodeCartesian coordinate systemResultantJava appletMathematicsMessage passingTouchscreenServer (computing)Connected spacePatch (Unix)Uniform resource locatorOperator (mathematics)Traffic reportingSocial classScripting languageCategory of beingInstance (computer science)Representational state transferTwitterNamespaceError messageOpen sourcePhysical systemRevision controlConfiguration spaceBoolean algebraRobotClient (computing)Software developerSystem callFront and back endsAddress spaceGreatest elementWeightEnterprise architectureInterface (computing)Rational numberGraph (mathematics)WritingSystem administratorCuboidKnowledge-based configurationCASE <Informatik>Web 2.0Computer filePauli exclusion principleSheaf (mathematics)AreaMereologyWordPhysical lawOffice suiteBlock (periodic table)Service (economics)Process (computing)Multiplication signTime zoneEndliche ModelltheorieLecture/Conference
Data miningBlogPointer (computer programming)Uniform resource locatorSheaf (mathematics)CuboidPlug-in (computing)Configuration spaceElectronic mailing listRight anglePhysical systemDefault (computer science)BitArtistic renderingMereologyCodeVideo gameMultiplication signSpeech synthesisLimit (category theory)
Transcript: English(auto-generated)
Okay, hello again to my talk about RHQ and job on system management with that. My name is Heiko Rupp. I work for Red Hat.
And you see my contact data here. Now when this talk, when I was asked about giving the talk, I submitted my proposal as system management with RHQ. So I got an answer back. Ah, you're talking about job on. Yeah, that's cool. Let's do that.
And now I'm kind of sort of RHQ here and JWOS operations network. What it's actually about is we have these open source management projects, RHQ and job on. And then we have Red Hat or JWOS, a commercial tool called JWOS Operations Network,
which is built of those two other worlds. Now, in the past, and I will show some history slides later on,
we have that project RHQ as a foundation. And on top of that, we have job on, which were the JWOS management bits. And on top of both is build JWOS on. And since last September, we are in the lucky position that we only have RHQ anymore.
So while you will still see the term job on out there, it is being phased out. RHQ is the open source project. And RHQ is living under RHQproject.org.
So that's the main wiki documentation side of the whole project. We don't have to write that down or you can, of course, but I will post my slides at least in my blog and this gets syndicated to the JWOS blog screen and I guess first then we'll have them somewhere linked as well.
So it's RHQproject.org. We are using some other infrastructure for a few services, like the Fedora hosted Git repository for all of our source code, and also the Mozilla from Red Hat from now on. We did have in the past two separate JIRA instances,
one at RHQproject.org and another one at JWOS.org slash job on. But this was always a little bit of pain for people to decide if they wanted to report a bug or a feature in which issue tracker should that go. So that's also gone now.
The job on JIRA exists but it should no longer allow you to post new bugs. So everything in that area here in the Git repo, you will also find source of all the bits from RHQ and we don't have to go to two different repos as in the past.
It's now completely integrated. But before I continue with those boring slides, let's go off for some demo and have a look at the application itself. So it's about monitoring and management of systems, of servers. From where we come from, it's mostly targeted at JWOS services and servers,
like the JWOS application server, JWOS cache, Hibernate, and Tomcat or embedded Tomcat, but it's not exclusive. I will show you later a list of plugins that are available.
The list isn't even complete and it's simple to write a new plugin for a new resource to manage. So this one here is the start page, the dashboard. You see information about what you have in inventory. There's a thing called the platform.
That's basically a machine where services run on. So one Linux machine is one platform, another Linux machine is a second platform, and so on. So this is currently my laptop here. It's one platform with 10 servers and 289 services. I'll show you the means, so just be forgiven at the moment.
Those servers and servers, where you put them, your stuff, is sort of arbitrary anyway, so it's out-grouping. We don't have any groups defined and we're currently getting 107 metrics,
which is measurement values in per minute from the measurement subsystems. Up here we have an audit discovery booklet, so when the system will show them to you up there, and then you can decide to take them into your entry or decide you don't want them. So, for example, if you just file a new JBLS application server for testing,
while the discovery run is coming in, it will be discovered and shown up in this booklet, like that guy. And when you say, no, that's not my production, when I just wanted to test something and I don't want to monitor it,
you don't take it to inventory, but you click on ignore. Then you have some recently added resources, so you see a history of what has got added to the system, you can define some favorites. You see here about recent alerts, which alerts got fired.
I will talk about alerts more in detail later on. Here you can see operations on resources that were triggered recently or that are scheduled to be triggered. So it's possible, for example, for a system that will be fine, reboot my JBLS AS server every night, because I know it has a memory leak,
or my application has a memory leak of the server itself, and you can just reboot it like that. And here we also have HasAlert, so currently unavailable list of things, so it's sort of a list of things to the development. So now let's have a look at one platform, for example.
That's my laptop. Here you see a bunch of icons. When I go to the server list, it's even more impressive. These items stand for some subsystems within the system. So you have this little icon here
that looks like a monitor with a 6x clock. It's about the monitoring subsystem. Then you have this little notepad. Yes, thanks. It's about the inventory. I will show you the subsystems again in a moment.
The flag for alerts. This display button for operations. This thing which looks like a mini explorer icon is about a content subsystem. And this one I don't recall at the moment.
So you can also see, here the range is about configuring the source. You can see not every resource has all of the icons. That depends on the plug-in that you write and how much you want to support in the plug-in. Sometimes it makes no sense to configure a resource because for a platform, for a Linux machine itself,
not for a service like ETC Host, but for the machine itself, it very often makes no sense to configure it. So if it's a hardware chip that you just are monitoring and has no option to upload values into it, you don't have a configurable icon.
So let's go back to my platform. So I think I get many of these unavailable icons.
The red icons are due to the new network address that I just got from the DHCP system because the system expects the same host to be in the same place. Normally in a production environment, you would have fixed IP addresses for that.
So the summary page. Each resource has a summary page, so you can sort of dashboard for that resource. You see the recent measurement values and from the last one that got measured and a little graph on how it developed in the past. You see a list of alerts and how severe they were.
So it's medium, low, or high priority. Some out-of-bound metrics. I'll show that in a minute. Some configuration updates. You see those. So nothing happened here. Our package is uploaded and these are the events. So let's go here for the used swap space.
For each metric, you can have graphs. You have the small graphs and then the large ones like this. And the system is calculating bounds between those metrics normally are measured
or what the default values are. So it takes the last n days of data and computes the bounds. And now when the value is going over or below the bound, it will trigger an out-of-bound exception sort of.
And this is shown because very often you know the active thread count is for your application between 70 and 80. And if this one goes up to 120, you know it's a narrow condition. It's even possible to alert then on this being out-of-bounds
or out-of-bounds by a certain percentage. So this is the default monitor tab. So by default for the monitoring system,
subsystem you implement in the plug-in that you want to monitor your values and then you implement a little bit of code and all the values back. And these get automatically graphed in here. This is relatively generic. We have algorithms to compute the right percentage
so that you don't write a value range. But it's sort of default in those systems. We can also have tables. If you say, well, I rather want to know the exact minimum and maximum values than the graph.
And now we have something in addition to the pure numeric values. These are the so-called traits. Traits are always considered as string values. And when the system is taking them,
it compares them with the previous trait value and if the two are the same, no new record is stored in the database. And the database only stores an updated version when this trait changes. So for example, when operating system update comes in from 10.62 to 10.63, this trait value will change and you will see when it has changed.
About the database size for monitoring data anyway, we are compressing the data. So we have each one hour aggregate, six hour aggregates, and one day aggregate. So we can keep that by default up to a year.
So your database won't explode. You're approaching the raw data and keep the compressed form so you get still a very good overview of what happened in the past without all the huge amount of data. Okay, then we have here a little sub-tab on availability.
So you see when did your resource go up and down and how many failures are up for how many and things like that. It's also per resource. And the last one is the tab called the schedules. On this tab, you specify which of the metrics
that the plugin offers for this specific resource type, for this platform, for example, you want to measure and how often and which interval. If you have 10 platforms, you can either set a default
so that gets applied to when you import a new platform or do that on a complete group of resources. You don't have to go into each one of it, but you can still override on a resource level. Okay, then the inventory tab here.
That's the overview here about what's the name of your resource and then which direct children does it have. That's probably not that much of interest for the platform. One thing that's more interesting is down here
that you can manually add resources that do not get all of this covered. In my case, here on my machine is the Postgres database server because the plugin expects some default values which are just not shared in my machine. But I can still go in, say okay, add a Postgres server
and then on the next page here, you specify connection properties and when you did the right thing, it will just be taken into inventory and all its child resources, which are the databases on the database server
plus all the tables also get pulled in into inventory. So on that, I'm going to show later. So for the moment, operations will be the last subtab. So you have, again, per resource type,
various operations that you can execute. So for example, you process this for a unit machine. The next step is specify when this should start. Either you can execute immediately. This is then triggering an action
on the actual resource, remote resource. So here it's all in the same box, of course, but if I add two boxes, it will reach out on the other box and execute the operation on the other one. We can also specify a different start time and recurrence.
How often do we want to take a roulette and when should it end? So it's really like in Chrome. You can just say, okay, roulette every hour or every day or whatever. Then you click on schedule. Let's do that just once. Click on schedule.
We have completed operations and you can go in. Click on it and here you see the results. It's probably in a different format than what you would expect when you just know the output of ps minus whatever.
But it's still useful and it's just one example of what you can do. When I'm going back here on the summary tab, you also see it listed here, this recent operation. And then there is this timeline in here
where you can also see on a more graphical view what happened with your system. So the scene was down here in this red bar,
this light red bar. Here we did have an operation with the green check mark which means it was successful and when you would get events in, they would show up or alerts would show up in here. So that's actually the Simile timeline project from MIT.
It's very cool when you want to display those timelines. It's really helpful. It's written in Java script so it's sometimes a bit hairy when you supply the wrong data or not exactly in the format that it expected.
Especially when you have those strange scenes like journal loads in your system or time zones which are not US but when you work around that, it's really a cool library. Here in the tree, that's something that we're currently working on.
You can again browse through your resources. Here it's only this one platform that you see. When you want to go to another platform, you have at the moment to go to the, for example here, resources menu. There's an error in the current version that I'm having here in the developer version
and then just select servers or other platforms. When you go on a resource in here, like that one for example, you can also right-click.
No, that doesn't. This one doesn't support right-click. Let me define a different one. Okay, so we are currently working on this tree
and revamping it so it looks like the right-click support is currently disabled. So it should work in the next version that we get out there. So, one other thing that we have, we have this summary page per resource
and we have this dashboard, but often that's not enough. So if you want to know about out-of-bound resource, all about your system or which one is the worst outlier, it's a bit hard to click on each resource and to compare them by hand. So what we also have here are so-called subsystem views
where you have various things like configuration changes, metrics, operations. A view about the subsystem over the whole system. So here is about the suspected metrics, which are these outliers. They are now sorted by the out-of-range factor
and the one which is the worst outlier is just on top so you know on what to concentrate. So it's easy. And here you can also go and for operations, you see all the operations that happened during some time,
something that you can filter or one resource what happens. It's only this one, so no big deal at the moment. This is the first of the two history slides that I was talking about. We started actually in 2006 with the current line of programming
and in early 2008 we released RHQ-1, which was the framework and most of the bits of it, but not the drop-off part, which was still closed source at that time.
Then here in end of 2008, we released RHQ-1-1, JS on, tool on one, JS operations network product, and after that also the drop-off bits. So this one plus that one sort of gave this one. And then we had these two lines of development.
One of the results that came out of that was also the embedded JOMA, which many of you probably have seen as the embedded console in application server 5. And currently, we released RHQ-1.3 and in September last year,
we were finally able to put those JOMA 2.3 plus bits into RHQ-1.4, so it's one unified source line. We released a community release of 1.4 build 0.1. And in this build, we had some issues with people that wanted to upgrade
from previous versions of JOMA to that version because our plugin system considered the 2.3 version plugins as newer than the 1.4 version plugins. So we decided in the process that we are putting some different emphasis
and more emphasis on the whole development and also about just the simple mobility with the version numbers. That's the next version of RHQ will be RHQ-3. And last week, we released the second community version of it, RHQ-3.0 build 2, which has the plugins.
And this is now the mainline development RHQ-3. We don't have a release date yet, but we plan on at least giving out community releases every six weeks to two months.
And it's expected that from RHQ-3, you will also get the next version of Jabos-on, which will probably be Jabos-on-3 as well. So after this history review, I want to give a quick architecture overview.
The central thing that we have here is the RHQ server or a class bomb thereof. So when you want to do load balancing or failover, you can have one or more servers in your data center. It's even possible if you have two data centers to have one in each or two in each
and then have so-called affinity groups that when an agent, come to that in a minute, is talking to one data center or one server in one data center and this server is going down, it will try to talk with the other server in the data center before switching over to the other data center,
which is normally not wanted. So on the server, you have the access for the administrator. It's the GUI, we have the GUI interface, as I have just shown. We have command line interface on it.
That's also in Java and it uses JavaScript as its language in Java. So you can write expressions in JavaScript with complete control structures and everything.
It even has auto-completion for some terms, for resource names and other stuff. So it's quite comfortable and quite powerful. And then we have experimental support for WebDAF so you can mount your only source tree as a WebDAF directory in your explorer
or finder or whatever. The server hosts also the database connection. The default databases for us are Postgres and Oracle. There is some support from H2 database. That's an embedded one, which is basically the successor of what was called hypersonic in the past.
This is mainly used for demoing or testing purposes. It's not for production. And then there is some experimental support for SQL Server or for one version of SQL Server. And the other big component that we have here
is the agent. This dashed line shows the platform. So on each platform that you want to monitor and manage stuff, you need an agent. And this agent gets all the agent plug-ins, and only these agent plug-ins talk to your managed resources.
So in a firewall scenario, you only have to configure the communication between agent and server, but never between server and a target managed resource.
I was talking a lot about resources. Our definition of a resource is everything that can be managed or monitored. I've written a plug-in that monitors a thermometer chip. So it's just a thermometer sensor, and like a transistor, that size depends on the one wire bus.
So here it's only monitoring and not managing. But a resource could also be any process or a thread count or a memory setting or anything like that. And then each resource has a corresponding resource type.
A resource type is, for example, Linux or Mac OS. It's a JBoss AS. It's Tomcat. It's an individual data source. It's a database table, things like that.
And the last thing which we have is the resource category. This sort of shows the place in the resource hierarchy you have seen before. Platform, which is the machine. Then the next level is the server, which could be, for example, a JBoss application server. It could be a Tomcat.
This whole thing is sort of recursive. Server can host the server. JBoss AS has this embedded Tomcat server, so that's recursive. And then usually below a server you have the services, which is a data source in JBoss AS, which is the best application in Tomcat.
There's no hard rule on when to use a server or when to use a service. It's usually like when you have a subsystem or a complete process, you model it as a server. And when it's individual parts of the subsystem, you model it as a service.
But it's really like as you feel it, where it's just Facebook. Okay, that's this term omega-2. And this is again showing this hierarchy with who hosts what. There are even platform services that are not hanging on a server,
but directly on the platform like network interfaces. Okay, then we have those subsystems. I have shown that already in the UI walkthrough, so I'm not going to mention it a lot. Again, it depends on what your plugin defines,
which of the subsystems is available for a specific resource type. Usually you want to do monitoring. Availability is technically also a known subsystem, but it's your fault to monitor it. So you always have some inventory,
but many resources just don't have any connection properties, no nothing, so you don't need to implement anything in there. So I want to talk a bit about the sensibility of the whole thing. We have now perspectives.
You can write server-side plugins that are running in the server that extend the server functionality. One of the risks is the perspectives, which give you a new UI look or new views into the UI.
And then we have the alert plugins that are alert senders. And then you can write for the agent those agent plugins. It only goes through all of those now. Perspectives, that's like UI plugins, so it's possible to write a complete new UI scheme
that's hosted on a tab like this monitor inventory that you have seen, just next to that in a new arm tab. This can be written in Java, just a normal war file, or it is or will be possible to even host a complete external application
that's written in PHP, but that gets some information when it's called, and that can even also link back into the main UI or core UI. We have various extension points, so it's possible to change entries in the top-level menu. You can add new tabs, and you can write new pages
or exchange existing pages. Then the agent plugins, that's basically the functionality, those guys that talk to the managed resource, that work with the managed resource, only those talk to the resource, that's important again.
So it's basically metadata plus some Java code. The metadata defines the capabilities of your plugin, so when you say, I want to monitor those two, three, four values, only those two, three values will be shown in the GUI in the schedules tab or the monitoring tab,
no matter how many data the plugin would provide otherwise. The metadata also wires the Java classes together. The plugin can auto-discover resources, so it's possible when, as I said, when a new resource of that type is coming up,
that it gets automatically added to the inventory. And there's a generator available that can help you with writing a plugin. There is a big list of plugins available right now, many of those at RHQ Project in the Git repo,
but also from third parties. And I've written a script plugin that can even defer the measurement taking to some scripts in JRuby or JavaScript, so many administrators don't like writing Java code, but they know scripting languages like Ruby well enough,
so even that's possible. Here are finally the three boxes. So you have the plugin descriptor, you need to write that, that's a bit of XML. You have to write discovery class, that's only to implement one message that the shortest version just sort of returns its input.
And then the component class, that defines all the facets for all the subsystems that you want to implement, and yeah. So this is a quick run of the plugin generator.
It's a standalone Java archive. It asks a few questions here, do you want platform server service a huge of your resource tree from that plugin? Where should it live in the package hierarchy? Where should it live in the file system? So which are the class names?
And now what subsystem do you want to support? Do you want to support events? Do you want to support monitoring, etc., etc.? And when all of that is done, it will write out a pom file from the formation and a skeleton plugin descriptor with a few to-do tags in there, and also skeleton Java classes
that are fully stucked out for all the subsystems that you want to support. So you can directly compile it and deploy it. It won't do much, of course, but it's already made a plugin. I have created a video, which I hope will be online soon,
about how to do that. There are also a lot of online articles out now on how to write a plugin, so there should be a lot of resources. And of course, that's the source code of the existing plugins. That's just a list of available ancient plugins.
I don't want to go through that in detail, this list is not exhausted, so I think the source is the git repo, to get my source of knowledge. But there is, you see, big support for just JBoss software, JBoss LS, AS5 support, JBoss cache.
We have an SVP trap key, so other devices like Lutos can send traps to the system, which can then incorporate into the event subsystem. We have a generic JMX server here, which allows you to monitor any Java 5 resource.
I've written a blog post in the past on how to monitor your Eclipse IDE with the help of this JMX plugin. So even that's possible. And then, outside of our domain, there is InfiniiSpan for the successor of JBoss cache.
Monitoring, there is for Mobisense, for various parts of Mobisense, it supports JBoss ESB. My proctor just told me that they have, for their good stuff, some support. And I'm sure there are more plugins out there that I don't know about.
So, after the ancient plugins and the managed resource, monitor resource, I'm coming back to the server-side plugins about how to expand your server. Those server-side plugins live in the server, as the name says, and they basically have access to all server-side methods.
So it's possible for you to write a plugin that's, for example, doing reports on all your resources, or when in inventory you could write a report about how many Windows 2003 servers do you have in inventory, or things like that.
We will import, or include, a real reporting engine sometime in the future, hopefully. But you could use it for those purposes. Again, it's some metadata plus Java code, and there are some different kinds of server-side plugins.
All of them are different in version that expand a base of server plugin XML format. One of the most used, from my side, is the alert senders that I'm coming to.
All of those plugins are content sources. We have, for example, a JBoss patch feed, where customers can get updates to their JBoss AS servers, and this is also a server-side plugin that's contacting the customer support portal, pulling a feed with the changes,
and the customer can then say in JBoss ON, okay, apply it, please apply those changes to my application servers. It's also supported by the server-side plugin. The alert plugins are a specialized form of server-side plugins. Basically, what you have to do is, again,
write a little bit of XML, and then implement this one method, alert sender.send, and the argument that you get, alert, that just got fired, and then you have to react on it. I will show an example on the next slide. Nice thing is,
we have preferences in the UI for the whole plugin, so it's possible if you have, let's say, an IRC send or plugin that you set as the preference which IRC server do you want to contact, and perhaps some credentials on how to contact that,
and then a little specific will be, for example, the channel this alert should go to. I'll show that in the UI in a few minutes. And these get just injected. You don't have to do any work to get at those values. They are just there for free.
Port. The UI is just driven by the metadata. We have a configuration system, and this just renders the input fields for all of that, which is powerful enough in many, many cases, but sometimes it's not enough. For example, when you want to do extensive searches or list picker boxes,
then it's still possible to write a custom UI. You write an XHTML snippet, a facelet, plus a backend in Java, package all of that together, and then you have a custom UI. Also here we have a script language alert sender
where you can define those methods or the implementing method in JRuby or in Ruby and have this delivered by a Ruby instead of having to write Java code. So it's, again, appealing, I guess, to administrators.
This is a list of available alert sender plugins, subjects and roles. Subjects are just the user within the RHQ server, and roles are things like JBoss operators or system operators or business people or something like that,
and they will just send emails to those. Then we have Mobisense support. So the plugin is talking to a Mobisense server, which is then initiating a voice call to you and reads the error message on the phone. I did have in the past a version
where you were even able to do touch tones to answer back to the server, for example, to reboot a resource. This is currently not available in this alert sender plugin version. I still need to look for a good idea on how to integrate it,
so you are free to help. Short message via developer.com. They have a REST interface where you can talk REST to the endpoint to send short messages. Then microblog. That's Twitter or StardustNet feeds.
That's interesting, I guess, when you deploy a StardustNet server within your enterprise, and people can just have their Twitter client talk to that StardustNet server and get the updates from there as well. Email is just email sending to anyone who can then send
SNMP traps and also talk to IRC. I have a bot on IRC that's reporting alerts. Again, the script language. One thing that we did have an older version but which currently vanished in the alert plugin version
is the operation sender that you can trigger an operation like we have seen on an arbitrary resource in your inventory. It will be possible if you find out that your data source is running at full connections for the whole time,
even if you only expect five open connections at a time. You can, for example, re-bridge the whole application server. You think that's a good idea to fix this problem. Okay, that's a quick alert plugin example. That's the wiring. You write this alert plugin descriptor.
It's a bit short up there because of all these XML namespace headers that you have to implement, which I don't want to show here. So basically you have to define a name. And you can define a package that's just a Java package where your code lives in and you don't have to specify it here
on the plugin class later on. Here in this block, the server plugin configuration, you specify the preferences. It's global for all instances of this alert sender. And then down here, alert configuration, these are the properties that are specific for one
instantiation of the sender. I will show it in a minute. We need to provide a short name of the sender which gets shown when you want to define a new alert notification. You select from a list of senders and that's the short name that you will see.
The Java code for the whole thing here is again this package, public class URL sender. We have that guy. We have this message sent. Here you just define the Java code. I'm getting my data from preferences, so the preference value is there for you. You say get simple.
Simple value. Host name is the one we defined here a matter later. And this second argument is the default value. If the operator or the user did not enter anything, you just specify default value. The same here, alert parameters,
that's that part. So the data is just there. You have only this one message and you call to get it. Here I'm opening an HTTP URL connection to that host and port getting null up the screen and writing my messages with simplify, of course. And at the end,
when you're done, you need to return a sender result object. The sender result object expects that you specify if it was successful or a failure and a message, and then there's a third state not shown on this slide which is default email which means
this plugin just computed a list of email addresses that should be sent off but is not able to determine if sending will be successful later because that's only done after all the email addresses have been collected. So this plugin kind of knows it.
And luckily it does not have to implement this sending because this is just available for free. Okay. It's close to the end. So, okay, you see
here that's in this plugin that part I have just my alert notifications. I have this MobySense sender. I can show that outside later on if anyone wants to see it. Here that's the alert configuration of how it was done here on the XML snippet.
So that's just a default rendering and here you add your value. For this Roles plugin we have this custom UI you see it's not as nice as the provided one but this is a little bit more complex with those pick-ups where you can put stuff
from left to right and it disappears on the left list and gets to the right one so this is not complex. So you can just write it as you want and then the last thing system configuration plugins so here is a list of agent and server-side plugins
let's just go into one so alert MobySense 1 configure so here that's this box is this global configuration section that was up in the XML snippets again render for you
so some URLs for you RHQproject.org it has pointers to all of the others of course. Then my blog I'm often writing about RHQ and how to extend it and how to do things so if you are interested it's something you might want to follow
and then you have j this feed RSS feed aggregator so all of our feeds including mine about RHQ will be fed into that one so thanks for listening and I will take questions
but before that I have one more thing Google Summer of Code is coming we are planning to participate in that if you are interested in that contact me please