메트릭 중복 등록시 크래시 막음

This commit is contained in:
2023-11-23 14:55:37 +09:00
parent b2ff0e8ffc
commit d18fe3e3a1

View File

@ -250,19 +250,28 @@ func (hc *houstonClient) launch(meta *procmeta) error {
}
if readingMetric {
logger.Println("readingMetric is on :", string(buff))
if metricBuffer[len(metricBuffer)-2] == metric.METRIC_TAIL_INLINE {
readingMetric = false
logger.Println("readingMetric is off :", string(buff))
metricBuffer = metricBuffer[:len(metricBuffer)-2]
if metricBuffer[0] == '{' {
var metric metric.MetricDescription
json.Unmarshal(metricBuffer, &metric)
if err := json.Unmarshal(metricBuffer, &metric); err != nil {
logger.Println("unmarshal metric failed :", err, string(metricBuffer))
continue
}
exporter := newExporterForPrometheus()
accessor := exporter.registMetric(childProcName, metric)
prometheus.MustRegister(exporter)
if _, registered := metricValues[metric.Key]; !registered {
exporter := newExporterForPrometheus()
accessor := exporter.registMetric(childProcName, metric)
metricValues[metric.Key] = accessor
prometheus.Register(exporter)
metricValues[metric.Key] = accessor
logger.Println("metric registered :", metric)
}
} else {
keybytes := metricBuffer[:8]
valbits := binary.BigEndian.Uint64(metricBuffer[8:])