kubernets基于容器日志的报警和服务自动恢复
demo地址
https://github.com/cclient/kubernetes-filebeat-collector
高可用还谈不上,是对kubernete一种服务异常重启恢复的补充方案
之前已经完成了kubernete的日志的收集,日志监控,没什么好说的 kibana grafana都是很成熟的ui产品,也都支持elasticsearch数据源
主要关注点是报警及报警信息的应用
kibana基础版本不支持报警,es 产品x-pack支持报警,但这东西收费,所以不考虑
有es报警的部分产品 如ElastAlert,不知是否支持es6.3,暂时不考虑
而grafana本身也支持报警 alerting
结合grafana本身的ui,效果很不错,同时支持多种alert 规则,其中包含webhook,webhook的定制能力很强,可以在接收到报警日志后作一些自定义的事情
由于grafana已经可用,这里选型grafana作测试


kubernetes 的 liveness probe 功能有限
如 kube的 liveness probe 如http 是监听端口是否可用,有时会有这样的情况,服务的状态还可用,但已经无法完成有效的业务处理
比如,web服务可用,端口正常监听,但web服务依赖的后端服务出问题了,实际所有请求处理都失败(日志状态会区别于正常服务),这种情况kube默认的liveness probe 规则是无法察觉的,需要作更进一步的定制。
而如果根据为每个服务定制专用的liveness probe服务,成本比较高,也会对原项目有较高的侵入性
我们可以采用基于日志来间接判断服务状态的方案,虽然不是100%准确,但侵入小,适用面广,可以作为一个基础的方案,对准确性有更高要求的再后续定制
结合kubernetes的liveness probe,可以实现基于日志状况,报警,并重启服务
实现起来并不复杂
deploy->filebeat日志收集->写入es->grafana ui->grafana alerting 日志触发报警规则(例,10分钟内count数为0)-> webhook接收报警 -> 记录当前服务状态为失效
另外部署一套服务,查询服务状态
liveness probe 检查服务状态,若返回当前服务失效,则k8会自动重启服务
这样的流程,作为对kube liveness的简单补充
功能已经实现完成
服务状态持久化,选择简单的redis
而服务状态的api实现,这里直接用webhook(golang 实现的运维工具),配置规则即可,没必要另外开发
grafana 报警规则的配置,文字也不好说明,直接看图
启动服务时 kubernetes-init
del key
检查服务状态 kubernetes-liveness
exists key
webhook收到报警 grafana-redis-alert
set key 1
最后yml示例
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: consume
namespace: default
labels:
app: consume
spec:
replicas: 1
template:
metadata:
labels:
app: consume
spec:
containers:
- name: consume
imagePullPolicy: Always
image: cuidapeng/busybox-curl:v0.1
# del consume
command: ['sh', '-c', 'curl http://alert_hook_server:9000/hooks/kubernetes-init?contain=consume && echo The app is running! && sleep 3600']
livenessProbe:
exec:
command: ['sh', '-c', 'return $(curl -fsSL http://alert_hook_server:9000/hooks/kubernetes-liveness?contain=consume)']
initialDelaySeconds: 5
periodSeconds: 5
initContainers:
- name: init-myservice
image: cuidapeng/busybox-curl:v0.1
command: ['sh', '-c', 'curl http://alert_hook_server:9000/hooks/kubernetes-init?contain=consume;']
kubernets基于容器日志的报警和服务自动恢复的更多相关文章
- 基于容器微服务的PaaS云平台设计(二)通过kubernetes实现微服务容器管理
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://www.cnblogs.com/SuperXJ/ 上一章描述了基于spring cloud的微服务实例(实 ...
- 【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志
如题: docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志 场景再现: docker部署并启动 ...
- 个推Node.js 微服务实践:基于容器的一站式命令行工具链
作者:个推Node.js 开发工程师 之诺 背景与摘要 由于工程数量的快速增长,个推在实践基于 Node.js 的微服务开发的过程中,遇到了如下问题: 1. 每次新建项目都需要安装一次依赖,这些依赖之 ...
- 基于容器微服务的PaaS云平台设计(一) 实现容器微服务和持续集成
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://www.cnblogs.com/SuperXJ/ 前言:关于什么是容器微服务PaaS和容器微服务PaaS的 ...
- 分布式系统的应用程序性能监视工具,专为微服务、云本机架构和基于容器(Docker、K8s、Mesos)架构而设计。 SkyWalking
Apache SkyWalking™ | SkyWalking Teamhttp://skywalking.apache.org/zh/ Application performance monitor ...
- ACK容器服务虚拟节点使用阿里云日志服务来收集业务容器日志
按照这篇博文的介绍,可以在ACK集群上通过Helm的方式部署虚拟节点,提升集群的弹性能力.现在,通过虚拟节点部署的ECI弹性容器实例也支持将stdout输出.日志文件同步到阿里云日志服务(SLS)进行 ...
- 基于Golang设计一套微服务架构[转]
article- @嘟嘟噜- May/26/2018 18:35:30 如何基于Golang设计一套微服务架构 微服务(Microservices),这个近几年我们经常听到.那么现在市面上的的微服 ...
- 基于 APIGateway 打造生产级别的 Knative 服务
作者 | 阿里云智能事业群高级开发工程师 元毅 导读:在实际应用中,通过 APIGateway(即 API 网关),可以为内部服务提供保护.提供统一的鉴权管理.限流.监控等能力,开发人员只需要关注内 ...
- .NET Core微服务之基于IdentityServer建立授权与验证服务
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.IdentityServer的预备知识 要学习IdentityServer,事先得了解一下基于Token的验证体系,这是一个庞大的主题 ...
随机推荐
- 转载电子发烧友网---STM32的IO口灌入电流和输出驱动电流
刚开始学习一款单片机的时候一般都是从操作IO口开始的,所以我也一样,先是弄个流水灯. 刚开始我对STM32的认识不够,以为是跟51单片机类似,可以直接操作端口,可是LED灯却没反应,于是乎,仔细查看资 ...
- 修改maven默认仓库(即repository)的路径
原文链接:https://blog.csdn.net/ideality_hunter/article/details/53006188 简要说明:主要操作为新建仓库路径,在maven的conf目录下修 ...
- php对象:get_object_vars(), get_parent_class(),is_subclass_of(),interface_exists()
get_object_vars():获得对象的属性,以关联数组形式返回 get_parent_class():获得对象的父类 is_subclass_of():判断对象是否某类(参数2)的子类实例出的 ...
- POJ 1200 Crazy Search 字符串的Hash查找
第一次涉及HASH查找的知识 对于字符串的查找有很多前人开发出来的HASH函数,比较常用的好像是ELF 和 BKDR. 这道题没想到突破点是在于其nc值,告诉你组成字符串的字母种类. 还有用26进制, ...
- 最大连续子序列和,以及开始、结束下标(HDU 1003)
HDU1003 Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the ...
- css伪元素::before与::after使用基础示例
1.指定文本前后添加内容 <div class="box">test</div> .box::before{ content: 'before'; marg ...
- Python笔记_第四篇_高阶编程_正则表达式_2.正则表达式入门
1. 匹配单个字符和数字: . --->> 匹配除换行符以外的任意字符.[0123456789] --->> []字符集合,表示匹配方括号中所包含的任意一个字符.[Thomas ...
- C#压缩解压zip 文件
/// <summary> /// Zip 压缩文件 /// </summary> public class Zip { public Zip() { } #region 加压 ...
- storm 机制
storm基础系列之二----zookeeper的作用 https://www.cnblogs.com/xyang/p/5643745.html Zookeeper+Storm集群搭建 https:/ ...
- PAT Vocabulary
数字 单词 词性 中文意 常用 音标 non-negative 非负数 non-negative number Positive 正整数 Positive integer Negative 负数 Ne ...