We've been using a different variant on this, first there's a job that runs every hour that mails us the results of the following view:
SELECT CONVERT(DATETIME, RTRIM(H.run_date)) + ((H.run_time * 9 + H.run_time % 10000 * 6) + H.run_time % 100 * 10) / 216e4 AS run_date, J.name,
H.message, H.run_duration, H.server
FROM LINKED_SERVER_NAME.msdb.dbo.sysjobhistory AS H INNER JOIN
[SRV-NAV01].msdb.dbo.sysjobs AS J ON H.job_id = J.job_id
WHERE (H.step_id = 0) AND (H.run_status = 0)
This also works like a charm and is easy to set up. You can either pro-actively monitor the view, or have a job schedule mail these results to you (like we did). You can simply UNION select any production server (linked) that you'd like or take it one step further and use CLR to enumerate through all available servers.