参考资料:
https://cwiki.apache.org/confluence/display/AMBARI/Alerts
Ambari 为了帮助用户鉴别以及定位集群的问题,实现了告警(Alert)机制。在 Ambari 中预告了很多告警,这些告警被用来监测集群的各个模块以及机器的状态。对于告警来说,主要有两个概念,一个是 Alert Definition,一个是 Alert Instance。
Ambari 中的 alert 分为 5 种类型,分别是 WEB、Port、Metric、Aggregate 和 Script。
Alert 的检查结果会以五种级别呈现,分别是 OK、WARNING,CRITICAL、UNKNOWN 和 NONE。其中最常见的是前三种。
具体的区别见下面的表格:
alert.json 文件依赖于 metainfo.xml 文件。其中 ① 为 service.name 的值,② 为 component.name 的值,表示定义该组件下的告警。
在 alerts.json 文件中,可以定义多个组件告警信息。
参考了 GRAFANA web ui 告警,文件所在地址:
/var/lib/ambari-server/resources/common-services/AMBARI_METRICS/0.1.0/alerts.json
{
"name": "es_head_webui",
"label": "Es Head Web UI",
"description": "This host-level alert is triggered if the Es Head Web UI is unreachable.",
"interval": 1, // 单位:分钟
"scope": "ANY",
"source": {
"type": "WEB",
"uri": {
"http": "{{elastic-config/elasticsearch_head_port}}", // 可直接追加端口号,参数变量用{{}}标识,当前发现只识别configuration目录下的xml文件内的属性。如果参数变量不符合语法,就会读取https。
"https": "3304",
"https_property": "http", // 当这里值是http时,就检测http链接;当这里值是https时,就检测的https链接。
"https_property_value": "https",
"connection_timeout": 5.0,
"default_port": 9100 // 默认端口。假如上面的http和https参数变量填的都报错,系统就会默认使用这个端口号,加上当前组件的主机名,构成一个web ui链接。
},
"reporting": {
"ok": {
"text": "HTTP {0} response in {2:.3f}s"
},
"warning":{
"text": "HTTP {0} response from {1} in {2:.3f}s ({3})"
},
"critical": {
"text": "Connection failed to {1} ({3})"
}
}
}
}
"ELASTICSEARCH_HEAD": [
{
"name": "es_head_check_dir",
"label": "Elasticsearch head check test",
"description": "check dir test",
"interval": 1,
"scope": "ANY",
"source": {
"type": "SCRIPT",
"path": "HDP/3.1/services/ELASTICSEARCH/package/alerts/alert_check_dir.py"
}
}
]
在当前目录下的 package 目录下,创建 alerts 目录,创建 alert_check_dir.py ,定义告警规则。
#!/usr/bin/env python
# -*- coding: utf-8 -*--
from resource_management import *
from resource_management.core.logger import Logger
def execute(configurations={}, parameters={}, host_name=None):
# OK、WARNING、CRITICAL、UNKNOWN、NONE
result_code = 'CRITICAL'
label = "alert check dir"
return ((result_code, [label]))
python 脚本里面需要定义一个execute() 方法,参数必须为3个,缺一不可。
可以在这里,使用 python 语言对你监测的东西进行分级告警。
return 返回的第一个参数是告警状态,第二个参数是响应内容。具体如下图所示:
重启 Ambari Server 后,并卸载重新安装服务,Ambari 会将新预定义的 Alert 信息保存到数据库中。