metric 복원

This commit is contained in:
2024-11-14 19:46:47 +09:00
parent df56a542a1
commit 7015dc99d6

View File

@ -21,6 +21,7 @@ import (
"github.com/Knetic/govaluate" "github.com/Knetic/govaluate"
"repositories.action2quare.com/ayo/gocommon/logger" "repositories.action2quare.com/ayo/gocommon/logger"
"repositories.action2quare.com/ayo/gocommon/metric"
"repositories.action2quare.com/ayo/houston/shared" "repositories.action2quare.com/ayo/houston/shared"
"repositories.action2quare.com/ayo/houston/shared/protos" "repositories.action2quare.com/ayo/houston/shared/protos"
) )
@ -335,7 +336,7 @@ func (hc *houstonClient) launch(meta *procmeta) error {
} }
} }
stdReader := func(r io.ReadCloser, logfilePath string) { stdReader := func(r io.ReadCloser, logfilePath string, verify func(buff []byte) bool) {
defer func() { defer func() {
reco := recover() reco := recover()
if reco != nil { if reco != nil {
@ -358,11 +359,13 @@ func (hc *houstonClient) launch(meta *procmeta) error {
break break
} }
if verify(buff) {
if len(buff) > 0 { if len(buff) > 0 {
logChan <- buff logChan <- buff
} }
} }
} }
}
var evalfile string var evalfile string
if len(meta.logfile) > 0 { if len(meta.logfile) > 0 {
@ -372,7 +375,53 @@ func (hc *houstonClient) launch(meta *procmeta) error {
} }
go func() { go func() {
stdReader(stdout, evalfile+".log") metricExporter := metric.NewPrometheusExport(hc.config.MetricNamespace)
defer metricExporter.Shutdown()
var metricBuffer []byte
readingMetric := false
stdReader(stdout, evalfile+".log", func(buff []byte) bool {
if readingMetric {
metricBuffer = append(metricBuffer, buff...)
} else if buff[0] == metric.METRIC_HEAD_INLINE {
readingMetric = true
metricBuffer = append(metricBuffer, buff[1:]...)
}
if readingMetric {
if metricBuffer[len(metricBuffer)-2] == metric.METRIC_TAIL_INLINE {
readingMetric = false
metricBuffer = metricBuffer[:len(metricBuffer)-2]
if metricBuffer[0] == '{' {
var desc metric.MetricDescription
if err := json.Unmarshal(metricBuffer, &desc); err != nil {
logger.Println("unmarshal metric failed :", err, string(metricBuffer))
return false
}
if desc.ConstLabels == nil {
desc.ConstLabels = make(map[string]string)
}
for k, v := range hc.config.ConstLabels {
desc.ConstLabels[k] = v
}
desc.ConstLabels["job"] = meta.name
metricExporter.RegisterMetric(&desc)
} else {
key, val := metric.ReadMetricValue(metricBuffer)
metricExporter.UpdateMetric(key, val)
}
metricBuffer = metricBuffer[:0]
}
return false
}
return true
})
logger.Println("stdReader is terminated :", meta.name) logger.Println("stdReader is terminated :", meta.name)
if meta.isState(protos.ProcessState_Running) { if meta.isState(protos.ProcessState_Running) {
@ -386,7 +435,7 @@ func (hc *houstonClient) launch(meta *procmeta) error {
} }
}() }()
go stdReader(stderr, evalfile+".err") go stdReader(stderr, evalfile+".err", func([]byte) bool { return true })
logger.Println("startChildProcess :", meta.cmd.Args) logger.Println("startChildProcess :", meta.cmd.Args)