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基于容器日志的报警和服务自动恢复的更多相关文章

  1. 基于容器微服务的PaaS云平台设计(二)通过kubernetes实现微服务容器管理

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://www.cnblogs.com/SuperXJ/ 上一章描述了基于spring cloud的微服务实例(实 ...

  2. 【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志

    如题: docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志 场景再现: docker部署并启动 ...

  3. 个推Node.js 微服务实践:基于容器的一站式命令行工具链

    作者:个推Node.js 开发工程师 之诺 背景与摘要 由于工程数量的快速增长,个推在实践基于 Node.js 的微服务开发的过程中,遇到了如下问题: 1. 每次新建项目都需要安装一次依赖,这些依赖之 ...

  4. 基于容器微服务的PaaS云平台设计(一) 实现容器微服务和持续集成

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://www.cnblogs.com/SuperXJ/ 前言:关于什么是容器微服务PaaS和容器微服务PaaS的 ...

  5. 分布式系统的应用程序性能监视工具,专为微服务、云本机架构和基于容器(Docker、K8s、Mesos)架构而设计。 SkyWalking

    Apache SkyWalking™ | SkyWalking Teamhttp://skywalking.apache.org/zh/ Application performance monitor ...

  6. ACK容器服务虚拟节点使用阿里云日志服务来收集业务容器日志

    按照这篇博文的介绍,可以在ACK集群上通过Helm的方式部署虚拟节点,提升集群的弹性能力.现在,通过虚拟节点部署的ECI弹性容器实例也支持将stdout输出.日志文件同步到阿里云日志服务(SLS)进行 ...

  7. 基于Golang设计一套微服务架构[转]

      article- @嘟嘟噜- May/26/2018 18:35:30 如何基于Golang设计一套微服务架构 微服务(Microservices),这个近几年我们经常听到.那么现在市面上的的微服 ...

  8. 基于 APIGateway 打造生产级别的 Knative 服务

    作者 | 阿里云智能事业群高级开发工程师  元毅 导读:在实际应用中,通过 APIGateway(即 API 网关),可以为内部服务提供保护.提供统一的鉴权管理.限流.监控等能力,开发人员只需要关注内 ...

  9. .NET Core微服务之基于IdentityServer建立授权与验证服务

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.IdentityServer的预备知识 要学习IdentityServer,事先得了解一下基于Token的验证体系,这是一个庞大的主题 ...

随机推荐

  1. 字符串处理 - ANSI - Unicode - UTF8 转换

    #include <stdio.h> #include <windows.h> #include <locale.h> #define BUFF_SIZE 1024 ...

  2. Fedora、SuSE、Redhat、Ubuntu、Centos

    想学Linux,但版本太多了,如Fedora.SuSE.Redhat.Ubuntu等,不免让人眼花缭乱,那么初学者该如何选择呢?也许很多人会不屑的说,Linux不就是个操作系统么.错!Linux不是一 ...

  3. sping中 各种注解——@SuppressWarnings注解用法

    @SuppressWarnings注解用法 @SuppressWarnings注解主要用在取消一些编译器产生的警告对代码左侧行列的遮挡,有时候这会挡住我们断点调试时打的断点. 如图所示: 这时候我们在 ...

  4. 吴裕雄--天生自然MySQL学习笔记:MySQL LIKE 子句

    在 MySQL 中使用 SQL SELECT 命令来读取数据, 同时我们可以在 SELECT 语句中使用 WHERE 子句来获取指定的记录. WHERE 子句中可以使用等号 = 来设定获取数据的条件, ...

  5. UML-如何使用GRASP进行对象设计?

    1.GRASP有以下模式 2.创建者 问题:谁创建某类的新实例? 方案:(我认为) 聚集:物理模型下,由父类创建子类.(父类聚集了子类的集合) 包含:子类包含父类对象 专家模式:提供初始化数据的类来创 ...

  6. Java学习十五

    学习内容: MyBaits 以前从来没有接触过mybatis,通过今天的学习知道这是一个框架,适用于关注SQL优化和需要频繁更新的项目. 今天做一个关于mybatis项目的入门小程序,效果很不理想. ...

  7. [浅学]POST、GET、PUT、DELETE 请求

    HTTP定义了与服务器交互的不同的方法,最基本的是POST.GET.PUT.DELETE,与其比不可少的URL的全称是资源描述符,我们可以这样理解: url描述了一个网络上资源,而post.get.p ...

  8. PAT Advanced 1134 Vertex Cover (25) [hash散列]

    题目 A vertex cover of a graph is a set of vertices such that each edge of the graph is incident to at ...

  9. 【模式分解】无损连接&保持函数依赖

    首先引入定义 无损分解指的是对关系模式分解时,原关系模型下任一合法的关系值在分解之后应能通过自然联接运算恢复起来.反之,则称为有损分解. 保持函数依赖的分解指的是对关系分解时,原关系的闭包与分解后关系 ...

  10. c#学习笔记01——引用&类

    数据类型 值类型 bool 布尔值 True 或 False False byte 8 位无符号整数 0 到 255 0 char 16 位 Unicode 字符 U +0000 到 U +ffff ...