【发布时间】:2019-11-12 17:29:17
【问题描述】:
使用 jq,我如何从下面的 json 输出中提取主机、名称和 date_happened 字段?我在 stackoverflow 上阅读了关于此的另一个线程,但似乎仍然无法理解。
-谢谢
{
"events": [
{
"alert_type": "success",
"children": [
{
"alert_type": "error",
"date_happened": 1573502725,
"id": "5188183926379101887"
},
{
"alert_type": "success",
"date_happened": 1573503145,
"id": "5188190972457497744"
}
],
"comments": [],
"date_happened": 1573502725,
"device_name": null,
"host": "i-0e4b192579a9b423b",
"id": 5188183933173874377,
"is_aggregate": true,
"priority": "normal",
"resource": "/api/v1/events/5188183933173874377",
"source": "Monitor Alert",
"tags": [
"autoscaling_group:app2_backend-asg-prod",
"availability-zone:us-east-1b",
"datadog-agent:true",
"environment:prod",
"host:i-0e6b192579a9b423b",
"iam_profile:app2_backend_instance_profile",
"image:ami-2769055d",
"instance-type:m4.large",
"monitor",
"name:app2_backend-prod",
"region:us-east-1",
"role:app2_backend",
【问题讨论】:
-
您应该发布完整、有效的 JSON 并显示您的预期输出 - 理想情况下,还应包括您尝试过的内容以及其结果与您的预期有何不同。完整/有效的 JSON 很重要,因此人们可以测试他们的答案。
-
谢谢。使用与我原始帖子中相同的 JSON 文本,并使用您的示例,我没有得到应该是 app2_backend-prod 的“名称”字段。我得到了其他两个领域。
l' -w' l' -w' l[-1] l' "i-0e4b192579a9b423b" 1573502725 -
这是因为您的
name并不是真正的 JSON 字段(标签),它是 JSON 字符串值的一部分。如果您想在 JSON 字符串值中匹配它,则需要使用正则表达式匹配:<file.json jtc -w'<host>l' -w'<host>l[-1]<date_happened>l' -w'<^name:>R'。 -
如果你想匹配没有
name:前缀的值,那么像这样使用它:<file.json jtc -w'<host>l' -w'<host>l[-1]<date_happened>l' -w'<^name:(.*)>R' -T'{{$1}}'。 -
如何获得 OK 的“状态”值? ], "text": "%%%\n查询在主机上恢复:i-0e4b192579a9b423b,name:app2_backend-prod \n\n!snapshot\n\n{{#is_alert}} \n状态:问题\n主机: {{name.name}} \n主机 ID:{{host.name}}\n主机 IP:{{host.ip}}\n{{/is_alert}}\n\n{{#is_warning}} \n状态:问题\n主机:{{name.name}} \n主机 ID:{{host.name}}\n主机 IP:{{host.ip}}\n{{/is_warning}}\n\n\n{{# is_recovery}} \n状态:正常\n主机: