#go #yaml #prometheus
#Вперед #yaml #prometheus
Вопрос:
Я хочу разархивировать [] байтовую переменную int struct prometheusyml. Вот определение promethuesyml и []байтовой переменной.
type prometheusyml struct {
Global global `yaml:"global,omitempty"`
ScrapeConfigs []scrapeConfigs `yaml:"scrape_configs,omitempty"`
}
type global struct {
ScrapeInterval string `yaml:"scrape_interval,omitempty"`
EvaluationInterval string `yaml:"evaluation_interval,omitempty"`
}
type scrapeConfigs struct {
JobNmaes string `yaml:"job_name,omitempty"`
RelabelConfigs []relabelConfigs `yaml:"relabel_configs,omitempty"`
MetricsPath string `yaml:"metrics_path,omitempty"`
Scheme string `yaml:"scheme,omitempty"`
ConsulSdConfigs []consulSdConfigs `yaml:"consul_sd_configs,omitempty"`
}
type relabelConfigs struct {
SourceLabels string `yaml:"source_labels,omitempty"`
Action string `yaml:"action,omitempty"`
Regex string `yaml:"regex,omitempty"`
Replacement string `yaml:"replacement,omitempty"`
TargetLabel string `yaml:"target_label,omitempty"`
}
type consulSdConfigs struct {
Server string `yaml:"server,omitempty"`
Services []string `yaml:"services,omitempty"`
}
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
scrape_configs:
- job_name: 'consul'
relabel_configs:
- source_labels: ["__meta_consul_service"]
action: replace
regex: "(.*)"
replacement: '${1}'
target_label: "service"
- source_labels: ["__meta_consul_tags"]
action: replace
regex: ',(?:[^,] ,){0}([^=] )=([^,] ),.*'
replacement: '${2}'
target_label: '${1}'
- source_labels: ["__meta_consul_tags"]
action: replace
regex: ',(?:[^,] ,){1}([^=] )=([^,] ),.*'
replacement: '${2}'
target_label: '${1}'
- source_labels: ["__meta_consul_tags"]
action: replace
regex: ',(?:[^,] ,){2}([^=] )=([^,] ),.*'
replacement: '${2}'
target_label: '${1}'
metrics_path: /metrics
scheme: http
consul_sd_configs:
- server: 192.168.0.101:8500
services:
- cfs
Но когда я запустил программу. Он показывает ошибку, которая подразумевает, что source_labels нельзя разархивировать в struct . Вполне вероятно, что [«__meta_consul_tags»] не может быть переведен в строку!!!! Но что я должен сделать, чтобы исправить ошибку? И каков фактический тип?
line 11: cannot unmarshal !!seq into string
Комментарии:
1. Вы объявляете поле, которое должно быть заполнено,
SourceLabels
как astring
, но пытаетесь передать его["__meta_consul_service"]
. Поскольку имя множественное, вы не хотите использовать фрагмент строк ? Этого можно добиться, изменив строку наSourceLabels []string `yaml:"source_labels,omitempty"`
Ответ №1:
source_labels
in relabel_configs
явно представляет собой массив string
. Итак, вам нужно заменить data type
SourceLabels
from string
на []string
. Тогда все готово.
type relabelConfigs struct {
SourceLabels []string `yaml:"source_labels,omitempty"`
Action string `yaml:"action,omitempty"`
Regex string `yaml:"regex,omitempty"`
Replacement string `yaml:"replacement,omitempty"`
TargetLabel string `yaml:"target_label,omitempty"`
}
Простое изменение этого решает вашу проблему.