我有一些数据采用以下格式:
[
{
"level": "error",
"ts": "2021-09-08T17:34:39.163Z",
"caller": "controller/events.go:39",
"msg": "Metric query failed for p50 Latency: request failed: Get \"https://blah\": context deadline exceeded",
"canary": "blah",
"stacktrace": "github.com/fluxcd/flagger/pkg/controller.(*Controller).recordEventErrorf\n\t/workspace/pkg/controller/events.go:39\ngithub.com/fluxcd/flagger/pkg/controller.(*Controller).runMetricChecks\n\t/workspace/pkg/controller/scheduler_metrics.go:280\ngithub.com/fluxcd/flagger/pkg/controller.(*Controller).runAnalysis\n\t/workspace/pkg/controller/scheduler.go:682\ngithub.com/fluxcd/flagger/pkg/controller.(*Controller).advanceCanary\n\t/workspace/pkg/controller/scheduler.go:380\ngithub.com/fluxcd/flagger/pkg/controller.CanaryJob.Start.func1\n\t/workspace/pkg/controller/job.go:39"
},
{
"level": "error",
"ts": "2021-09-09T11:22:33.162Z",
"caller": "controller/events.go:39",
"msg": "Metric query failed for p50 Latency: request failed: Get \"https://blah\": context deadline exceeded",
"canary": "blah",
"stacktrace": "github.com/fluxcd/flagger/pkg/controller.(*Controller).recordEventErrorf\n\t/workspace/pkg/controller/events.go:39\ngithub.com/fluxcd/flagger/pkg/controller.(*Controller).runMetricChecks\n\t/workspace/pkg/controller/scheduler_metrics.go:280\ngithub.com/fluxcd/flagger/pkg/controller.(*Controller).runAnalysis\n\t/workspace/pkg/controller/scheduler.go:682\ngithub.com/fluxcd/flagger/pkg/controller.(*Controller).advanceCanary\n\t/workspace/pkg/controller/scheduler.go:380\ngithub.com/fluxcd/flagger/pkg/controller.CanaryJob.Start.func1\n\t/workspace/pkg/controller/job.go:39"
}
]我试图按日期过滤这些数据,例如,我希望在某个日期之后找到所有这些事件。时间戳1631122500应该在这里筛选出顶部条目(使用ts == 2021-09-08T17:34:39.163Z)。
如果我应用命令| jq -s '.[] | select(.ts | fromdateiso8601 > 1475625600)',它将返回错误jq: error (at <stdin>:8): date "2021-08-30T21:52:34.039Z" does not match format "%Y-%m-%dT%H:%M:%SZ"。
我通过应用以下修改来修改ts字段:jq -s '.[].ts | split(".")[0] | strptime("%Y-%m-%dT%H:%M:%S") | mktime | strftime("%Y-%m-%dT%H:%M:%SZ")'。这将返回像"2021-09-08T18:34:39Z"这样的值,这是在前面的错误中指定的格式。
我无法理解的是如何将这些ts值转换为正确的格式,然后使用select从指定的时间开始按日期进行筛选。我尝试将jq <modify>管道传输到| jq <select>,但这给了我一个关于jq无法遍历字符串的错误。
https://stackoverflow.com/questions/69116628
复制相似问题