Ambari Alert告警服务梳理

目录

  1. Ambari 告警的基础概念
    1.1. Ambari 中 Alert 的类型
    1.1.1. Script
    1.1.2. Port
    1.1.3. Web
    1.2. Alert 相关的Rest API
    1.2.1. Create
    1.2.2. Update
    1.2.3. Delete
    1.2.4. Query
    1.2.5. Alert立即执行
    1.3. 告警通知
    1.3.1. Alert notification 模版XML结构
    1.3.2. 告警通知示例
  2. Ambari Agent对Alert的处理
    2.1. Ambari Agent获取Alert definition
    2.2. 执行Alert
    2.3. Ambari Agent上报alert信息
    2.4. AlertSchedulerHandler.py
    2.4.1. AlertSchedulerHandler启动流程
    2.4.2. AlertSchedulerHandler更新Alert definition
    2.4.3. AlertSchedulerHandler立刻执行Alert definition
    2.5. Alert调度器
    2.5.1. Python APScheduler
    2.5.2. Alert Scheduler
    2.6. AlertCollector
    2.7. Ambari agent对Alert的处理总结
    2.8. BaseAlert的collect函数执行过程
    2.9. Agent执行WebAlert过程
    2.10. Agent执行Port Alert过程
    2.11. Agent执行Script Alert过程
  3. Ambari Alert实践

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。具体的区别见下面的表格。
Ambari Alert告警服务梳理_第1张图片

每种类型的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" : 

你可能感兴趣的:(Ambari,Ambari,Ambari)