Ambari Metrics接收数据问题

ambari-metrics上报数据存储

  • 场景描述
    ambari集群:ab-01;ab-02;ab-03;ab-04;ab-05;

数据库

  • 使用HBase存储,phoenix做为sql引擎,对上报数据进行存储。
  • 数据属性:Snappy压缩、只有一个Version的数据、多个分不一样时间级别的表存储相同的数据、使用布隆过滤器、block大小为64KB、使用缓存存储block。

存储模式

  • 本地模式
    使用HBase的本地存储模式。默认模式。node

  • 分布式模式
    修改Advanced ams-hbase-site:将hbase.rootdir修改成hdfs://<namenode>:<port>/user/ams/hbase;将dfs.client.read.shortcircuit改成trueredis

  • 启动
    HBASE_CONF_DIR="/etc/ams-hbase/conf" hbase shellsql

表属性

phoenix表shell

**METRIC_RECORD:**用于记录每一个机器上收集的每一个 Metrics属性,1天后清理
**METRIC_RECORD_MINUTE:**聚合统计每一个机器上的Metrics属性,1周后清理
**METRIC_RECORD_HOURLY:**聚合统计每一个机器上的Metrics属性,30天后清理 **METRIC_RECORD_DAILY:**聚合统计每一个机器上的Metrics属性,1年后清理
METRIC_AGGREGATE: 聚合统计全部机器上的Metrics属性(集群),1周后清理
**METRIC_AGGREGATE_MINUTE:**聚合统计全部机器上的Metrics属性(集群),30天后清理
**METRIC_AGGREGATE_HOURLY:**聚合统计全部机器上的Metrics属性(集群),1年后清理
**METRIC_AGGREGATE_DAILY:**聚合统计全部机器上的Metrics属性(集群),2年后清理数据库

参照:
ambari数据表说明json

metrics问题汇总

redis上报数据未存储

  • 场景: 使用ab-01做为数据收集端,向metrics-collector所在节点发送数据。

发送数据的脚本以下:缓存

#!/bin/sh
url=http://$1:6188/ws/v1/timeline/metrics
while [ 1 ]
do
#A=$(redis-cli info | grep total_connections_received: | awk -F ':' '{print $2}')
#echo $A > abc.txt
#sed -i 's/\r//' abc.txt
#A=$(head -1 abc.txt)
millon_time=$(( $(date +%s%N) / 1000000 ))
A=`expr $RANDOM % 10`
json="{
 \"metrics\": [
 {
 \"metricname\": \"$2\",
 \"appid\": \"$3\",
 \"hostname\": \"localhost\",
 \"timestamp\": ${millon_time},
 \"starttime\": ${millon_time},
 \"metrics\": {
 \"${millon_time}\": ${A}
 }
 }
 ]
}"
echo $json | tee -a /root/my_metric.log
curl -i -X POST -H "Content-Type: application/json" -d "${json}" ${url}
sleep 3
done
  • 结果: Ambari的界面上的redis无监控图表。服务器

  • 问题排查app

  1. app timeline server没法启动(修复后排除)。修复过程详情查看: app timeline server 启动问题
  2. 查询Redis的监控数据是否在HBase中存储(数据未存储);
  3. 调试后,发现因为**数据的发送方(ab-01)和接收方(ab-05)**时间差别较大致使metrics-collector将上报数据丢弃。
    远程调试Ambari Metrics System
  • 解决方法
  1. 暂时将ab-01的时间手动调至和ab-05相同的时间,发送数据成功。
  2. 根源解决:部署时间同步服务器。
相关文章
相关标签/搜索