CDH和HDP配置自带的邮件告警
一、CDH配置CM进行邮件告警
1、修改Cloudera Management Service的配置
输入"alert"进行搜索:
基本配置如下
邮件服务器主机名称: 根据自己实际情况选择,可用smtp.163.com、smtp.qq.com等;
邮件服务器用户名: 对应邮件服务器的邮箱账号,比如 xxx@qq.com等;
邮件服务器密码: 对应用户名的密码,如果使用QQ邮箱作为“邮件服务器用户名”,那么这里的密码要填写QQ邮箱的授权码,具体获取授权码的方法可百度,很简单;
邮件发件人地址: 发件人地址一般可以与邮件服务器用户名一样;
邮件收件人: 接收报警信息的地址,可为任意可用邮件地址,只要网络能通,如果使用多个收件箱,可以用英文逗号分割;
其他配置,看自己需求更改即可;
2、保存配置,重启Cloudera Management Service
3、测试告警
如果是测试集群,可直接停止掉某个关键服务,看是否能收到告警邮件;
也可以使用 【管理->警报->发送测试警报】
这里我使用”发送测试警报”的方式:
点击“发送测试警报”,然后稍等一下,已收到告警邮件
二、HDP中配置Ambari进行邮件告警
1、登录ambari管理页面,找到Manage Notifications选项
2、点击+ 创建一个告警
3、配置告警
Email To: 邮件接收邮箱地址,如果使用多个收件箱,可以用英文逗号分割;
SMTP Server:邮件服务器地址;
SMTP Port:25
Email From:用于发送邮件的地址;
选中”Use authentication”,填写发件箱地址和密码;
4、定义发送邮件格式
下载 alert-templates.xml ,地址:
https://github.com/apache/ambari/blob/branch-2.1/ambari-server/src/main/resources/alert-templates.xml
这里列出alert-templates.xml 文件的全部内容:
<?xml version="1.0" encoding="UTF-8"?> <alert-templates> <alert-template type="EMAIL"> <subject> <![CDATA[Alert Summary: OK[$summary.getOkCount()], Warning[$summary.getWarningCount()], Critical[$summary.getCriticalCount()], Unknown[$summary.getUnknownCount()]]]> subject> <body> <![CDATA[ #set( $alertStates = ["OK", "WARNING", "CRITICAL", "UNKNOWN"] ) #set( $services = $summary.getServices() ) <html> <style type="text/css"> html { font-family:sans-serif; -webkit-text-size-adjust:100%; -ms-text-size-adjust:100%; } body { margin:10px; } footer,header { display:block; } table { border-spacing:0; border-collapse:collapse; } td,th { padding:10px; } .panel { margin-bottom:20px; background-color:#fff; border:1px solid transparent; border-radius:4px; -webkit-box-shadow:0 1px 1px rgba(0,0,0,.05); box-shadow:0 1px 1px rgba(0,0,0,.05); } .panel-body { padding:15px; } .panel-heading { padding:10px 15px; border-bottom:1px solid transparent; border-top-left-radius:3px; border-top-right-radius:3px; } .panel-title { margin-top:0; margin-bottom:0; font-size:16px; color:inherit; } .panel-default { border-color:#ddd; } .panel-default > .panel-heading { color:#333; background-color:#f5f5f5; border-color:#ddd; } .panel-primary { border-color: #337ab7; } .panel-primary > .panel-heading { color: #fff; background-color: #337ab7; border-color: #337ab7; } .label { display:inline; padding:.3em 1em; font-size:75%; font-weight:bold; line-height:1; color:#fff; text-align:center; white-space:nowrap; vertical-align:baseline; border-radius:.25em; } .label-unknown { background-color:#777; } .label-primary { background-color:#337ab7; } .label-ok { background-color:#5cb85c; } .label-warning { background-color:#f0ad4e; } .label-critical { background-color:#d9534f; } .label-small { font-size:12px; } .ambari-footer{ font-family: Arial, Helvetica, sans-serif; font-size: 12px; } style> <div class="panel panel-primary"> <div class="panel-heading"> <h3 class="panel-title">Services Reporting Alertsh3> div> <div class="panel-body"> <table> #foreach( $alertState in $alertStates ) #if( $summary.getServicesByAlertState($alertState) ) <tr> <td> <span class="label label-$alertState">$alertStatespan> td> <td> $summary.getServicesByAlertState($alertState) td> tr> #end #end table> div> div> #foreach( $service in $services ) <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">$serviceh3> div> <div class="panel-body"> <table> #foreach( $alertState in $alertStates ) #foreach( $alert in $summary.getAlerts($service,$alertState) ) <tr> <td> <span class="label label-$alertState">$alertStatespan> td> <td> $alert.getAlertDefinition().getLabel() <div class="label-small"> $alert.getAlertText() div> <div class="label-small"> Cluster: $alert.getAlertDefinition().getCluster().getClusterName() div> #if( $alert.getHostName() ) #if( $ambari.hasUrl() ) <div class="label-small"> Host: <a href=$ambari.getUrl()/#/main/hosts/$alert.getHostName()/summary>$ambari.getUrl()/#/main/hosts/$alert.getHostName()/summarya> div> #else <div class="label-small"> Host: $alert.getHostName() div> #end #end td> tr> #end #end table> div> div> #end <div class="ambari-footer"> This notification was sent to $dispatch.getTargetName() <br/> Apache Ambari $ambari.getServerVersion() #if( $ambari.hasUrl() ) <br/> Ambari Server link: <a href=$ambari.getUrl()>$ambari.getUrl()a> #end div> html> ]]> body> alert-template> <alert-template type="SNMP"> <subject> <![CDATA[[$alert.getAlertState()] $alert.getAlertName()]]> subject> <body> <![CDATA[ [Alert] $alert.getAlertName() [Service] $alert.getServiceName() #if( $alert.hasComponentName() ) [Component] $alert.getComponentName() #end #if( $alert.hasHostName() ) [Host] $alert.getHostName() #end $alert.getAlertText()]]> body> alert-template> alert-templates>
将alert-templates.xml 文件放到Ambari服务器的 /var/lib/ambari-server/resources/ 下;
并且赋予755权限;
chmod 755 /var/lib/ambari-server/resources/alert-templates.xml
5、修改ambari的配置文件
编辑 /etc/ambari-server/conf/ambari.properties
在文件最后一行增加: alerts.template.file=/var/lib/ambari-server/resources/alert-templates.xml
6、重启ambari server
ambari-server restart
7、测试告警
这里是测试集群,直接停掉了hbase的Hmaster
稍等片刻,已收到告警: