1.Ambari 告警的基础概念
Ambari 为了帮助用户鉴别以及定位集群的问题,实现了告警(Alert)机制。在 Ambari 中预定了很多的告警,这些告警被用于监测集群的各个模块以及机器的状态。
对于告警来说,主要有两个概念,一个是 Alert Definition,一个是 Alert Instance。
(1)Alert Definition: 告警的定义,Server使用Alert Definition来将alert分配到合适的Ambari Agent中并创建Alert instance。在Alert Definition中会定义alert的检测时间间隔(interval)、类型(type)、以及阈值(threshold)等。
(2)Alert Instance:Ambari 会读取alert definition,然后创建对应的实例(instance)去定期执行这个告警。
终端用户可以在 WEB 中 Alert 的页面,浏览以及组织管理这些告警。如果告警名称太多,用户可以用过滤器筛选想要查找的告警。其实这些 WEB 中的显示,都是 Alert Definition。用户可以点击具体的 Alert name 去查看或者修改 Alert 属性(例如 interval 和阈值)。在详细的告警页面里,可以看到该告警所有的 instance。每个 instance 都会严格的报告该 instance 的检查结果。Alert 的检查结果会以五种级别呈现,分别是 OK、WARNING,CRITICAL、UNKNOW 和 NONE。其中最常见的是前三种。
1.1.Ambari 中 Alert 的类型
Ambari 中的 Alert 分为 5 种类型,分为 WEB、Port、Metric、Aggregate 和 Script。具体的区别见下面的表格。
每种类型的alert都具有如下公共属性:
a.id
b.name
c.label
d.cluster_name
e.service_name
f.component_name
g.source
除了一些公共属性外,每种类型的alert还会有一些特殊的属性,下面主要将alert的核心属性:Source及每种类型的alert的source属性应该如何配置。
1.1.1.Script
Script类型的alert的将所有的功能都有其指定的python脚本来说明。Script类型的alert,除了公共属性外,只需要在source属性中指定其python脚本路径。
"source" : {
"path" : "HDFS/2.1.0.2.0/package/alerts/alert_ha_namenode_health.py",
"type" : "SCRIPT" }
1.1.2.Port
返回值通过web请求的响应时间确定,不检查response的返回码。
"source" : {
"default_port" : 2181, #当uri中不包含port时,使用该值
"reporting" : {
"ok" : {#状态码必须小写
"text" : "TCP OK - {0:.3f}s response on port {1}"
},
"warning" : { #text:指定返回显示的文本
"text" : "TCP OK - {0:.3f}s response on port {1}",
"value" : 1.5#指定waring_timeout,如果大于30,则使用默认值
},
"critical" : {
"text" : "Connection failed: {0} to {1}:{2}",
"value" : 5.0
}
},
"type" : "PORT",
"uri" : "{
{core-site/ha.zookeeper.quorum}}", #url必须为{
{foo-bar/baz}}的形式,可为常量或是变量,如果变量值不存在,则agent会使用当前localhost代替
}
}
1.1.3.Web
Web 和port功能相似,区别是Web不仅检测TCP连接性,还检查HTTP响应状态码。
"source" : {
"reporting" : {
"ok" : {
"text" : "HTTP {0} response in {2:.3f} seconds"
},
"warning" : {
"text" : "HTTP {0} response in {2:.3f} seconds"
},
"critical" : {
"text" : "Connection failed to {1}: {3}"
}
},
"type" : "WEB",
"uri" : {
"http" : "{
{hdfs-site/dfs.namenode.http-address}}",
"https" : "{
{hdfs-site/dfs.namenode.https-address}}",
"https_property" :