我可以使用什么kubectl命令来获取按特定字段排序的事件,并仅打印事件的特定详细信息?

时间:2017-07-20 23:31:50

标签: kubernetes kubectl go-templates

我只需打印Kubernetes Events的特定字段,按特定字段排序。

这是为了帮助我收集有关我的命名空间的遥测和分析

我怎么能这样做?

5 个答案:

答案 0 :(得分:10)

  

按照命令执行。

它打印按创建时间戳排序的事件。

用户go-template也可以过滤掉kubernetes-event对象的特定字段。

kubectl get events  --sort-by='.metadata.creationTimestamp'  -o 'go-template={{range .items}}{{.involvedObject.name}}{{"\t"}}{{.involvedObject.kind}}{{"\t"}}{{.message}}{{"\t"}}{{.reason}}{{"\t"}}{{.type}}{{"\t"}}{{.firstTimestamp}}{{"\n"}}{{end}}'

答案 1 :(得分:2)

如果您不介意将输出视为JSON:

kubectl get event -o json | jq '.items |= sort_by(.lastTimestamp)'

这需要jq。

答案 2 :(得分:1)

func tokenSourceFromJSON(ctx context.Context, jsonData string, scopes ...string) (oauth2.TokenSource, error) { creds, err := google.CredentialsFromJSON(ctx, []byte(jsonData), scopes...) if err != nil { return nil, err } return creds.TokenSource, nil }

答案 3 :(得分:1)

我正在使用以下命令对时间戳进行排序

kubectl get event --all-namespaces --sort-by='.metadata.managedFields[0].time'

要过滤掉信息,您当然可以将其与@suryakrupa描述的go-template或@Chris Stryczynski描述的jq组合

答案 4 :(得分:0)

这是我使用的Bash函数:

function oc-events {
    {
        echo $'TIME\tNAMESPACE\tTYPE\tREASON\tOBJECT\tSOURCE\tMESSAGE';
        oc get events -o json "$@" \
            | jq -r  '.items | map(. + {t: (.eventTime//.lastTimestamp)}) | sort_by(.t)[] | [.t, .metadata.namespace, .type, .reason, .involvedObject.kind + "/" + .involvedObject.name, .source.component + "," + (.source.host//"-"), .message] | @tsv';
    } \
        | column -s $'\t' -t \
        | less -S
}

您可以像oc-events -Aoc events -n foo等那样使用它。