[!NOTE] 这是Opsgenie Kubernetes Event Exporter的活跃分支,因为原项目自2021年11月起已停止维护。本项目由Resmo赞助开发。
Note: This is an active fork of Opsgenie Kubernetes Event Exporter since that is not maintained since November 2021. Development is sponsored by Resmo.
[!NOTE] 本工具在2019年圣地亚哥KubeCon大会上发布。
This tool is presented at KubeCon 2019 San Diego.
本工具允许将常被忽略的Kubernetes事件导出到各种输出,以便用于可观测性或告警目的。您会惊讶于自己错过了什么。
进入deploy/目录并按文件名顺序应用YAML文件。不要忘记根据您的配置需求修改deploy/01-config.yaml文件。配置的补充信息如下:
deploy/``deploy/01-config.yaml## Kustomize
通过Git引用(即提交SHA、标签或分支)使用Kustomize部署。
部署前创建命名空间:
kubectl create namespace monitoring
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- https://github.com/resmoio/kubernetes-event-exporter?ref=master
请使用功能全面的Bitnami Chart。
配置通过YAML文件完成,在Kubernetes中运行时则通过ConfigMap。该工具监控所有事件,用户可以选择根据事件属性过滤掉部分事件。关键事件可以路由到Opsgenie等告警工具,或者所有事件可以转储到Elasticsearch实例。您可以使用命名空间、相关对象上的标签将一些Pod相关事件通过Slack路由给所有者。最终的路由是一个树状结构,具有灵活性。其大致结构如下:
route:
# 主路由
routes:
# 此路由允许转储所有事件,因为它没有匹配字段和丢弃规则
- match:
- receiver: dump
# 此路由开始另一个分支,丢弃所有*test*命名空间中的事件和Normal类型事件
# 用于捕获关键事件
- drop:
- namespace: "*test*"
- type: "Normal"
match:
- receiver: "critical-events-queue"
# 此为用户消息的最终路由
- match:
- kind: "Pod|Deployment|ReplicaSet"
labels:
version: "dev"
receiver: "slack"
receivers:
# 配置接收器详见下文
match)是排他的,所有条件都必须与事件匹配。drop)首先执行以过滤事件。match)相互独立。如果事件匹配某个规则,则进入其子树。match)都匹配,则事件被传递到接收器(receiver)。在配置文件中,您可以将环境变量引用为${API_KEY},因此您可以使用ConfigMap或Secrets来保持配置文件中不包含密钥。
client-side throttling)警告:调整配置中的以下值:kubeQPS: 100 kubeBurst: 500kubeQPS: 100
kubeBurst: 500
[!NOTE] Burst应大致匹配您每分钟的事件QPS,使其为burst的1/5
Burst to roughly match your events per minute QPS to be 1/5 of the burst
maxEventAgeSeconds: 60
Opsgenie是一款告警和值班管理工具。kubernetes-event-exporter可以将事件推送到Opsgenie,以便在发生关键问题时通知值班人员。告警应精确且可操作,因此您需要仔细设计希望在Opsgenie中接收的告警类型。一个良好的起点可能是过滤掉Normal类型的事件,同时一些额外的过滤会有所帮助。以下是示例配置。
# ...
receivers:
- name: "alerts"
opsgenie:
apiKey: xxx
priority: "P3"
message: "Event {{ .Reason }} for {{ .InvolvedObject.Namespace }}/{{ .InvolvedObject.Name }} on K8s cluster"
alias: "{{ .UID }}"
description: " {{ toPrettyJson . }} "
tags:
- "event"
- "{{ .Reason }}"
- "{{ .InvolvedObject.Kind }}"
- "{{ .InvolvedObject.Name }}"
Webhooks是将此工具集成到外部系统的最简单方法。它支持模板和自定义标头,允许您将事件推送到许多可能的外部源。有关更多信息,请参见[自定义负载]。
# ...
receivers:
- name: "alerts"
webhook:
endpoint: "https://my-super-secret-service.com"
headers:
X-API-KEY: "123"
User-Agent: kube-event-exporter 1.0
layout: # 可选
Elasticsearch是一个全文分布式搜索引擎,也可以进行强大的聚合分析。您可以决定将所有事件推送到Elasticsearch,并通过随时间进行有趣的查询来了解哪些镜像被拉取、Pod调度的频率等。您可以观看Kubecon的演讲,了解更多关于聚合和报告的用途。
# ...
receivers:
- name: "dump"
elasticsearch:
hosts:
- http://localhost:9200
index: kube-events
# 可选,可用于基于时间的索引,接受Go时间格式化指令
indexFormat: "kube-events-{2006-01-02}"
username: # 可选
password: # 可选
cloudID: # 可选
apiKey: # 可选
headers: # 可选,可用于在请求头中附加额外的键/值对
# 如果设置为true,允许更新ES中的同一文档(可能对处理计数有用)
useEventID: true|false
# 仅应在6及更低版本的集群中使用Type
# type: kube-event
# 如果设置为true,标签和注解键中的所有点都将替换为下划线。默认为false
deDot: true|false
layout: # 可选
tls: # 可选,TLS高级选项
insecureSkipVerify: true|false # 可选,如果设置为true,将不验证TLS证书
serverName: # 可选,证书颁发的域名,当与连接使用的主机名不匹配时
caFile: # 可选,证书签名机构的CA文件路径
OpenSearch是一个社区驱动的开源搜索和分析套件,源自Apache 2.0许可的Elasticsearch 7.10.2和Kibana 7.10.2。OpenSearch使人们能够轻松地摄入、保护、搜索、聚合、查看和分析数据。这些功能在应用搜索、日志分析等用例中很受欢迎。您可以决定将所有事件推送到OpenSearch,并通过随时间进行有趣的查询来了解哪些镜像被拉取、Pod调度的频率等。
Kinesis 是一项 AWS 服务,允许收集高吞吐量消息并将其用于流处理。
# ...
receivers:
- name: "kinesis"
kinesis:
streamName: "events-pipeline"
region: us-west-2
layout: # 可选
BigQuery 是 Google 提供的大数据分析服务。
receivers:
- name: "my-big-query"
bigquery:
location:
project:
dataset:
table:
credentials_path:
batch_size:
max_retries:
interval_seconds:
timeout_seconds:
Firehose 是一项 AWS 服务,提供高吞吐量消息收集功能,用于流处理。
# ...
receivers:
- name: "firehose"
firehose:
deliveryStreamName: "events-pipeline"
region: us-west-2
layout: # Optional
SNS 是一项 AWS 服务,提供高持久性的发布/订阅消息系统。
# ...
receivers:
- name: "sns"
sns:
topicARN: "arn:aws:sns:us-east-1:1234567890123456:mytopic"
region: "us-west-2"
layout: # Optional
部分接收器支持自定义负载。这有助于将其集成到要求数据采用特定格式的外部系统中。此功能旨在减少编写代码的需求,允许使用 Go 模板(含 github.com/Masterminds/sprig 库扩展)映射事件。它支持递归映射定义,因此您几乎可以创建任何类型的 JSON 以推送到 Webhook、Kinesis 流、SQS 队列等。
# ...
receivers:
- name: pipe
kinesis:
region: us-west-2
streamName: event-pipeline
layout:
region: "us-west-2"
eventType: "kubernetes-event"
createdAt: "{{ .GetTimestampMs }}"
details:
message: "{{ .Message }}"
reason: "{{ .Reason }}"
type: "{{ .Type }}"
count: "{{ .Count }}"
kind: "{{ .InvolvedObject.Kind }}"
name: "{{ .InvolvedObject.Name }}"
namespace: "{{ .Namespace }}"
component: "{{ .Source.Component }}"
host: "{{ .Source.Host }}"
labels: "{{ toJson .InvolvedObject.Labels}}"
Pub/Sub 是一种全托管实时消息服务,允许在独立应用程序之间发送和接收消息。
receivers:
- name: "pubsub"
pubsub:
gcloud_project_id: "my-project"
topic: "kube-event"
create_topic: False
Microsoft Teams 是 Office 365 中的团队协作中心。所有团队对话、文件、会议和应用都位于同一个共享工作区中,您可以在喜爱的移动设备上随时访问。
# ...
receivers:
- name: "ms_teams"
teams:
endpoint: "https://outlook.office.com/webhook/..."
layout: # 可选
Syslog 接收器支持通过 TCP/UDP 将 K8s 事件写入 syslog 守护进程服务器,也可被 rsyslog 消费。
# ...
receivers:
- name: "syslog"
syslog:
network: "tcp"
address: "127.0.0.1:11514"
tag: "k8s.event"
Google 的 BigQuery 是一种无服务器数据仓库解决方案。
receivers:
- name: "my-big-query"
bigquery:
location:
project:
dataset:
table:
credentials_path:
batch_size:
max_retries:
interval_seconds:
timeout_seconds:
将输出直接管道传输到某个文件描述符。
receivers:
- name: "my_pipe"
pipe:
path: "/dev/stdout"
deDot: true|false
receivers:
- name: "eventbridge"
eventbridge:
detailType: "deployment"
source: "cd"
eventBusName: "default"
region: "ap-southeast-1"
details:
message: "{{ .Message }}"
namespace: "{{ .Namespace }}"
reason: "{{ .Reason }}"
object: "{{ .Namespace }}"
receivers:
- name: "loki"
loki:
headers: # 可选
X-Scope-OrgID: tennantID
streamLabels:
foo: bar
url: http://127.0.0.1:3100/loki/api/v1/push
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务