go - 关于将 yaml 解组为结构的错误
问题描述
我想解组一个 []byte 变量 int struct prometheusyml。这里是 promethuesyml 和 []byte 变量的定义。
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 无法解组到结构中。很可能 ["__meta_consul_tags"] 不能翻译成字符串!!!!但是我应该怎么做才能修复这个错误?实际类型是什么?
line 11: cannot unmarshal !!seq into string
解决方案
source_labels
inrelabel_configs
显然是一个数组string
。data type
所以,你必须替换SourceLabels
from string
to []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"`
}
只需更改它即可解决您的问题。
推荐阅读
- node.js - firebaseui-web:如何在 Node.js 后端识别用户?
- javascript - 谷歌未定义:如何检查是否在 React 中加载了谷歌地图脚本
- .net - ASP.NET MVC 5 中的表单/Windows/Passport 身份验证与身份验证过滤器
- windows - 使用 SVN 命令行的结帐操作
- node.js - 文件完全上传到磁盘时的 Multer 回调
- java - 如何使用硒验证从chrome浏览器下载的excel内容并处理下载的excel文件的受保护视图
- android - Realm Android:isValid()、isLoaded()、isManaged() 是什么意思?
- python - 在 ttk.Treeview 上覆盖删除方法的问题
- jquery - 具有可调整大小和可拖动的元素中的 jquery ui 问题
- javascript - 如何检查是否已过 2 小时?