There are a number of ways to do this, but one of the easiest is to add a group requirement to your alerts, for example, we have an active group and all hosts are in this group when they are under monitoring. This group is a requirement for the alerts, meaning no alert will be generated for a trigger unless the host is in this group. When we need to take one down for maintenance, we simply move the host out of the active group. The Zabbix server continues to monitor the host, triggers continue to be set, but no alerts are thrown. BTW, this is also a good way to do it from the SLA perspective as the triggers will still affect your SLA numbers, which maintenance should do.