Jast blog Jast blog
首页
  • 《Ambari自定义开发教程》笔记
  • 《CDH教程》笔记
  • 《ClickHouse教程》笔记
  • 《HDFS教程》笔记
  • 《DolphinScheduler教程》笔记
  • 《Hbase教程》笔记
  • 《Iceberg教程》笔记
  • 《Hive教程》笔记
  • 《Flume教程》笔记
  • 《Kafka教程》笔记
  • 《Impala教程》笔记
  • 《Hue教程》笔记
  • 《Spark教程》笔记
  • 《Flink教程》笔记
  • 《Phoenix教程》笔记
  • 《ElasticSearch教程》笔记
  • 《Kylin教程》笔记
  • 《Storm教程》笔记
  • 《Yarn教程》笔记
  • 《Presto教程》笔记
  • 《图数据库教程》笔记
  • 《Kerberos教程》笔记
  • 《Maxwell教程》笔记
  • 《MinIO教程》笔记
  • 《DataX教程》笔记
  • 《Superset教程》笔记
  • 《IOTDB教程》笔记
  • 《大数据相关》笔记
  • 《PaddleNLP教程》笔记
  • 《Nginx教程》笔记
  • 《Java技术文档》
  • 《Maven教程》笔记
  • 《IDEA使用教程》
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档

Jast-zsh

如果你知道你要去哪里,全世界都会给你让路。
首页
  • 《Ambari自定义开发教程》笔记
  • 《CDH教程》笔记
  • 《ClickHouse教程》笔记
  • 《HDFS教程》笔记
  • 《DolphinScheduler教程》笔记
  • 《Hbase教程》笔记
  • 《Iceberg教程》笔记
  • 《Hive教程》笔记
  • 《Flume教程》笔记
  • 《Kafka教程》笔记
  • 《Impala教程》笔记
  • 《Hue教程》笔记
  • 《Spark教程》笔记
  • 《Flink教程》笔记
  • 《Phoenix教程》笔记
  • 《ElasticSearch教程》笔记
  • 《Kylin教程》笔记
  • 《Storm教程》笔记
  • 《Yarn教程》笔记
  • 《Presto教程》笔记
  • 《图数据库教程》笔记
  • 《Kerberos教程》笔记
  • 《Maxwell教程》笔记
  • 《MinIO教程》笔记
  • 《DataX教程》笔记
  • 《Superset教程》笔记
  • 《IOTDB教程》笔记
  • 《大数据相关》笔记
  • 《PaddleNLP教程》笔记
  • 《Nginx教程》笔记
  • 《Java技术文档》
  • 《Maven教程》笔记
  • 《IDEA使用教程》
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Ambari自定义服务开发-项目初始化
  • Ambari自定义服务开发-组件安装启动停止卸载介绍
  • Ambari自定义服务开发-自定义服务配置文件在Ambari中的设置方法
  • Ambari自定义服务开发-自定义服务配置文件生成
  • Ambari自定义服务开发-代码如何获取配置参数
  • Ambari自定义服务开发-修改配置文件提示服务重启
  • Ambari自定义服务开发-自定义告警
    • 告警结果类型
    • 告警任务类型
    • 配置告警文件
      • 配置介绍
      • 端口检测报警-PORT
      • 网页检测报警-WEB
      • 脚本检测报警-SCRIPT
    • 自定义告警API
      • 查看所有自定义告警
      • 新增自定义告警
    • 参考
  • Ambari自定义服务开发-查看历史版本配置
  • Ambari自定义服务开发-调试方法
  • Ambari自定义服务开发-执行Shell命令
  • Ambari自定义服务开发-快捷访问链接生成
  • Ambari自定义服务开发-服务组件启动顺序设置
  • Ambari自定义服务开发-服务组件安装依赖另外一个组件设置
  • Ambari自定义服务开发-监控指标Metrics介绍
  • Ambari自定义服务开发-使用客户端下载配置文件
  • Ambari自定义服务开发-美化(增强型)配置参数设置
  • Ambari自定义服务开发-自定义开发安装包整合到Ambari-Server中
  • Ambari自定义服务开发-自定义脚本运行
  • Ambari自定义服务开发-常用函数
  • Ambari自定义服务开发问题处理-中文乱码
  • Ambari自定义服务开发问题处理-告警项UNKWN
  • Ambari自定义服务开发问题处理-Agent安装服务报错unknown
  • Ambari自定义服务开发问题处理-修改源码配置,服务重启后未生效
  • 《Ambari自定义开发教程》笔记
Jast-zsh
2024-04-08
目录

Ambari自定义服务开发-自定义告警

[toc]

