利用ambari rest api实现集群监控及短信告警

短信接口请自行实现
此处主要参考:https://github.com/apache/ambari/blob/trunk/ambari-server/docs/api/v1/alerts.md

# -*- coding:utf-8 -*-
import datetime
import sys

import requests

'''修改编码字符集为utf-8'''
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
    reload(sys)
    sys.setdefaultencoding(default_encoding)
    
intervals = (
    ('周', 604800),  # 60 * 60 * 24 * 7
    ('天', 86400),  # 60 * 60 * 24
    ('小时', 3600),  # 60 * 60
    ('分钟', 60),
    ('秒', 1),
)


def display_time(seconds, granularity=2):
    result = []

    for name, count in intervals:
        value = seconds // count
        if value:
            seconds -= value * count
            if value == 1:
                name = name.rstrip('s')
            result.append("{}{}".format(value, name))
        else:
            # Add a blank if we're in the middle of other values
            if len(result) > 0:
                result.append(None)
    return ''.join([x for x in result[:granularity] if x is not None])


def time_format(timestamp):
    dateArray = datetime.datetime.utcfromtimestamp(timestamp / 1000)
    return dateArray.strftime("%Y-%m-%d %H:%M:%S")


def get_alert_items():
    global items_
    auth = ('admin', 'admin')
    ##此处ip地址为ambari-server节点的ip或hostname
    url = 'http://192.168.0.101:8080/api/v1/clusters/xcarbigdata/alerts'
    params = {
        'fields': '*',
        'Alert/state': 'CRITICAL',
        'sortBy': 'Alert/original_timestamp'
    }
    response = requests.get(url, params=params, auth=auth)
    response_json = response.json()
    return response_json['items']


items_ = get_alert_items()

alert_messages=[]
for item in items_:
    alert_ = item['Alert']
    original_timestamp_ = alert_['original_timestamp']
    latest_timestamp_ = alert_['latest_timestamp']
    timestamp_ = (latest_timestamp_ - original_timestamp_) / 1000
    alert_['duration'] = display_time(timestamp_)
    alert_['original_timestamp'] = time_format(original_timestamp_)
    alert_messages.append('组件:%(service_name)s/%(host_name)s \r\n'
          '告警内容:%(label)s:%(text)s\r\n'
          '开始时间:%(original_timestamp)s\r\n'
          '持续时间:%(duration)s\r\n' % alert_)

if alert_messages:
  send_sms('\r\n'.join(alert_messages))#send_sms(message)方法请自行实现


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,010评论 19 139
  • 洗过澡了,懒懒地倚靠在床边,准备睡觉,晚上给高先生打电话,他再次强调根据他多次多年恋爱及从平日观察得到的经验: 不...
    莎莎吖阅读 400评论 0 0
  • 写在前面的话:上周,是幸福进化俱乐部“向组织揩油”课程小伙伴们纷纷提交自己的2017年期待和年度目标的时间,但由于...
    念小娜阅读 796评论 2 0
  • 这周轮到自己主持,因为主讲老师第一次来分享,所以很多细节要去沟通。所以自己也是很用心地引导,主讲老师没加入yy大群...
    林玉珍阅读 203评论 0 1