6
votes

I'm a developer for many years, but don't have tons of experience in ops, so apology if this is a newbe question.

In my company we run a web service written in Java mainly based on a Tomcat web server. We have two datacenters with about 10 hosts each. Hosts are of several types: Dababase, Tomcats, some offline java processes, memcached servers. All hosts are Linux CentOS

Up until now, when releasing a new version to production we've been using a set of inhouse shell script that copy jars/wars and restart the tomcats.

The company has gotten bigger so it has become more and more difficult operating all this and taking code from development, through QA, staging and to production. A typical release many times involves human errors that cost us precious uptime. Sometimes we need to revert to last known good and this isn't easy to say the least...

We're looking for a tool, a framework, a solution that would provide the following:

  • Supports the given list of technology (java, tomcat, linux etc)
  • Provides easy deployment through different stages, including QA and production
  • Provides configuration management. E.g. setting server properties (what's the connection URL of each host etc), server.xml or context configuration etc
  • Monitoring. If we can get monitoring in the same package, that'll be nice. If not, then yet another tool we can use to monitor our servers.
  • Preferably, open source with tons of documentation ;)

Can anyone share their experience? Suggest a few tools?

Thanks!

8 Answers 8

3
votes

Disclaimer, I'm the Zenoss Community Manager.

Zenoss covers all your bullet points except configuration management, but you can use it in conjunction with another system.

  • Supports the given list of technology (java, tomcat, linux etc)
    • Absolutely, the ZenJMX ZenPack adds JMX monitoring that can be used for Tomcat or any other JMX-enabled app.
  • Provides easy deployment through different stages, including QA and production
    • Zenoss has a variety of production states, so you can determine how you want to monitor your devices, whether you're in "Testing", "Production", "Pre-Production", "Maintenance" or "Decommissioned".
  • Provides configuration management. E.g. setting server properties (what's the connection URL of each host etc), server.xml or context configuration etc
    • You could use Zenoss in conjunction with Puppet, Cfengine, etc.
  • Monitoring. If we can get monitoring in the same package, that'll be nice. If not, then yet another tool we can use to monitor our servers.
    • That's what Zenoss is for.
  • Preferably, open source with tons of documentation ;)
2
votes

I would definitely recommend trying out TC Server from SpringSource. It makes managing and diagnosing Tomcat instances in an enterprise setting a breeze and you get great support from the guys who are involved in the Tomcat project. This all comes with a price-tag, though.. :(

1
vote

Well, at least in part, you can use Java's own jVisualVM.

It's included in every JDK java install...

Just look in the lib folder, it's right there.

1
vote

I've heard Hyperic is good for Java apps.

No personal experience, sorry.

1
vote

Splunk + Nagios + Nagios JMX Plugin or Log4j might be a good fit...

1
vote

Also, checkout MuleSoft Tcat Server that provides an easy to use deployment, configuration management, reliable restarts and diagnostics for Tomcat.

Disclaimer: I work for MuleSoft.

1
vote

For configuration management, Chef is a great tool that can configure various aspects across your different types of Linux servers, and can be used to manage the configuration and potentially deployment of your applications as well. I strongly recommend using Chef or something similar (Puppet, etc.) to manage your servers.

Also consider something like Hudson, which you can use for Continuous Integration (building and running automated tests every time someone commits a change to the source), and can also be used to deploy builds of your applications onto servers (dev, stage, live, etc.). It needs to be used in conjunction with scripts (Ant, Maven, shell, etc.) to actually deploy the software, but is a useful piece of the puzzle.

Something I'm interested in but haven't dug into yet myself is Cloud Tools, which is a toolset for automating deployment of applications to a Tomcat / MySQL stack. It's intended for use on IaaS clouds (e.g. Amazon EC2), but should be usable on normal servers as well, maybe with a bit of elbow grease. The main potential drawback is that it doesn't seem to be very actively developed at the moment.

0
votes

For monitoring and deployments on a single tomcat, psi-probe is a possible solution. It is a fork of Lambda Probe.

For monitoring the hole infrastructure I agree with the Nagios answer.

An alternative to jVisualVM is jconsole, also part of the JDK.

For managing the hole infrastructure, I think there is no way around some custom script, whether they are written in bash, perl, ant, puppet manifest or whatever. But you can hide their complexity behind such tools like already mentioned hudson, puppet, cfengine, chef, ...

Not the answer you're looking for? Browse other questions tagged .