【发布时间】:2018-02-09 07:53:00
【问题描述】:
我正在尝试使用 Prometheus 监控工具,它在我查询的一些指标中提供以下响应:
{
"status": "success",
"data": {
"resultType": "matrix",
"result": [{
"metric": {
"__name__": "node_cpu",
"cpu": "cpu0",
"instance": "localhost:9100",
"job": "node",
"mode": "guest"
},
"values": [
[1518164248.959, "0"],
[1518164263.959, "0"],
[1518164278.959, "0"],
[1518164293.959, "0"],
[1518164308.959, "0"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu0",
"instance": "localhost:9100",
"job": "node",
"mode": "guest_nice"
},
"values": [
[1518164248.959, "0"],
[1518164263.959, "0"],
[1518164278.959, "0"],
[1518164293.959, "0"],
[1518164308.959, "0"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu0",
"instance": "localhost:9100",
"job": "node",
"mode": "idle"
},
"values": [
[1518164248.959, "11969.01"],
[1518164263.959, "11983.93"],
[1518164278.959, "11998.83"],
[1518164293.959, "12013.73"],
[1518164308.959, "12028.64"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu0",
"instance": "localhost:9100",
"job": "node",
"mode": "iowait"
},
"values": [
[1518164248.959, "29.2"],
[1518164263.959, "29.21"],
[1518164278.959, "29.21"],
[1518164293.959, "29.22"],
[1518164308.959, "29.23"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu0",
"instance": "localhost:9100",
"job": "node",
"mode": "irq"
},
"values": [
[1518164248.959, "0"],
[1518164263.959, "0"],
[1518164278.959, "0"],
[1518164293.959, "0"],
[1518164308.959, "0"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu0",
"instance": "localhost:9100",
"job": "node",
"mode": "nice"
},
"values": [
[1518164248.959, "2.49"],
[1518164263.959, "2.49"],
[1518164278.959, "2.49"],
[1518164293.959, "2.49"],
[1518164308.959, "2.49"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu0",
"instance": "localhost:9100",
"job": "node",
"mode": "softirq"
},
"values": [
[1518164248.959, "1.47"],
[1518164263.959, "1.48"],
[1518164278.959, "1.48"],
[1518164293.959, "1.48"],
[1518164308.959, "1.48"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu0",
"instance": "localhost:9100",
"job": "node",
"mode": "steal"
},
"values": [
[1518164248.959, "0"],
[1518164263.959, "0"],
[1518164278.959, "0"],
[1518164293.959, "0"],
[1518164308.959, "0"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu0",
"instance": "localhost:9100",
"job": "node",
"mode": "system"
},
"values": [
[1518164248.959, "34.36"],
[1518164263.959, "34.38"],
[1518164278.959, "34.41"],
[1518164293.959, "34.44"],
[1518164308.959, "34.46"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu0",
"instance": "localhost:9100",
"job": "node",
"mode": "user"
},
"values": [
[1518164248.959, "40.93"],
[1518164263.959, "40.96"],
[1518164278.959, "41"],
[1518164293.959, "41.05"],
[1518164308.959, "41.08"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu1",
"instance": "localhost:9100",
"job": "node",
"mode": "guest"
},
"values": [
[1518164248.959, "0"],
[1518164263.959, "0"],
[1518164278.959, "0"],
[1518164293.959, "0"],
[1518164308.959, "0"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu1",
"instance": "localhost:9100",
"job": "node",
"mode": "guest_nice"
},
"values": [
[1518164248.959, "0"],
[1518164263.959, "0"],
[1518164278.959, "0"],
[1518164293.959, "0"],
[1518164308.959, "0"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu1",
"instance": "localhost:9100",
"job": "node",
"mode": "idle"
},
"values": [
[1518164248.959, "11980.39"],
[1518164263.959, "11995.32"],
[1518164278.959, "12010.24"],
[1518164293.959, "12025.17"],
[1518164308.959, "12040.07"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu1",
"instance": "localhost:9100",
"job": "node",
"mode": "iowait"
},
"values": [
[1518164248.959, "30.36"],
[1518164263.959, "30.36"],
[1518164278.959, "30.36"],
[1518164293.959, "30.36"],
[1518164308.959, "30.36"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu1",
"instance": "localhost:9100",
"job": "node",
"mode": "irq"
},
"values": [
[1518164248.959, "0"],
[1518164263.959, "0"],
[1518164278.959, "0"],
[1518164293.959, "0"],
[1518164308.959, "0"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu1",
"instance": "localhost:9100",
"job": "node",
"mode": "nice"
},
"values": [
[1518164248.959, "0.02"],
[1518164263.959, "0.02"],
[1518164278.959, "0.02"],
[1518164293.959, "0.02"],
[1518164308.959, "0.02"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu1",
"instance": "localhost:9100",
"job": "node",
"mode": "softirq"
},
"values": [
[1518164248.959, "0.64"],
[1518164263.959, "0.64"],
[1518164278.959, "0.64"],
[1518164293.959, "0.64"],
[1518164308.959, "0.64"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu1",
"instance": "localhost:9100",
"job": "node",
"mode": "steal"
},
"values": [
[1518164248.959, "0"],
[1518164263.959, "0"],
[1518164278.959, "0"],
[1518164293.959, "0"],
[1518164308.959, "0"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu1",
"instance": "localhost:9100",
"job": "node",
"mode": "system"
},
"values": [
[1518164248.959, "22.17"],
[1518164263.959, "22.18"],
[1518164278.959, "22.2"],
[1518164293.959, "22.22"],
[1518164308.959, "22.24"]
]
}, {
"metric": {
"__name__": "node_cpu",
"cpu": "cpu1",
"instance": "localhost:9100",
"job": "node",
"mode": "user"
},
"values": [
[1518164248.959, "34.07"],
[1518164263.959, "34.09"],
[1518164278.959, "34.1"],
[1518164293.959, "34.11"],
[1518164308.959, "34.16"]
]
}]
}
}
我正在尝试将其反序列化为一个对象,除此部分外,它正在工作:
"values": [
[1518164248.959, "0"],
[1518164263.959, "0"],
[1518164278.959, "0"],
[1518164293.959, "0"],
[1518164308.959, "0"]
]
它正在反序列化,但value 始终是null。
我认为这是因为我通过对象错误地解释了这些数据。这就是我所拥有的:
public class CpuMetrics
{
public string status { get; set; }
public CpuData data { get; set; }
}
public class CpuData
{
public string resultType { get; set; }
public List<Result> result { get; set; }
}
public class Result
{
public Metric metric { get; set; }
public List<object> value { get; set; }
}
public class Metric
{
public string __name__ { get; set; }
public string cpu { get; set; }
public string instance { get; set; }
public string job { get; set; }
public string mode { get; set; }
}
返回null的对象示例:
由于这些数据始终是一致的,我认为在这种情况下我不必创建自定义 JsonConverter。我错了吗?我应该创建自己的JsonConverter 扩展来管理这些特定字段吗?
【问题讨论】:
-
@ManfredRadlwimmer 我尝试了几种不同的方法,但似乎没有任何效果。我附上了我的 VS 示例,其中包含
List<String>更改的结果。 -
该屏幕截图产生的结果与您显示的代码不同。请贴出真实代码,我无法重现。
-
任何想要修改它的人,here is a Fiddle of the existing code。
-
@Dandy 您可以将数据视为
Tuple<double,string>并使用此方法:Deserialize JSON array of arrays into List of Tuples -
@ManfredRadlwimmer 在您的小提琴中您需要反序列化为
CpuMetrics而不是Result,然后它才能正常工作并正确解析值。至于问题,@Dandy 是所有Result对象上的变量 null 还是只是那个?你确定 json 是你认为的那样吗?