Я использую ganglia 3.6.0 для мониторинга. У меня есть приложение, которое собирает, агрегирует некоторые показатели для всех хостов в кластере. Затем он отправляет их в gmond. Приложение работает на host1
.Ganglia spoof не работает при отправке данных в gmond
Проблема в том, что при установке spoof = false ганглии в конечном итоге думает, что это показатель, который исходит только от host1
. Фактически, эти показатели генерируются host1
, но для всех хостов в кластере.
Но при установке spoof = true, я ожидаю, что gmond примет имя хоста, которое я указал. Но он не принимает метрики вообще. Показатели - это событие не показано на host1
.
Код, который я использую, копируется из GangliaSink (из hasoop common), который применял формат Ganglia 3.1x.
xdr_int(128); // metric_id = metadata_msg
xdr_string(getHostName()); // hostname
xdr_string(name); // metric name
xdr_int(1); // spoof = True
xdr_string(type); // metric type
xdr_string(name); // metric name
xdr_string(gConf.getUnits()); // units
xdr_int(gSlope.ordinal()); // slope
xdr_int(gConf.getTmax()); // tmax, the maximum time between metrics
xdr_int(gConf.getDmax()); // dmax, the maximum data value
xdr_int(1); /*Num of the entries in extra_value field for
Ganglia 3.1.x*/
xdr_string("GROUP"); /*Group attribute*/
xdr_string(groupName); /*Group value*/
// send the metric to Ganglia hosts
emitToGangliaHosts();
// Now we send out a message with the actual value.
// Technically, we only need to send out the metadata message once for
// each metric, but I don't want to have to record which metrics we did and
// did not send.
xdr_int(133); // we are sending a string value
xdr_string(getHostName()); // hostName
xdr_string(name); // metric name
xdr_int(1); // spoof = True
xdr_string("%s"); // format field
xdr_string(value); // metric value
// send the metric to Ganglia hosts
emitToGangliaHosts();
Я указал имя хоста для каждой метрики. Но он, кажется, не используется/не признан gmond.