Ambari Metrics(相关API,底层数据库,widget等)

Posted 安然_随心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ambari Metrics(相关API,底层数据库,widget等)相关的知识,希望对你有一定的参考价值。

Ambari Metrics系统(AMS)是用来收集、聚合Hadoop集群中监控信息的。


功能

  1. 能够收集Hadoop及其他Ambari Stacks服务里的Metrics信息;
  2. 有一定的存储能力,能够将高精度的Metrics信息保存一段时间(例如能够保存5天内的Metrics信息,时间可配置);
  3. 能够将过期的Metrics信息自动清理掉;
  4. 在collection time,为外部系统(例如TSDB)提供清晰的集成点(Integration point);
  5. 在清理时,为外部系统(例如TSDB)提供清晰的集成点;
  6. 提供默认的过期Metrics信息保存方式,例如,将过期的Metrics信息存入到HDFS中;
  7. 为过期Metrics信息提供分析工具,例如将信息存储在HDFS中,则提供Hive schema,pig 脚本等用于分析Metrics信息。

Metrics特点


1. 可移植、平台无关;
2. 能够和Ganglia系统兼容;
3. 保持SNMP架构;
4. 无需要Root权限;
5. HA高可用。


架构


用法

  1. 能够通过Ambari Rest API获取Metrics;
  2. 能够通过Ambari Web浏览Metrics图表;
  3. 支持自定义配置Metrics图表;
  4. 支持在Stack 服务里定义Metrics图表。

下面从Ambari Metrics API、Ambari Collector API、Stack里定义Metrics图表、Sink实现举例、自定义配置Metrics及Ambari Metrics显示过程这几个方面对Metrics进行详细描述。


Ambari Metrics API

Ambari Metrics API是Ambari提供的Metrics 接口,用于获取集群级别(Cluster)、主机节点级别(Host)、服务组件级别(Component)、主机服务节点级别(Host Component)获取Metrics信息。从广义上将,Ambari Metrics信息查询支持时间段(time range)、时间点(point in time)查询。

Cluster级别

http://:8080/api/v1/clusters/cluster-name?fields=metrics/metrics_name[time_start,time_end,step]&_=time_now

其中:
1. cluster-name为查询的集群名字;
2. metrics_name为要查询的metrics名字,如3. load,cpu,memory
4. time_start,time_end:查询的时间段起点(精确到秒)、终点,Linux事件戳
5. step:默认的时间点间隔
6. time_now:当前时间,精确到毫秒

例如:
Get http://node1:8080/api/v1/clusters/TestCluster?fields=metrics/load[1430844925,1430848525,15]&_=1430848532904

Host级别

Get http://ambari-server:8080/api/v1/clusters/cluster-name/hosts/host-name?fields=metrics/cpu/cpu_user[1430844610,1430848210,15],metrics/cpu/cpu_wio[1430844610,1430848210,15],metrics/cpu/cpu_nice[1430844610,1430848210,15],metrics/cpu/cpu_aidle[1430844610,1430848210,15],metrics/cpu/cpu_system[1430844610,1430848210,15],metrics/cpu/cpu_idle[1430844610,1430848210,15]&_=1430848217591

Component级别

Get http://ambari-server:8080/api/v1/clusters/cluster-name/services/HDFS/components/DATANODE?fields=metrics/dfs/datanode/DfsUsed,metrics/dfs/datanode/Capacity&_=1430849798630

HOST COMPONENT

Get http://ambari-server:8080/api/v1/clusters/cluster-name/hosts/host-name/host_components/NAMENODE?fields=metrics/jvm/memHeapCommittedM[1430847303,1430850903,15],metrics/jvm/memHeapUsedM[1430847303,1430850903,15]&_=1430850903846


Ambari Collector API

Ambari Collector API分为两类:Metrics操作API 和Metrics 元数据API。

Metrics操作 API

提交Metrics数据:

POST http://ambari-metrics-collector:6188/ws/v1/timeline/metrics 

  "metrics": [
    
      "metricname": "MetricsName",
      "appid": "Unique_appid",
      "hostname": "hostname",
      "timestamp": cur_timestamp,
      "starttime": time_stamp,
      "metrics": 
        "{time_stamp}": value,
        "next_time": time_stamp
      
    
  ]

其中,starttime,timestamp为时间戳,精确到毫秒,一般格式为:


  "metrics": [
    
      "metricname": "AMBARI_METRICS.SmokeTest.FakeMetric",
      "appid": "amssmoketestfake",
      "hostname": "ambari20-5.c.pramod-thangali.internal",
      "timestamp": 1432075898000,
      "starttime": 1432075898000,
      "metrics": 
        "1432075898000": 0.963781711428,
        "1432075899000": 1432075898000
      
    
  ]

