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;']

最新文章

  1. JSP脚本中的9个内置对象
  2. Install Ansible on Mac OSX
  3. hadoop: hbase1.0.1.1 伪分布安装
  4. Caffe 源碼閱讀(三) caffe.cpp
  5. Java API —— HashMap类 & LinkedHashMap类
  6. C++异常处理(Exception Handling)
  7. Apache Commons 工具类
  8. MVC部署出现HTTP 404 错误
  9. Basic REST API Design
  10. ImageSpan图片不能居中的问题
  11. 读书笔记-你不知道的JS上-this
  12. ibatis中多表联接查询
  13. 如何用Caffe训练自己的网络-探索与试验
  14. LVS负载均衡下session共享的实现方式-持久化连接
  15. 【中间件安全】IIS7.0 安全加固规范
  16. Solr系列一:Solr(Solr介绍、Solr应用架构、Solr安装使用)
  17. 07_ZkClient提供的API使用
  18. 【Asp.Net Core】ASP.NET Core 2.0 + EF6 + Linux +MySql混搭
  19. Win10上部署Apollo配置中心
  20. poi包的几行基本的设置单元格样式

热门文章

  1. ArchLinux安装KDE桌面
  2. [安洵杯 2019]easy_serialize_php
  3. APP分享视频H5页面
  4. javascript语法规范和良好的变成习惯
  5. FTP和HTTP
  6. js 动态添加元素 删除元素逻辑
  7. 使用connected-react-router使router与store同步
  8. mybatis中foreach collection的三种用法
  9. 吴裕雄--天生自然JAVA线程编程笔记:进程与线程
  10. 简单模拟B1011