本文档主要介绍如何使用eventer将Kubernetes中的事件采集到日志服务。
日志服务支持通过eventer方式和K8s事件中心采集Kubernetes中的事件。
eventer方式
Kubernetes事件采集相关源码请参见GitHub。
K8s事件中心(推荐)
日志服务还支持通过日志服务控制台的K8s事件中心采集Kubernetes中的事件并自动创建可视化报表和相关告警。更多信息,请参见创建并使用K8s事件中心。
步骤一:创建K8s事件中心
登录日志服务控制台。
在日志应用区域的智能运维页签中,单击K8s事件中心。
在事件中心管理页面,单击添加。
在创建事件中心面板,配置相关参数。
如果选择已有Project,则从Project下拉框中选择已创建的Project,用于管理K8s事件中心相关资源(Logstore、仪表盘等)。
如果选择从容器服务选择K8s集群,则从K8s集群下拉框中选择已创建的K8s集群。通过此方式创建K8s事件中心,日志服务默认创建一个名为k8s-log-{cluster-id}的Project,用于管理K8s事件中心相关资源(Logstore、仪表盘等)。
说明创建K8s事件中心后,日志服务自动在目标Project中生成一个名为k8s-event的Logstore,并生成相关联的仪表盘等。
单击下一步。
步骤二:创建采集配置
阿里云Kubernetes
如果是ACK集群,则对应阿里云Kubernetes组件中的ack-node-problem-detector组件已集成eventer和node-problem-detector功能,您只需要部署该组件。更多信息,请参见事件监控。如果是ACK Serverless集群,您需要部署kube-eventer组件。
此处以ACK集群为例。
登录容器服务管理控制台。
在左侧导航栏中,单击集群。
在集群列表页面中,单击目标集群最右侧的更多。
选择 。
在日志与监控页签中,找到ack-node-problem-detector,然后单击安装。
安装完成后,您可以选择
,查看事件中心仪表盘。
其他Kubernetes
部署eventer。
安装kubectl工具。具体操作,请参见通过kubectl连接Kubernetes集群。
使用以下样例创建名为eventer.yaml的配置文件。
apiVersion: apps/v1 kind: Deployment metadata: labels: name: kube-eventer name: kube-eventer namespace: kube-system spec: replicas: 1 selector: matchLabels: app: kube-eventer template: metadata: labels: app: kube-eventer annotations: scheduler.alpha.kubernetes.io/critical-pod: '' spec: dnsPolicy: ClusterFirstWithHostNet serviceAccount: kube-eventer containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/kube-eventer:v1.2.5-cc7ec54-aliyun name: kube-eventer command: - "/kube-eventer" - "--source=kubernetes:https://kubernetes.default" ## .send to sls ## --sink=sls:https://{endpoint}?project={project}&logStore=k8s-event®ionId={region-id}&internal=false&accessKeyId={accessKeyId}&accessKeySecret={accessKeySecret} - --sink=sls:https://cn-beijing.log.aliyuncs.com?project=k8s-xxxx&logStore=k8s-event®ionId=cn-beijing&internal=false&accessKeyId=xxx&accessKeySecret=xxx env: # If TZ is assigned, set the TZ value as the time zone - name: TZ value: "Asia/Shanghai" volumeMounts: - name: localtime mountPath: /etc/localtime readOnly: true - name: zoneinfo mountPath: /usr/share/zoneinfo readOnly: true resources: requests: cpu: 10m memory: 50Mi limits: cpu: 500m memory: 250Mi volumes: - name: localtime hostPath: path: /etc/localtime - name: zoneinfo hostPath: path: /usr/share/zoneinfo --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kube-eventer rules: - apiGroups: - "" resources: - events verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kube-eventer roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kube-eventer subjects: - kind: ServiceAccount name: kube-eventer namespace: kube-system --- apiVersion: v1 kind: ServiceAccount metadata: name: kube-eventer namespace: kube-system
配置项
类型
是否必选
说明
endpoint
string
必选
日志服务的Endpoint。更多信息,请参见服务入口。
project
string
必选
日志服务的Project。
logStore
string
必选
日志服务的Logstore。
internal
string
自建Kubernetes:必选。
自建Kubernetes必须设置为false。
regionId
string
自建Kubernetes:必选。
日志服务所在地域ID。更多信息,请参见服务入口。
accessKeyId
string
自建Kubernetes:必选。
AccessKey ID,建议使用RAM用户的AccessKey信息。更多信息,请参见访问密钥。
accessKeySecret
string
自建Kubernetes:必选。
AccessKey Secret,建议使用RAM用户的AccessKey信息。更多信息,请参见访问密钥。
执行以下命令,将eventer.yaml中的配置应用到集群。
kubectl apply -f eventer.yaml
预期输出:
deployment.apps/kube-eventer created clusterrole.rbac.authorization.k8s.io/kube-eventer created clusterrolebinding.rbac.authorization.k8s.io/kube-eventer created serviceaccount/kube-eventer created
部署node-problem-detector。
具体操作,请参见Github。
步骤三:使用K8s事件中心
创建K8s事件中心并部署Eventer和NodeProblemDetector后,即可使用K8s事件中心,包括查看事件总览、查询事件详情、查看Pod生命周期、查看节点事件、查看核心组件事件、设置告警、自定义查询和更新版本等操作。
在K8s事件中心页面,找到目标K8s事件中心实例,单击图标,可进行如下操作。
操作 | 说明 |
查看事件总览 | 事件总览页面用于展示核心事件的汇总统计信息。例如事件总数、今天Error事件数与昨天的对比、告警项统计、Error事件趋势、Pod OOM详细信息等。 说明 目前Pod OOM信息不能精确到Pod,只能定位到事件发生的节点、进程名、进程号。您可以通过自定义查询查找Pod OOM发生时间点附近的Pod重启事件,以此定位到具体的Pod。 |
查询事件详情 | 事件详情查询页面用于展示经过各种维度(事件类型、事件目标、Host、Namespace、Name)过滤后的事件详细信息。 |
查看Pod生命周期 | Pod生命周期页面以图形化方式展示Pod整个生命周期中的事件信息。您还可以通过事件等级筛选重要的Pod事件。 |
查看节点事件 | 节点事件页面用于展示节点事件详情。例如Node生命周期、事件列表等。 |
查看核心组件事件 | 核心组件事件页面用于展示核心组件事件详情。例如ECS重启失败、URL模式未执行等。 |
设置告警 | 在告警配置页面,您可以为K8s事件中心设置告警。具体操作,请参见设置告警。 |
自定义查询 | 在自定义查询页面,您可以自定义查询和分析语句。 K8s事件中心的所有事件都保存在Logstore中,您可以使用Logstore中的所有功能,例如自定义查询、消费事件、创建自定义报表、创建自定义告警等。更多信息,请参见查询和分析日志。 如果您要访问K8s事件中心所在的Project,可通过以下两种方式获取Project名称。
|
更新版本 | 在版本更新页面,您可以升级K8s事件中心的版本。 |
在指定的Logstore查询到日志后,日志样例及参数说明请参见日志样例。
日志样例
采集到的日志样例如下所示。
hostname: cn-hangzhou.i-***********"
level: Normal
pod_id: 2a360760-****
pod_name: logtail-ds-blkkr
event_id: {
"metadata":{
"name":"logtail-ds-blkkr.157b7cc90de7e192",
"namespace":"kube-system",
"selfLink":"/api/v1/namespaces/kube-system/events/logtail-ds-blkkr.157b7cc90de7e192",
"uid":"2aaf75ab-****",
"resourceVersion":"6129169",
"creationTimestamp":"2019-01-20T07:08:19Z"
},
"involvedObject":{
"kind":"Pod",
"namespace":"kube-system",
"name":"logtail-ds-blkkr",
"uid":"2a360760-****",
"apiVersion":"v1",
"resourceVersion":"6129161",
"fieldPath":"spec.containers{logtail}"
},
"reason":"Started",
"message":"Started container",
"source":{
"component":"kubelet",
"host":"cn-hangzhou.i-***********"
},
"firstTimestamp":"2019-01-20T07:08:19Z",
"lastTimestamp":"2019-01-20T07:08:19Z",
"count":1,
"type":"Normal",
"eventTime":null,
"reportingComponent":"",
"reportingInstance":""
}
日志字段 | 数据类型 | 说明 |
hostname | String | 事件发生所在的主机名。 |
level | String | 日志等级,包括Normal、Warning。 |
pod_id | String | Pod的唯一标识,仅在该事件类型和Pod相关时才具有此字段。 |
pod_name | String | Pod名,仅在该事件类型和Pod相关时才具有此字段。 |
event_id | JSON | 事件的详细内容。该字段为JSON类型的字符串。 |