查询Metrics数据:

GET http://ambari-metrics-collector:6188/ws/v1/timeline/metrics?metricNames=MetricsName&appId=AppId&hostname=HostName&precision=seconds&startTime=StartTime&endTime=EndTime

响应数据格式:

Http response: 200 OK
Http data:

   "metrics": [
      
         "timestamp": 1432075898089,
         "metricname": "AMBARI_METRICS.SmokeTest.FakeMetric",
         "appid": "amssmoketestfake",
         "hostname": "ambari20-5.c.pramod-thangali.internal",
         "starttime": 1432075898000,
         "metrics": 
            "1432075898000": 0.963781711428,
            "1432075899000": 1432075898000
         
      
   ]

其中precision可为:Seconds(Host Metrics 10s一个点,其他30s),Minutes(5分钟),Hours(1小时),Days(1天)。另外,在获取数据时,可选择Metrics Aggregate函数(如果没有声明,则默认使用AVG),例如:

http://<AMS_HOST>:6188/ws/v1/timeline/metrics?metricNames=regionserver.Server.totalRequestCount._avg,regionserver.Server.writeRequestCount._max&appId=hbase&startTime=14000000&endTime=14200000

 http://<AMS_HOST>:6188/ws/v1/timeline/metrics?metricNames=regionserver.Server.readRequestCount,regionserver.Server.writeRequestCount._max&appId=hbase&startTime=14000000&endTime=14200000

另外,在Get数据时,MetrimcsName和Hostname支持使用%符进行匹配,获取一系列的Metrics,例如:

http://<AMS_HOST>:6188/ws/v1/timeline/metrics?metricNames=regionserver.Server.%&appId=hbase&startTime=14000000&endTime=14200000

http://<AMS_HOST>:6188/ws/v1/timeline/metrics?metricNames=regionserver.Server.%&hostname=abc.testdomain124.devlocal&appId=hbase&startTime=14000000&endTime=14200000

 http://<AMS_HOST>:6188/ws/v1/timeline/metrics?metricNames=master.AssignmentManger.ritCount,regionserver.Server.%&hostname=abc.testdomain124.devlocal&appId=hbase&startTime=14000000&endTime=14200000

http://<AMS_HOST>:6188/ws/v1/timeline/metrics?metricNames=regionserver.Server.%&hostname=abc.testdomain12%.devlocal&appId=hbase&startTime=14000000&endTime=14200000

Metrics 元数据API

获取App id列表及App id下的Metrics列表

Get http://<AMS_HOST>:6188/ws/v1/timeline/metrics/metadata

获取所有主机注册的Hosts列表

 Get http://<AMS_HOST>:6188/ws/v1/timeline/metrics/hosts


Stack里定义Metrics图表

以为Hive添加metrics数据为例。使用的HDP stack版本为2.5。步骤如下:

1)修改metainfo.xml,添加timelineappid值,如在stack 2.5 metainfo中添加定义(覆盖common-services中的默认设置):

2)编写metrics.json文件

3)编写widgets.json文件

4)编写程序,发送数据到Ambari Metrics Collector中,见下一节。

从Ambari中获取Metrics图表数据,进行调试

获取Service Metrimcs 定义:http://<ambari-server>:<port>/api/v1/stacks/<stackName>/versions/<stackVersion>/services/<serviceName>/artifacts/metrics_descriptor
例如:http://localhost:8080/api/v1/stacks/HDP/versions/2.3/services/HDFS/artifacts/metrics_descriptor

获取Cluster/Host Metrics 定义:http://<ambari-server>:<port>/api/v1/stacks/<stackName>/versions/<stackVersion>/artifacts/metrics_descriptor
例如:http://localhost:8080/api/v1/stacks/HDP/versions/2.3/artifacts/metrics_descriptor

Sink实现举例

一个简单的Metrics sink,在host上发送metric数据到metrics collector中。

#!/bin/sh

# sh sink.sh node1 test1 hikvis

url=http://$1:6188/ws/v1/timeline/metrics
while [ 1 ]
do
millon_time=$(( $(date +%s%N) / 1000000 ))
random=`expr $RANDOM % 10`
json="
\\"metrics\\": [

\\"metricname\\": \\"$2\\",
\\"appid\\": \\"$3\\",
\\"hostname\\": \\"localhost\\",
\\"timestamp\\": $millon_time,
\\"starttime\\": $millon_time,
\\"metrics\\": 
\\"$millon_time\\": $random


]
"
echo $json |tee -a /root/my_metric.log
curl -i -X POST -H "Content-Type: application/json" -d "$json" $url
sleep 5
done

