During the BarCampESM I gave a quick talk about the idea of an Open Agent. Today in the network domain there is a standard SNMP agent on pretty much every device. When you move up to the server and application teir things get a little more sketchy. Its it possible to get a standardized agent at the server teir? Check out the deck I presented under the documents tab.
-EAD
Hi Erik.
What do you think about Sun's Common Agent Container technology? https://common-agent-container.dev.java.net/
Greg
I'm not a big fan of using java as the base language for an agent. Hyperic does this and had to write SIGAR C layer so that they could access system calls for different OSes.
as a general rule I agree that java for an agent isn't optimal, but I wonder if the implementation in CAC overcomes some of the historical problems, like being bloated, etc.
I asked the guy at Sun that owns CAC to wiegh in on this discussion
Hi,
I'm the lead of the Common Agent Container open-source project. The Common Agent Container (CAC) provides a management daemon designed for JMX and JDMK-based management functionality. CAC accepts modules that extend its existing JMX/JDMK agent with new managed objects, connectors, or more generally, new functionality.
One of the major differentiators for the CAC project is the multi-model, multi-protocol nature of the daemon, its tie-in to platform security models,
and its ability to run using Java SE for full feature-set or Java ME for small footprint.
The Common Agent Container open-source project, licensed under GPLv3 with classpath exception, is:
A cross-platform Java-based management daemon
Solaris, Linux, HPUX, Windows; Java SE, Java ME
supporting standard management models and protocols
JMX, SNMPv1,v2,v3, RMI, web-services
and with integrated pluggable security.
TLS, PAM, RBAC, SBD, auditing
It is a dynamically extensible container
Modules can be deployed, undeployed and managed at runtime
which is simple to develop for and to use.
Full NetBeans integration for Common Agent Container module developers
The easy learning curve of JMX
The Common Agent Container is used in a wide range of products from Sun Microsystems
Integrated in Solaris 10, xVM Ops Center, JES MF, DS, PS, N1 System Mgr, Storage Portal, Solaris Basic Registration, ...
Also we have ws-man (JSR 262) support and have developed CIM and WS-CIM but that's not yet released in open-source.
CAC's weakness is also its strength - it's not designed as a dedicated CIM-OM or as a dedicated SNMP agent, it's very flexible and allows the same instrumentation written against JMX APIs to be leveraged by different protocol adaptors, sometimes with a thin mediation layer, sometimes directly as-is.
If you have more detailed info, check out the web-site, and feel free to ask questions!
I think I may be missing some background discussions on this. What are the shortcomings of existing solutions.. For example the Hyperic agent and the SIGAR layer you mention, what does it not do?
Same question about the Sun agent that is also mentioned. Where do they fall short to require a new agent?
I'll give you my perspective from NetDirector - and it isn't so much that these agents lack anything (or not at least from my pov) but rather how they do what they do
we actually built the first netdirector agent in C so it would be lightweight and fast. for us, since we always expected netdirector to be deployed in medium to large environments, we were sensitive to the resources that the agent would consume on the managed servers.
But, we found that C really fell down in terms of portability. So, when we wanted to support non-Linux OSes (Solaris in particular), if we stayed with C, we would have basically had to rewrite the whole agent. And from an ongoing mainenance perspective, it seemed really untenable to have a unique agent code for each OS.
So, we decided to go with something higher level. We looked at Java, but decided against it because, one, it wasn't open source at the time, and so we worried how much we could customize it, and 2, it was too resource intensive. So we went with Python, which was a good compromise - a little bigger than the C agent, but not much and all the portability we wanted. It's worked really well, and we actually have it running on WIndows in the lab, which is cool.
Fast forward to today. Java is open source. I am stil a little concerned about its "fatness," but the benefit of not having to maintain our own agent, and the prospect of total ubiquity if Java was selected as (and suitable for) a common agent could persuade me.
I am a little surprised about Erik's comment regarding Cigar being needed in order for Hyperic's agent to support different OSes, since I was under the impression that Java was portable...So, I'm interested in learning more about this.
Nothing is portable when you get to the machine specific data. SIGAR is written in C to work with each platform, and it provides Java binding. The important point is that this is a lot of work and it is already written. The differences of each platform is abstracted and there is a single API to access all the system information.
When it comes to making the kind of low-level system calls necessary for systems management tasks, Java is far from ideal. Honestly, I don't think any language is going to be a panacea here. That said, I'm wondering if anyone has consider using C along with a high portable runtime library like APR? You would still need to write OS-specific portions of the code, but appropriate abstractions should make that not too unmanageable.
When I worked at BMC, we wrote the agent in Java and it was just fine. Java brings a huge amount of cross-platform portability to make it worth it, besides that, "everyone" knows Java.
Of course, we had to write adaptors in C/C++ for accessing things like WMI, perfmon, and other interfaces that we couldn't access in Java or break down to plain-text/XML (which could then be access in Java).
In reading this thread, I wrote up t[he idea of getting BMC to open source it's agent|http://www.redmonk.com/cote/2008/01/26/of-open-agents-and-wheel-reinvention-the- bmc-performance-manager-agent/]. Of course, as pointed out, Sun seems to be jumping the gun here with an agent. Exactly what an "agent" would be is sort of up in the air, but I'm sure both of those agents and the many other out there have things to offer.
To me, it seems like some third party that writes both spec and code would be where you'd want this effort to go on, something like Eclipse. Standards bodies on their own have a terrible track record of helping the entire IT management community, while orginizations that just code tend to be isolated and have the same success at helping the entire industry. Pulling up the Eclipse example, again, that another method that worked out and it working well to service the commiditization needs of the larger community - namely open sourcing the IDE and tools framework.
All,
I tossed together a quick spreadsheet that I thought might serve as a starting point for evaluating some of the options.
You can find it here: http://spreadsheets.google.com/ccc?key=pKdnOssmUJpxbsu_Xw3X-Ng
I like the spread sheet that Greg put together. I especially like the func project due to my python bias.
I think java has a bad rap in the agent world for being large and generally being written to shield you from the OS which is kind of what an agent needs to do. Also sys admins don't generally do java, they tend to like perl... Of course how to build the agent shell is really the easy part of this problem. The hard part is getting it everywere (ie shipped with the OS) and adding the "plugins" which actually make it do something.
As far as standards bodies go there is the DMTF which I derided in my talk. The CIMOM (open pegusus and OpenWBEM) which is the agent shell has some penatration. There is a lack of plugins though. I like the idea of BMC open sourcing the agent since it would have pretty good penatration already at large enterprises. Of course transitioning mature propriatary code to OSS has been quite tricky.
To Cote's piont about a third party standardization and coding it would be nice if the OMC could be that organization. Of course the companies in it are all young wiper snappers and it will be had for them to dedicate the resources to such an effort. I guess I would go back to a though from my other thread about net-snmp. If we could get the big platform players to contribute resouces to porting the agent there would be greater potential of success. Of course for them its not about resources as much as control of their platforms and the tools used to manage them.
-EAD
/me stands up and waves.
Hi. I'm one of the Func guys.
If any of you are interested in Func, I'd invite you to stop by https://fedorahosted.org/func and join the mailing list and IRC channel. Feel free to bring up whatever topics you like, and we're there for Q&A too.
I was on the OMC lists a while back -- and yes, I definitely agree that there is potential in this sort of thing and would love to see it happen. I too originally came from a Java/CIM world, have experience with both, and believe that (especially for a certain class of admins and FOSS developers), alternatives are great to have and are in some ways easier to build a community of admin/developers around.
If you have questions, or have ideas on how to move this forward, please let us know... preferably on the list, as I may forget to check back here -- though I'll try to remember ![]()
One of the obvious concerns are "do I have to use Python?" and/or Fedora/RHEL... thankfully, no. We do have some guys who have gotten Func running on Debian, SuSE, and FreeBSD... Windows is presumably doable... and someone has written a small Perl module that allows for calling Func minions. As those ports evolve, keeping those in tree, and maintained by the people who are interested in them is important... Minion modules do have to be written in Python presently, though there's nothing saying they can't in turn call other plugins and so forth... for instance NagIOS plugins are just stdin/stdout based and there's a simple module there already (too simple perhaps) for being able to hook into those.
As time goes on, I see the modules evolving and increasing in number... what's there now is really just a start and it's all pretty much changeable. Patches and other involvement is absolutely welcome. We're really concerned about making a framework that is extremely easy to contribute to, easy to understand, but also offers a secure communications channel that allows things to be audited and controlled in useful ways -- being able to schedule asychronous jobs, address servers in globs ("mailservers*.example.com") and so forth. If there are any features that seem to be missing (for instance, we don't have minion 2 minion communication implemented yet), please bring it up on the list or maybe contribute a patch. I think there are a lot of different places we could take this.
I look forward to seeing what can happen with this.