At first I was not going to respond, as I do not have a specific software package to recommend. Nevertheless, the lack of response does not give this question the proper justice.
I tend to lean towards creating or customizing tools to serve the specific needs in question.
Currently, I use a combination of tools. Specific to the Service Level Agreement (SLA):
My current SLA is focused on production uptime of critical services. The three categories are critical, major, and minor. Critical is revenue impacting, major is internal production/non revenue impacting, and minor is everything else. We base the SLA reporting on critical services.
The primary method for tracking this metric is functionality that was developed within the Web application we created for tracking system and network changes. If a change is made to anything, it is logged to this system. It's essentially a fancy MOTD that's designed to be simple, quick, and easy.
In case of outage, the log entry records the level of service, the length of the outage, the type of service, and finally the cause of outage. If external we would record but not count against our internal metric. Scheduled changes are identified and not reported against the SLA. Reports and graphs are based off of this. A checkbox e-Mails outage notifications to an e-Mail list, which is utilized for notifications before and after.
The additional supplement to this is external monitoring based on availability and response times, which I currently use Web Site Pulse for as well as scripts on external servers.
I'd seriously recommend you consider creating and/or customizing tools to meet your exact requirements. It's an incredibly useful approach. You may also find Request Tracker useful, which is something I've used for access and change control as well as a normal ticketing system. It's highly customizable, which may enable you to use it for your SLA reporting.