Ambari Metrics(相关API,底层数据库,widget等)
Posted 安然_随心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ambari Metrics(相关API,底层数据库,widget等)相关的知识,希望对你有一定的参考价值。
- 功能
- Metrics特点
- 架构
- 用法
- Ambari Metrics API
- Ambari Collector API
- Stack里定义Metrics图表
- Sink实现举例
- Ambari Metrics显示API
- 其他
- 参考文献:
Ambari Metrics系统(AMS)是用来收集、聚合Hadoop集群中监控信息的。
功能
- 能够收集Hadoop及其他Ambari Stacks服务里的Metrics信息;
- 有一定的存储能力,能够将高精度的Metrics信息保存一段时间(例如能够保存5天内的Metrics信息,时间可配置);
- 能够将过期的Metrics信息自动清理掉;
- 在collection time,为外部系统(例如TSDB)提供清晰的集成点(Integration point);
- 在清理时,为外部系统(例如TSDB)提供清晰的集成点;
- 提供默认的过期Metrics信息保存方式,例如,将过期的Metrics信息存入到HDFS中;
- 为过期Metrics信息提供分析工具,例如将信息存储在HDFS中,则提供Hive schema,pig 脚本等用于分析Metrics信息。
Metrics特点
1. 可移植、平台无关;
2. 能够和Ganglia系统兼容;
3. 保持SNMP架构;
4. 无需要Root权限;
5. HA高可用。
架构
用法
- 能够通过Ambari Rest API获取Metrics;
- 能够通过Ambari Web浏览Metrics图表;
- 支持自定义配置Metrics图表;
- 支持在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:当前时间,精确到毫秒
Host级别
Component级别
HOST COMPONENT
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移动日志目录后启动报错