在AmbariWebUI中我们经常看到各种告警,如:

image-20240228101204983

当然也有正常的提示

image-20240228101228720

这种信息主要是为了提示用户当前集群或者服务的一个状态,方便使用者随时发现集群问题。

那么我们如何自己去设置一个告警呢?

对于告警来说,主要有两个概念,一个是 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)去定期执行这个告警。

# 告警结果类型

Alert 的检查结果会以五种级别呈现,分别是 OK、WARNING,CRITICAL、UNKNOW 和 NONE。其中最常见的是前三种。

# 告警任务类型

类型 用途 阈值是否可配 阈值单位
PORT 用来监测机器上的一个端口是否可用 是 秒
METRIC 用来监测Metric相关的配置属性 是 %
AGGREGATE 用于收集其他某些Alert的状态 是 %
WEB 用于监测一个WebUI(URL)地址是否可用 否 无
SCRIPT Alert的检测逻辑由一个自定义的python脚本执行 否 无

# 配置告警文件

每个服务的告警配置都是通过alerts.json文件定义,可以配置当前服务下的多个组件告警信息。

可以参考官方的配置文件/var/lib/ambari-server/resources/common-services/AMBARI_METRICS/0.1.0/alerts.json

# 配置介绍

告警的配置文件为根目录的alerts.json,如下图所示:

image-20240228144603899

这里拿PORT类型的举例,直接看下面PORT类型介绍就可以

# 端口检测报警-PORT

{
  "DORIS": {  # 对应 metainfo.xml 中的 service.name 值
    "service": [],
    "FRONTEND": [ # 对应 metainfo.xml 中的 component.name 值
      {
        "name": "doris_fe_server_process",
        "label": "Doris FE 中文测试",
        "description": "Doris FE 中文中文",
        "interval": 1,
        "scope": "ANY",
        "enabled": true,
        "source": {
          "type": "PORT",
          "uri": "{ {fe/http_port}}", # 获取fe.xml配置文件下的http_port参数,ip是获取安装FRONTEND组件所在的服务器IP
          "default_port": 8030,
          "reporting": {
            "ok": { # 当连接正常时的信息。
              "text": "TCP OK - {0:.3f}s response on port {1}"
            },
            "warning":  # 当连接响应时间超过 1.5 秒时的警告信息。
              "text": "TCP OK - {0:.3f}s response on port {1}",
              "value": 1.5
            },
            "critical": { # 当连接失败或响应时间超过 5 秒时的严重告警信息。
              "text": "Connection failed",
              "value": 5
            }
          }
        }
      }
    ]
  }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

参数说明(FRONTEND组件下的参数说明):

参数 说明 对应表alert_definition字段
name 告警唯一ID definition_name
label 在WebUI中显示告警名称 label
description 在WebUI中显示告警描述 description
interval 告警检测周期,单位为分钟 schedule_interval
scope 告警范围。取值范围:SERVICE、HOST、ANY。 scope
enabled 是否启用告警。 enabled(1:true,0:false)
source 告警具体配置 作为json存储在alert_source字段
- type 告警类型,取值范围:PORT/WEB/METRIC/AGGREGATE/SCRIPT source_type
- uri 定义参数,这里需要填变量。如:{ {fe/http_port}} 代表获取fe.xml配置文件下的http_port参数 作为json存储在alert_source字段
- default_port 监测告警的默认端口号。如果 uri 参数失效,就会读取该参数。 作为json存储在alert_source字段
- reporting 代表告警级别,分别是 OK、WARNING,CRITICAL、UNKNOWN 和 NONE 。常用的主要为前三种。
text 表示告警级别的描述信息;
value 的值为 数值类型 ,单位为 秒。代表超过该阈值,则呈现不同的告警级别。
作为json存储在alert_source字段

tip:当enabled设置为false,在页面中看到的告警状态为NONE

image-20240228133719807

重新将文件同步到服务器中,然后重启ambari-server服务,卸载我们自定义开发的服务,再次安装。

如果我们自定义监控的端口异常,会自动提示告警

image-20240228144734946

# 网页检测报警-WEB