Ambari Metrics显示API

Ambari Web 通过Ambari Server相关的接口,获取Metrics信息并负责显示。其中,具体的显示、管理是通过Widget进行操作的。简单理解,Widget是对Metrics的合并、分析后进行显示,如可在一个Widget图表中显示多个Metrics信息,或者根据Metrics的值决定显示的结果

相关数据表

(这里Ambari底层使用的是mysql数据库)
相关的数据表包括:widget,widget_layout,widget_layout_user_widget。其中,各个数据表存储的数据接口如下所示:
1. widget表 :存储所有的widget定义员数据,包括id,widget_name, 对应的Metrics,widget_values,properties等数据;
2. widget_layout表:记录显示面板元数据。每个服务包括两个大的显示面板,serviceName_summary和serviceName_heatmap。另外,每个用户的又有自己的widget_layout,即每个用户可以自定义自己感兴趣的监控图表。如系统中存储用户admin,test用户,则可能有hdfs_summary和serviceName_heatmap两个section,其中对于hdfs_summary section,存在admin_hdfs_dashboard、test_hdfs_dashboard、admin_hdfs_heatmap和test_hdfs_heatmap (另外,在数据库中,当test用户访问了hdfs heapmap监控区,数据表中才会创建出test_hdfs_heatmap layout这条记录)。在widget_layout数据表中主要存储用户图表监控区的元数据,如id ,layout_name, section_name等。

相关API

查询所有的widget:

get http://ambari_server:port/api/v1/clusters/ClusterName/widgets/

或:
get http://ambari_server:port/api/v1/clusters/ClusterName/widgets?widgetinfo/scope=USER&widgetinfo/author=admin&fields=*

根据widge ID 查询某个widget 信息:

get http://ambari_server:port/api/v1/clusters/ClusterName/widgets/widget_id

对某个section中的 widget进行变更,保留列表中的Metrics(可用此API 在section中添加、删除metrics:

put http://ambari_server:port/api/v1/clusters/ClusterName/widget_layouts/section_id  -d 
'
"WidgetLayoutInfo":"dispaly_name": "Standard Storm Dashboard",
                   "layout_name":"layout_name",
                   "scope":"USER",
                  "section_name":"STORM_SUMMARY",
                  "widgets":["id":133,"id":134] 
                  
'

获取某个section中活跃的widget列表

get http://ambari_server:port/api/v1/users/admin/activeWidgetLayouts?WidgetLayoutInfo/section_name=section_name

目前Ambari 中hdfs,storm,kafaka,yarn定义了Widget,section_name可为hdfs_summary,yarn_summary,storm_summary,yarn_summary,kafaka_summary,yarn_summary,hdfs_heatmap,yarn_heatmap,storm,yarn_heatmap,kafaka_heatmap,yarn_heatmap

其他

Ambari Metrics 白名单

默认白名单位于/etc/ambari-metrics-collector/conf.目录下,可通过 ams-site 中的配置项 timeline.metrics.whitelist.file =path_to_whitelist_file进行配置

Metrics 数据存储

默认情况下,Metrics数据存储在HBase中,使用的是Metrics内置的HBase,且该HBase是单节点模式。

进入Metrics HBase
在Metrics Collector节点,进入目录/usr/lib/ams-hbase/bin目录下,运行:
./hbase –config /etc/ams-hbase/conf shell即可进入hbase shell。

通过Phoenix连接HBase
在Metrics Collector节点,进入目录/usr/lib/ambari-metrics-collector/bin目录下,运行:
./sqlline.py localhost:61181 即可进入Phoenix。

参考文献:

Metrics : https://blog.csdn.net/youyou1543724847/article/details/82725184
Metrics初衷
https://issues.apache.org/jira/browse/AMBARI-5707

Metrics Collector API:
https://cwiki.apache.org/confluence/display/AMBARI/Metrics+Collector+API+Specification

Metrics Wiki: https://cwiki.apache.org/confluence/display/AMBARI/Metrics

以上是关于Ambari Metrics(相关API,底层数据库,widget等)的主要内容,如果未能解决你的问题,请参考以下文章

K8s api server 无法连接 metrics server 问题解决方案

安装 ambari-metrics-monitor HDP 2.3 时出错

Ambari metrics collector 进程掉

Ambari Metrics Collector移动日志目录后启动报错

ambari diskusage: data unavaliable

ambari-2.7.5.0 全部模块源码编译