I use a start up procedure to send me an email whenever the SQL instance starts up. If someone failed it over, it will start up on another node. Of course that doesn't address who did it. Getting that is trickier, I think Grant's advice is best on that part of it.
SQL DBA,SQL Server MVP(07, 08, 09) "Money can't buy you happiness." Maybe so, but it can make your unhappiness a LOT more comfortable!