{
  "DORIS": {
    "service": [],
    "FRONTEND": [
      {
        "name": "yarn_webui",
        "label": "Web 告警测试",
        "description": "Web 告警测试描述",
        "interval": 1,
        "scope": "ANY",
        "enabled": true,
        "source": {
          "type": "WEB",
          "uri": {
            "http": "8088",// 可直接追加端口号,参数变量用{ {}}标识,当前发现只识别configuration目录下的xml文件内的属性。如果参数变量不符合语法,就会读取https。
            "https": "8088",
            "https_property": "http", // 当这里值是http时,就检测http链接;当这里值是https时,就检测的https链接。
            "https_property_value": "https",
            "connection_timeout": 5.0,
            "default_port": 8088 // 默认端口。假如上面的http和https参数变量填的都报错,系统就会默认使用这个端口号,加上当前组件的主机名,构成一个web ui链接。
        },
          "reporting": {
            "ok": {
              "text": "TCP OK - {0:.3f}s response on port {1}"
            },
            "warning": {
              "text": "TCP OK - {0:.3f}s response on port {1}",
              "value": 1.5
            },
            "critical": {
              "text": "Connection failed",
              "value": 5
            }
          }
        }
      }
    ]
  }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

# 脚本检测报警-SCRIPT

tip:如果是修改 SCRIPT 类型的 py 文件,则只需要将修改后的 py 文件放置到 告警组件所在机器的 /var/lib/ambari-agent/cache/stacks/HDP/3.1/services/DORIS/package/alerts 目录下即可(以 DORIS 为例)。实时更新,不需要重启 ambari-server ,大概等待一分钟后,程序刷新。

{
  "DORIS": {
    "service": [],
    "FRONTEND": [
      {
          "DORIS": {
            "service": [],
            "FRONTEND": [
              {
                "name": "doris_fe_pid_exists",
                "label": "doris fe check process",
                "description": "check doris fe process",
                "interval": 1,
                "scope": "ANY",
                "source": {
                    "type": "SCRIPT",
                    "path": "HDP/3.1/services/DORIS/package/alerts/alert_pid_exists.py"
                }
              }
            ]
          }
        }
    ]
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

tip: 当脚本运行失败WebUI中告警状态会显示为UNKWN状态

在WebUI中Response会提示简单的异常提示,根据提示处理问题即可

image-20240228172103470

alert_pid_exists.py内容

#!/usr/bin/env python
# -*- coding: utf-8 -*--

from resource_management import *
import os
import socket
from resource_management.core.logger import Logger

def execute(configurations={}, parameters={}, host_name=None):
    config = Script.get_config()
    doris_pid_dir = config['configurations']['doris-env']['doris_pid_dir'].rstrip("/")
    doris_pid_file = format("{doris_pid_dir}/doris-fe.pid")
    
    result = os.path.exists(doris_pid_file)
    if result:
        result_code = 'OK'
        es_head_process_running = True
    else:
        # OK、WARNING、CRITICAL、UNKNOWN、NONE
        result_code = 'CRITICAL'
        es_head_process_running = False

    if host_name is None:
        host_name = socket.getfqdn()

    # 告警时显示的内容Response
    alert_label = 'Doris FE is running on {0}' if es_head_process_running else 'Doris FE is NOT running on {0}'
    alert_label = alert_label.format(host_name)
    Logger.info("test check alert123456")
    print('test check alert')

    return ((result_code, [alert_label]))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 自定义告警API

# 查看所有自定义告警

http://bigdata-01:8080/api/v1/clusters/hadoop_cluster/alert_definitions
1

# 新增自定义告警

tip:无需重启即生效

curl -u admin:admin -H "X-Requested-By: ambari" -X POST http://bigdata-01:8080/api/v1/clusters/hadoop_cluster/alert_definitions -d ' {"AlertDefinition":{"service_name":"DORIS","component_name":"FRONTEND","enabled":true,"interval":1,"label":"DorisFE服务进程","name":"doris_fe_server_process_chinese","description":"DorisFE服务进程如果不存在或端口未启用则进行报警。","scope":"ANY","source":{"type":"PORT","uri":"{ {fe/http_port}}","default_port":9200,"reporting":{"ok":{"text":"TCPOK-{0:.3f}sresponseonport{1}"},"warning":{"text":"TCPOK-{0:.3f}sresponseonport{1}","value":1.5},"critical":{"text":"Connectionfailed","value":5}}}}} '
1

# 参考

https://blog.csdn.net/youyou1543724847/article/details/78377400

https://cwiki.apache.org/confluence/display/AMBARI/Alerts

上次更新: 2024/05/11, 16:24:52
Ambari自定义服务开发-修改配置文件提示服务重启
Ambari自定义服务开发-查看历史版本配置

← Ambari自定义服务开发-修改配置文件提示服务重启 Ambari自定义服务开发-查看历史版本配置→

最近更新
01
Linux可视化监控
02-26
02
Maven私服搭建
02-26
03
当ElasticSearch时间字段设置多个格式到底是用的哪个?
01-19
更多文章>
Theme by Vdoing | Copyright © 2016-2025 Jast-zsh | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式