使用heptiolabs/eventrouter收集K8S的事件
k8s的heapster项目中止以后,
事件收集的项目,就推荐使用https://github.com/heptiolabs/eventrouter项目了。
部署文档很简单,但有两个问题要解决:
一,eventrouter的官方镜像如何拿到?
官方yaml文件里,镜像地址为:
gcr.io/heptio-images/eventrouter:latest
众所周知,这个url不***,在国内是不可能下载的。
于是,我们迂回一点操作。
1,在github上新建一个项目,里面只有一个文件,Dockerfile。内容可如下:
FROM gcr.io/heptio-images/eventrouter:latest MAINTAINER chengang <aguncn@163.com>
2,在dockerhub里,新建一个自动编译的仓库,项目指向github里的项目。

3,编译成功之后,docker pull命令下载即可。
二,如何将sink配置为kafka?
默认的sink为glog,是控制台输出,那如何将集件输出到kafka中的呢?
这时,就不得不吐槽一下官方文件文档了,连一个像样的配置demo都找不到。
于是,只好看看源文件中go的接口,凑合了一个最简版的json文件。
https://github.com/heptiolabs/eventrouter/blob/master/sinks/interfaces.go
case "kafka":
viper.SetDefault("kafkaBrokers", []string{"kafka:9092"})
viper.SetDefault("kafkaTopic", "eventrouter")
viper.SetDefault("kafkaAsync", true)
viper.SetDefault("kafkaRetryMax", 5)
brokers := viper.GetStringSlice("kafkaBrokers")
topic := viper.GetString("kafkaTopic")
async := viper.GetBool("kakfkaAsync")
retryMax := viper.GetInt("kafkaRetryMax")
e, err := NewKafkaSink(brokers, topic, async, retryMax)
if err != nil {
panic(err.Error())
}
return e
最终作成的yaml文件内容如下:# Copyright 2017 Heptio Inc.## Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
apiVersion: v1
kind: ServiceAccount
metadata:
name: eventrouter
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: eventrouter
rules:
- apiGroups: [""]
resources: ["events"]
verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: eventrouter
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: eventrouter
subjects:
- kind: ServiceAccount
name: eventrouter
namespace: kube-system
---
apiVersion: v1
data:
config.json: |-
{
"sink": "kafka" "kafkaBrokers": ["x1:9092", "x2:9092"]
}
kind: ConfigMap
metadata:
name: eventrouter-cm
namespace: kube-system
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: eventrouter
namespace: kube-system
labels:
app: eventrouter
spec:
replicas: 1
selector:
matchLabels:
app: eventrouter
template:
metadata:
labels:
app: eventrouter
tier: control-plane-addons
spec:
containers:
- name: kube-eventrouter
image: harbor/3rd_part/eventrouter:20190311
imagePullPolicy: IfNotPresent
volumeMounts:
- name: config-volume
mountPath: /etc/eventrouter
serviceAccount: eventrouter
volumes:
- name: config-volume
configMap:
name: eventrouter-cm
如果kafka后面接的elk,那么,在kibana中看到的样子如下:

使用heptiolabs/eventrouter收集K8S的事件的更多相关文章
- 使用kubernetes-event-exporter将k8s的事件导出到elasticsearch日志系统中
使用kubernetes-event-exporter将k8s的事件导出到elasticsearch日志系统中 前提 版本 kubernetes v1.17.9 kubernetes-event-ex ...
- K8S(15)监控实战-ELK收集K8S内应用日志
K8S监控实战-ELK收集K8S内应用日志 目录 K8S监控实战-ELK收集K8S内应用日志 1 收集K8S日志方案 1.1 传统ELk模型缺点: 1.2 K8s容器日志收集模型 2 制作tomcat ...
- ELK:收集k8s容器日志最佳实践
简介 关于日志收集这个主题,这已经是第三篇了,为什么一再研究这个课题,因为这个课题实在太重要,而当今优秀的开源解决方案还不是很明朗: 就docker微服务化而言,研发有需求标准输出,也有需求文件输出, ...
- Filebeat 收集K8S 日志,生产环境实践
根据生产环境要求,需要采集K8Spod 日志,和开发协商之后,pod中应用会将日志输出到容器终端上,这时可以直接用filebeat 采集node节点上面的/var/log/containers/*.l ...
- Android面试收集录6 事件分发机制
转自:秋招面试宝典. 一. 基础认知 1.1 事件分发的对象是谁? 答:事件 当用户触摸屏幕时(View或ViewGroup派生的控件),将产生点击事件(Touch事件). Touch事件相关细节(发 ...
- 使用filebeat收集k8s上pod里的容器日志配置文件模板
具体使用有待商榷 filebeat.inputs: - type: container paths: - /var/log/containers/*.log processors: - add_kub ...
- k8s安装之eventrouter.yaml
k8s的heapster项目中止以后, 事件收集的项目,就推荐使用https://github.com/heptiolabs/eventrouter项目了 Eventrouter This repos ...
- k8s日志收集方案
k8s日志收集方案 三种收集方案的优缺点: 下面我们就实践第二种日志收集方案: 一.安装ELK 下面直接采用yum的方式安装ELK(源码包安装参考:https://www.cnblogs.com/De ...
- K8S学习笔记之k8s日志收集实战
0x00 简介 本文主要介绍在k8s中收集应用的日志方案,应用运行中日志,一般情况下都需要收集存储到一个集中的日志管理系统中,可以方便对日志进行分析统计,监控,甚至用于机器学习,智能分析应用系统问题, ...
随机推荐
- CGI,FastCGI,PHP-CGI与PHP-FPM区别详解【转】
CGI CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上. CGI可以用任何一 ...
- Xamarin AVD x86 问题
inspired by https://stackoverflow.com/questions/34282243/error-while-starting-emulator/34282302#3428 ...
- linux TLB表
TLB - translation lookaside buffer 快表,直译为旁路快表缓冲,也可以理解为页表缓冲,地址变换高速缓存. 由于页表存放在主存中,因此程序每次访存至少需要两次:一次访存获 ...
- mina使用总结
1.在会话中获得远程IP和端口 @Override public void messageReceived(IoSession session, Object message) throws Exce ...
- 安装v2ray+SwitchyOmega使用谷歌***
系统环境:ubuntu18.04 1.安装v2ray 在root用户下执行命令:bash < (curl -L -s https://install.direct/go.sh) $ cd /e ...
- maven项目部署到Tomcat
1.安装Tomcat,地址:http://tomcat.apache.org,我安装的版本为9.0.0.M22,安装的目录为C:\apache-tomcat,设置环境变量CATALINA_HOME为C ...
- Spring通过SchedulerFactoryBean实现调度任务的配置(定时器)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 35)django-验证码
一:验证码原理 第一次访问GET,后台: 1.创建一张图片 2.在图片中写入随机字符串 3.将图片写到制定文件 4.打开指定目录文件,读取内容 5.把生成的验证码保存在session中 6. 通过Ht ...
- python-socket编程(入门,网络基础)
一.网络基础 网络建立的目的是为了数据交互(通信) 如何实现通信: 1.建立好底层的物理连接介质 2.有一套统一的通信标准,称之为互联网协议 1.osi七层协议 互联网协议按照功能的不同分为osi七层 ...
- js---数组排序法(冒泡排序;快速排序)
1.冒泡排序 原理:将数组的相邻两个元素进行比较,大的就往后移,小的往前,依次比较并且进行递减迭代. var arr =[54,36,89,1,3,5,2]; function sortArr(arr ...