<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>A Day At The Races &#187; monitoring</title>
	<atom:link href="http://blog.jetztgrad.net/category/monitoring/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jetztgrad.net</link>
	<description>Programming was my first love, and it will be my last.</description>
	<lastBuildDate>Thu, 05 May 2011 08:21:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Dissecting an Amazon Elastic Beanstalk instance</title>
		<link>http://blog.jetztgrad.net/2011/01/dissecting-an-amazon-elastic-beanstalk-instance/</link>
		<comments>http://blog.jetztgrad.net/2011/01/dissecting-an-amazon-elastic-beanstalk-instance/#comments</comments>
		<pubDate>Sat, 22 Jan 2011 13:15:41 +0000</pubDate>
		<dc:creator>Wolfgang Schell</dc:creator>
				<category><![CDATA[amazon]]></category>
		<category><![CDATA[beanstalk]]></category>
		<category><![CDATA[ec2]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[infrastructure]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[osgi]]></category>
		<category><![CDATA[s3]]></category>

		<guid isPermaLink="false">http://blog.jetztgrad.net/?p=295</guid>
		<description><![CDATA[Amazon Elastic Beanstalk provides a PaaS similar to Google AppEngine, bundling many of their existing offerings such as Elastic Compute Cloud (EC2), Simple Storage Service (S3), Simple Notification Service (SNS), Elastic Load Balancing, Auto Scaling, and monitoring using Cloud Watch into a simple to use service. Additionally, other Amazon services such as SimpleDB, Relational Database [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://aws.amazon.com/elasticbeanstalk/">Amazon Elastic Beanstalk</a> provides a PaaS similar to <a href="http://code.google.com/appengine/">Google AppEngine</a>, bundling many of their existing offerings such as <a href="http://aws.amazon.com/de/ec2/">Elastic Compute Cloud</a> (EC2), <a href="http://aws.amazon.com/de/s3/">Simple Storage Service</a> (S3), <a href="http://aws.amazon.com/de/sns/">Simple Notification Service</a> (SNS), <a href="http://aws.amazon.com/de/elasticloadbalancing/">Elastic Load Balancing</a>, <a href="http://aws.amazon.com/autoscaling/">Auto Scaling</a>, and monitoring using <a href="http://aws.amazon.com/de/cloudwatch/">Cloud Watch</a> into a simple to use service. Additionally, other <a href="http://aws.amazon.com/">Amazon services</a> such as <a href="http://aws.amazon.com/de/simpledb/">SimpleDB</a>, <a href="http://aws.amazon.com/de/rds/">Relational Database Service</a> (RDS), <a href="http://aws.amazon.com/de/sqs/">Simple Queue Service</a> (SQS) may be used as well.</p>
<p>Currently, Elastic Beanstalk provides a Java-based application container with <a href="http://tomcat.apache.org/">Apache Tomcat</a> as the work horse. All you have to do is to deploy a standard <a href="http://en.wikipedia.org/wiki/WAR_(Sun_file_format)">Java WAR file</a> containing your web application.</p>
<p>Simply create a Java web application with <a href="http://static.springsource.org/spring/docs/3.0.x/reference/mvc.html">Spring MVC</a>, <a href="http://grails.org/">Grails</a>, <a href="http://eclipsesource.com/blogs/2011/01/20/amazon-aws-beanstalk-and-eclipse-equinox/">OSGi</a>, <a href="http://eclipsesource.com/blogs/2011/01/20/amazon-aws-beanstalk-and-eclipse-equinox/">Eclipse RAP</a>, or any other of the numerous Java web frameworks and upload it using the <a href="https://console.aws.amazon.com/elasticbeanstalk/home">AWS web console</a>.</p>
<p>Additional containers for other platforms such as Ruby, Python or PHP may follow later, but as Tomcat hosts standard Java WAR files, anything with a Java implementation may be run. Ruby apps based on <a href="http://rubyonrails.org/">Rails</a> or <a href="http://rack.rubyforge.org/">Rack</a> using <a href="http://caldersphere.rubyforge.org/warbler/">Warbler</a> and <a href="http://jruby.org/">JRuby</a>, Python apps using <a href="http://www.jython.org/">Jython</a>, even PHP apps can be <a href="http://cameronstokes.com/2011/01/20/php-on-aws-elastic-beanstalk/">made to run</a> on Beanstalk.  </p>
<p>In this blog post, I&#8217;ll dive into the inner workings of a Beanstalk server instance and poke around its internals. I invite you to come along for the ride.</p>
<p><strong>Accessing your instance</strong><br />
The first step in dissecting a Beanstalk instance is <a href="http://docs.amazonwebservices.com/elasticbeanstalk/latest/ug/index.html?using-features.ec2connect.html">getting access via SSH</a>.<br />
In order to acces your running instance(s), you first need to configure the SSH key pair to be used:<br />
<div id="attachment_297" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.jetztgrad.net/wp-content/uploads/2011/01/config-server.png"><img src="http://blog.jetztgrad.net/wp-content/uploads/2011/01/config-server-300x204.png" alt="Configuration dialog in Elastic Beanstalk web console" title="config-server" width="300" height="204" class="size-medium wp-image-297" /></a><p class="wp-caption-text">Configuration dialog in Elastic Beanstalk web console</p></div></p>
<p>Enter the name of a key pair as configured in your <a href="https://console.aws.amazon.com/ec2/home#s=KeyPairs">EC2 web console</a>. See the <a href="http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?using-credentials.html">EC2 guide</a> and the description in the <a href="http://docs.amazonwebservices.com/elasticbeanstalk/latest/ug/index.html?using-features.managing.ec2.html">Elastic Beanstalk guide</a> for details on creating and configuring a key pair.</p>
<p>Setting the key pair requires a restart of your Beanstalk environment, which may take a couple of minutes.</p>
<p>Finally <a href="http://docs.amazonwebservices.com/elasticbeanstalk/latest/ug/index.html?using-features.ec2connect.html">look up your instance id</a> and get the instance&#8217;s hostname. Connecting to the server is now as simple as this:</p>
<p><code>ssh -i .ec2/mykeypair.pem ec2-user@ec2-184-72-134-2.compute-1.amazonaws.com</code></p>
<p>Please note, that you need to connect as user <code>ec2-user</code>, <code>root</code> access can be reached using the command</p>
<p><code>sudo su -</code></p>
<p><strong>Getting around your instance</strong><br />
The first steps are to collect some interessting facts. The instance uses a <a href="http://aws.amazon.com/amazon-linux-ami/">Amazon Linux AMI</a> (release 2010.11.1 (beta), <a href="https://gist.github.com/791135">README</a>). The AMI id for the ElasticBeanstalk-Tomcat6-32bit is <code>ami-7609f81f</code>, the kernel id is <code>aki-407d9529</code>. The instance is EBS-based and there is no ephemeral storage. Currently, Beanstalk is only available in the US East zone.</p>
<p><strong>Software</strong><br />
The <a href="https://gist.github.com/791133">process list</a> reveals: along with <a href="http://tomcat.apache.org/">Apache Tomcat</a>, Beanstalk uses the venerable <a href="http://httpd.apache.org/">Apache Web Server</a>. Additional software includes <a href="https://github.com/arya/bluepill">Bluepill</a> for basic process monitoring, and Amazons own HostManager (see below), which is run within a <a href="http://code.macournoyer.com/thin/">Thin</a> web server.</p>
<p><strong>Network setup</strong><br />
Elastic Beanstalk scales EC2 instances as needed. Therefore the first target is a load balancer provided by <a href="http://aws.amazon.com/de/elasticloadbalancing/">Elastic Load Balancing</a>. Each instance runs Apache as the front end on port <code>80</code>, with web request being reverse proxied into Tomcat on port <code>8080</code>. Requests for URI <code>/_hostmanager</code> are forwarded to HostManager on port <code>8999</code>.</p>
<p>CloudWatch performs health checks by periodically requesting the root page (URI <code>/</code>) of your application. Both health check URI and frequency are configurable. If an instance is no longer available or the load changes, CloudWatch starts or stops instances. </p>
<p><img src="http://media.amazonwebservices.com/blog/cb_env_1.png" alt="Application stack" /><br />
[Image from <a href="http://aws.typepad.com/aws/2011/01/aws-beanstalk-concepts.html">AWS Elastic Beanstalk Concepts</a> blog post]</p>
<p><strong>HostManager</strong><br />
Local instance management is performed by Amazons HostManager. HostManager is a Ruby application based on Rack and running in a <a href="http://code.macournoyer.com/thin/">Thin</a> server on port 8999. It receives requests on URI <code>/_hostmanager</code>.</p>
<p>Some examples from the access log:</p>
<p><code>72.21.217.96 (72.21.217.96) - - [21/Jan/2011:22:00:45 +0000] "POST /_hostmanager/tasks HTTP/1.1" 200 368 "-" "AWS ElasticBeanstalk Health Check/1.0"<br />
10.223.61.43 (10.223.61.43) - - [21/Jan/2011:22:01:05 +0000] "GET /_hostmanager/healthcheck HTTP/1.1" 200 90 "-" "ELB-HealthChecker/1.0"<br />
10.122.19.154 (10.122.19.154) - - [21/Jan/2011:22:01:11 +0000] "GET /_hostmanager/healthcheck HTTP/1.1" 200 90 "-" "ELB-HealthChecker/1.0"<br />
10.223.61.43 (10.223.61.43) - - [21/Jan/2011:22:01:36 +0000] "GET /_hostmanager/healthcheck HTTP/1.1" 200 90 "-" "ELB-HealthChecker/1.0"<br />
10.122.19.154 (10.122.19.154) - - [21/Jan/2011:22:01:42 +0000] "GET /_hostmanager/healthcheck HTTP/1.1" 200 90 "-" "ELB-HealthChecker/1.0"<br />
72.21.217.96 (72.21.217.96) - - [21/Jan/2011:22:01:46 +0000] "POST /_hostmanager/tasks HTTP/1.1" 200 368 "-" "AWS ElasticBeanstalk Health Check/1.0"<br />
10.223.61.43 (10.223.61.43) - - [21/Jan/2011:22:02:07 +0000] "GET /_hostmanager/healthcheck HTTP/1.1" 200 90 "-" "ELB-HealthChecker/1.0"<br />
10.122.19.154 (10.122.19.154) - - [21/Jan/2011:22:02:13 +0000] "GET /_hostmanager/healthcheck HTTP/1.1" 200 90 "-" "ELB-HealthChecker/1.0"<br />
10.223.61.43 (10.223.61.43) - - [21/Jan/2011:22:02:38 +0000] "GET /_hostmanager/healthcheck HTTP/1.1" 200 90 "-" "ELB-HealthChecker/1.0"<br />
10.122.19.154 (10.122.19.154) - - [21/Jan/2011:22:02:44 +0000] "GET /_hostmanager/healthcheck HTTP/1.1" 200 90 "-" "ELB-HealthChecker/1.0"<br />
72.21.217.96 (72.21.217.96) - - [21/Jan/2011:22:02:47 +0000] "POST /_hostmanager/tasks HTTP/1.1" 200 368 "-" "AWS ElasticBeanstalk Health Check/1.0"<br />
</code></p>
<p><strong>Files</strong><br />
HostManager is installed in <code>/opt/elasticbeanstalk/srv/hostmanager</code>. A file list can be found <a href="https://gist.github.com/791104">here</a>. <code>/opt/elasticbeanstalk/lib</code> also contains a full Ruby 1.9.1 installation.</p>
<p>Some log files can be found at <code>/opt/elasticbeanstalk/var/</code>:</p>
<p><code>/opt/elasticbeanstalk<br />
/opt/elasticbeanstalk/var<br />
/opt/elasticbeanstalk/var/state<br />
/opt/elasticbeanstalk/var/state/hostmanager.pid<br />
/opt/elasticbeanstalk/var/state/healthcheck<br />
/opt/elasticbeanstalk/var/tmp<br />
/opt/elasticbeanstalk/var/log<br />
/opt/elasticbeanstalk/var/log/LogDirectoryMonitor.log<br />
/opt/elasticbeanstalk/var/log/DaemonManager.log<br />
/opt/elasticbeanstalk/var/log/bluepill.log<br />
/opt/elasticbeanstalk/var/log/hostmanager.log<br />
/opt/elasticbeanstalk/var/log/ApplicationHealthcheck.log<br />
/opt/elasticbeanstalk/var/log/CatalinaLogMonitor.log<br />
</code></p>
<p><strong>Final words</strong><br />
That&#8217;s all for today&#8217;s blog post. Further posts will take a closer look at HostManager and deployment including the application setup sequence.</p>
<p>I&#8217;m looking forward to any feedback and additional information.</p>
<p>Maybe we can even hack HostManager to accept other application containers, e.g. for OSGi applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jetztgrad.net/2011/01/dissecting-an-amazon-elastic-beanstalk-instance/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>(Temporarily) pulling the plug on Grails Monitor Plugin</title>
		<link>http://blog.jetztgrad.net/2008/02/temporarily-pulling-the-plug-on-grails-monitor-plugin/</link>
		<comments>http://blog.jetztgrad.net/2008/02/temporarily-pulling-the-plug-on-grails-monitor-plugin/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 13:04:00 +0000</pubDate>
		<dc:creator>Wolfgang Schell</dc:creator>
				<category><![CDATA[grails]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://blog.jetztgrad.net/?p=7</guid>
		<description><![CDATA[I&#8217;m terribly sorry, but I have to (at least temporarily) pull the plug on Monitor Plugin due to possible conflicts with my employer. In my professional live I&#8217;m working on high availability and monitoring software. When I showed the plugin to my employer,he asked me to suspend any activities regarding the plugin, until they decide [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m terribly sorry, but I have to (at least temporarily) pull the plug on Monitor Plugin due to possible conflicts with my employer.</p>
<p>In my professional live I&#8217;m working on high availability and monitoring software. When I showed the plugin to my employer,<br />he asked me to suspend any activities regarding the plugin, until they decide whether this conflicts with our products.</p>
<p>I hope I will be able to continue with the monitor plugin, but until this issue is resolved, I have removed both sources and<br />downloads. </p>
<p>Regards,</p>
<p>Wolfgang</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jetztgrad.net/2008/02/temporarily-pulling-the-plug-on-grails-monitor-plugin/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Grails Monitor plugin 0.1 released</title>
		<link>http://blog.jetztgrad.net/2008/02/grails-monitor-plugin-0-1-released/</link>
		<comments>http://blog.jetztgrad.net/2008/02/grails-monitor-plugin-0-1-released/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 01:25:00 +0000</pubDate>
		<dc:creator>Wolfgang Schell</dc:creator>
				<category><![CDATA[grails]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[release]]></category>

		<guid isPermaLink="false">http://blog.jetztgrad.net/?p=6</guid>
		<description><![CDATA[Just in time for the upcoming 2008 Groovy/Grails Experience, I released my Grails Monitor plugin in version 0.1 (Apache License). It&#8217;s basically a preview version, but for anybody who was dying to get his or her hands on it, the Grails wiki has all the details on how to install and use the Monitor plugin. [...]]]></description>
			<content:encoded><![CDATA[<p>Just in time for the upcoming 2008 <a href="http://groovygrails.com/gg/2gexperience">Groovy/Grails Experience</a>, I released my Grails Monitor plugin in version 0.1 (Apache License).</p>
<p>It&#8217;s basically a preview version, but for anybody who was dying to get his or her hands on it, the <a href="http://docs.codehaus.org/display/GRAILS/Monitor+plugin">Grails wiki</a> has all the details on how to install and use the Monitor plugin. For an introduction, see my <a href="/2008/02/introducing-grails-monitor-plugin.html">previous post</a>.</p>
<p>Installation is still a little clumsy as you have to jump through a few hoops because some patches to Grails and the Quartz plugin are needed in order to get the monitor plugin installed and running.</p>
<p>Lots of features are still missing, but for a first version it&#8217;s not too bad. I&#8217;m open to suggestions, criticism and usability reports. Of course, patches are most welcome <img src='http://blog.jetztgrad.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Happy monitoring,</p>
<p>Wolfgang</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jetztgrad.net/2008/02/grails-monitor-plugin-0-1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing the Grails Monitor Plugin</title>
		<link>http://blog.jetztgrad.net/2008/02/introducing-the-grails-monitor-plugin/</link>
		<comments>http://blog.jetztgrad.net/2008/02/introducing-the-grails-monitor-plugin/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 01:15:00 +0000</pubDate>
		<dc:creator>Wolfgang Schell</dc:creator>
				<category><![CDATA[grails]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://blog.jetztgrad.net/?p=5</guid>
		<description><![CDATA[Grails is a fantastic web framework based on Groovy, which brings the convention-over-configuration paradigm pioneered by Ruby on Rails to the Java world. There is currently a lot of buzz around Grails and so far I had a lot of fun working with the framework. One aspect of Grails is easy extensibility using plugins. There [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://grails.org/">Grails</a> is a fantastic web framework based on <a href="http://groovy.codehaus.org/">Groovy</a>, which brings the convention-over-configuration paradigm pioneered by <a href="http://www.rubyonrails.org/">Ruby on Rails</a> to the Java world. There is currently a lot of <a href="http://groovyblogs.org/">buzz</a> around Grails and so far I had a lot of fun working with the framework.</p>
<p>One aspect of Grails is easy extensibility using plugins. There are already some <a href="http://grails.org/Plugins">plugins</a>, which cover a lot of functionality. I have been working on a plugin of my own, a generic monitoring plugin, which will be released shortly under a Apache License.</p>
<p>The monitoring plugin provides pre-defined monitors for many aspects of a web application. Additionally it is really easy to define your own monitors to track usage of application-specific metrics.</p>
<p>The plugin is based around <a href="https://rrd4j.dev.java.net/">rr4j</a>, which is a Java port of the well-known <a href="http://rrdtool.org/">RRDTool</a> and uses its data storage and graphing engine. It requires the <a href="http://grails.org/Quartz+plugin">Quartz Plugin</a> (with my patches for <a href="http://jira.codehaus.org/browse/GRAILSPLUGINS-190">GRAILSPLUGINS-190</a> and <a href="http://jira.codehaus.org/browse/GRAILSPLUGINS-213">GRAILSPLUGINS-213</a>) and Java 1.5 or greater.</p>
<p><span style="font-weight: bold;">So, what does it look like?</span> Some Screenshots (click for bigger image):</p>
<div style="text-align: center;">The monitor view showing the System group:</div>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blogfiles.jimone.org/grails-monitor/system.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://blogfiles.jimone.org/grails-monitor/system.png" alt="" border="0" /></a>
<div style="text-align: center;">The Web group with the Requests graphs:</div>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blogfiles.jimone.org/grails-monitor/web-requests.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://blogfiles.jimone.org/grails-monitor/web-requests.png" alt="" border="0" /></a>
<div style="text-align: center;">The Web group with the UserAgent graphs:</div>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blogfiles.jimone.org/grails-monitor/web-useragent.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://blogfiles.jimone.org/grails-monitor/web-useragent.png" alt="" border="0" /></a></p>
<p><span style="font-weight: bold;">So, how do I define a monitor of my own?</span> Following the Grails philosophy of convention over configuration, the monitor plugin defines its own artefact type: Monitor.</p>
<p>Creating an application-specific monitor involves defining a class ending in &#8216;Monitor&#8217; in the ./grails-app/monitor/ directory and adding some simple elements:</p>
<pre name="code" class="groovy">class SessionMonitor implements HttpSessionListener {  def activeSessions = 0L

  static monitorName = 'Sessions'  static monitorGroup = 'Web'  static monitorDescription = """The ${monitorName} monitor contains information regarding active sessions."""

  static monitorDefs = {     'activeSessions'( type:'gauge', aggregation:'avg', min:0) {        description = "Number of active sessions"     }  }

  static monitorGraphDefs = {     'activeSessions'() {        title = '''Active sessions'''        description = title

        // graph sources        source(id:'activeSessions', metric:'activeSessions', aggregation:'average')

        // what to draw        area(id:'activeSessions', legend:true)     }  }

  void sessionCreated(HttpSessionEvent se) {     activeSessions++  }

  void sessionDestroyed(HttpSessionEvent se) {     if (activeSessions > 0) {        activeSessions--     }  }}</pre>
<p>The monitor class specifies a name (monitorName), a group it belongs to (monitorGroup, e.g. &#8216;Web&#8217;, &#8216;System&#8217;, or &#8216;Application&#8217;) and optionally a description (monitorDescription). Two DSLs, one for metrics (monitorDefs), one for graphs (monitorGraphDefs), allow to specify the monitored values and what the graphs should look like. Values are collected periodically (currently every minute) using a Quartz-controlled job.</p>
<p>Details will follow once the plugin is released. It still needs some work for the UI and behind the scenes, but a first version will be available soon.</p>
<p><b>Roadmap</b></p>
<p>I have plenty of ideas for additional features and monitors.</p>
<p>Features:</p>
<p>JMX export<br />XML/JSON/CSV export<br />Support for non-numeric data (e.g. Java version, OS name, hostname, &#8230;)<br />Possibly storage backends other than RRD4J (e.g. a database)<br />Notification via EMail when certain thresholds are exceeded<br />Integration of other graphing solutions, like <a href="http://groovy.dzone.com/news/charting-jfreechart-groovy">JFreeChart</a></p>
<p>Monitors:</p>
<p>Count per Domain object<br />Requests by controller/action<br />Database/GORM query stats (using Hibernate statistics)<br />Special monitors for some databases (MySQL &#8220;SHOW STATS&#8221;, &#8230;)<br />Security monitor for JSecurity/ACEGI/CAS plugins<br />Monitor for Quartz jobs (job runs, min/max/avg duration)</p>
<p>Basically, the idea is, that every plugin would provide its own set of monitors for the contributed functionality.</p>
<p>I you have any other idea, advice, or feature requests please feel free to post a comment below.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jetztgrad.net/2008/02/introducing-the-grails-monitor-plugin/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

