在需要私有化部署的系统中,大部分系统仅提供系统本身的业务功能,例如用户管理、财务管理、客户管理等。但是系统本身仍然需要进行日志的采集、应用指标的收集,例如请求速率、主机磁盘、内存使用量的收集等。同时方便的分布式系统日志的查看、指标的监控和告警也是系统稳定运行的一个重要保证。

为了使得私有化部署的系统能更健壮,同时不增加额外的部署运维工作量,本文提出了一种基于 ELK 的开箱即用的日志和指标收集方案。

背景

在当前的项目中,我们已经使用了 Elasticsearch 作为业务的数据储存,同时利用 ansible、docker、jenkins 组合了一套快速部署的工具。在配置好需要部署主机的 ssh 连接信息后,我们可以通过 jenkins 一键部署一个 Elasticsearch 和 Kibana。

这套系统遵循以下的设计原则:

Self-Contained Deployment:我们把所有的部署脚本、配置文件、Jenkins 任务都打包到一个标准化的 Jenkins docker 包中,只要安装到目标的环境上,即可把所有部署所需的工具都一次性带入。

Single Source of Truth:在 Jenkins 中内嵌一个 yaml 格式的配置文件管理器,对于所有部署需要依赖的变量进行统一管理,例如 xx 系统后端对外暴露的端口号,只在 Jenkins 中配置一次,所有的脚本都会自动读取该变量。

Configuration as Code, Infrastructure as Code:当所有的配置确定下来后,后续的流程理论上是可以做到全自动化的,所以所有的安装都通过脚本来完成。

需求分析

在私有化部署的环境中,日志的收集使用有几个特点:

需要能快速部署。由于客户的数量较多,我们需要能快速地部署监控系统,监控系统本身的运维压力需要较小。

部署组件要简单,且健壮性强。由于部署环境较为复杂,希望每个组件自身是健壮的,同时组件之间的交互尽量简单,避免复杂的网络拓扑。

功能性优于稳定性。由于日志和指标信息本身在宿主主机和应用上是有副本的,所以即时监控系统的数据丢失了,影响也不大。但是如果系统能提供更多强大的功能,对于分析是很有帮助的。

性能要求不高。由于私有化环境对接系统的容量和复杂度可控,可以使用单机部署,同时查询慢一些也没关系。

同时需要满足几个需求:

需要能采集分布式的日志,并且集中式地查看。

需要能采集机器的基本信息,例如 CPU、磁盘,并进行监控。

最好能采集应用的数据,例如导入数据的条目数,并进行监控。

最好能实现异常指标的告警功能。

方案分析

方案上有 3 个备选方案:

利用 ELK(Elasticsearch、Logstash、Kibana) 做整体的监控基础组件,同时使用 Elastic 新推出的 beat 系列作为采集工具。

利用 Zabbix、Open-Falcon等运维监控工具进行系统基础组件的监控。同时利用自定义指标,进行数据的监控和告警。

利用 TICK(Telegraph、InfluxDB、Chronograf、Kapacitor) 做整体的监控基础组件。

目前日志方面能比较好满足需求的只有开源的 ELK 和商业化的 Splunk,如果 Splunk 的授权费是预算可接受的,也可以使用方案 2、3 结合 Splunk 的方式来实现。但是目前来看 Splunk 高昂的授权费并不是大部分公司可以接受的。方案 2 和 3 在需求上不能很好满足日志的收集和查看功能,所以排除掉了。

方案 1(ELK) 根据我们的需求进一步细化:

需要能快速部署:通过我们的 Jenkins 可以实现一键部署的功能。

部署组件简单:我们只部署 Elasticsearch 和 Kibana 组件,同时 Elasticsearch 本身作为最基础的组件是自包含的,不依赖任何外部组件。而我们也不使用集群,只用单机部署,保证 Elasticsearch 部署的简单和稳定。

功能性优于稳定性:虽然业务使用的 Elasticsearch 停留在 5.5.3 版本,我们日志采集和分析使用的 Elasticsearch 直接升级到 7.6.0 版本,同时后续的版本升级也可以较为激进,如果遇到不兼容的情况,也不需要保留已有数据,删除数据重新部署即可。

性能要求不高:使用单机部署,Elasticsearch 和 Kibana 部署在同一台机器上。

日志专用的 Elasticsearch、Kibana、Beat

为了避免日志使用的 ES 和业务使用的 ES 在资源或者配置上发生冲突,日志专用的 ES 单独做了一个部署,使用约 3G 内存。

日志采集:

我们在所有相关主机上使用 ansible 部署 filebeat 进行日志的采集,为了简化系统,我们也没有使用 logstash 做日志的预处理,只是简单地配置了 filebeat 的配置文件,并加入了我们的 jenkins 一键部署套件中。

日志的查看:

由于日志直接通过 filebeat 收集到了 es 中,我们使用 Kibana 就能直接进行查看了。

系统指标收集:

我们在所有相关主机上使用 ansible 部署 metricbeat 进行指标的收集,通过配置文件的配置,可以采集到 docker 的资源使用、系统 CPU、内存、磁盘、网络的使用状态,同时也开放了 statsd 格式的指标收集端口。

在现场状态检测:

我们在网关机器上使用 ansible 部署 heartbeat 进行主动的资源可用性探测,对系统相关的数据库、http 服务等监控其相应状态,并将其发送至默认的 ES 储存索引中。

基于 ES 的告警

Elasticsearch 的原生告警是付费功能,为了搭建一个更通用的告警系统,这里用了一个开源的项目 elastalert 实现告警。Elastalert 是 Yelp 公司(美国的大众点评)开发的基于 python 和 Elasticsearch 的告警系统,可以对接的告警途径很多,但是大部分都是国外的工具例如 Slack、HipChat、PagerDuty,所以我们目前只使用了最基础的邮件告警功能。

Elastalert 可以配置多种告警类型,例如:

某条件连续触发 N 次(frequency 类型)。

某指标出现的频率增加或者减少(spike 类型)。

N 分钟未检测到某指标(flatline 类型)等。

每个告警的配置核心其实是一个 elasticsearch 的查询语句,通过查询语句返回的条目数来进行判断。

目前我们也只使用了最基础的 frequency 类型告警。由于这个告警是针对特定几个私有化部署的系统,所以我们提前配置好了若干个告警的配置文件,在部署脚本中,如果没有特别需求,就全部复制到 elastalert 的系统中,不需要任何手工配置。

监控大盘

利用 Kibana 的可视化功能,我们可以针对每个业务系统创建一个监控大盘,直观地看到所有系统组件的情况,以及宿主主机的健康情况:

Kibana 配置自动化

Kibana 当中所有持久化了的配置都是一个 Saved Object,包括:快捷搜索、监控大盘、可视化面板、索引配置。

我们在内部的测试环境中配置好了一个监控用的 Kibana 后,将配置文件通过 CI 系统定期导出储存于 git 仓库中,下一次更新基础组件时,更新脚本就会自动将对应的 kibana 配置导入到私有化部署的环境中,在部署时不需要任何手工配置,实现 Infrastructure as Code。

扩展监控范围

这套部署组件在扩展上也是有一个标准流程的。

监控更多的应用组件

当我们需要监控新增的应用组件时。

对于服务状态,我们可以简单地将应用组件的访问地址加入 hearbeat 的配置中,就可以在监控面板看到对应组件的状态了。

对于应用日志,我们可以将日志的文件路径加入 filebeat 的配置中,就可以在 Kibana 中搜索到了。

监控应用相关的指标

当我们需要监控应用相关的指标时,我们可以通过 statsd 的接口,将指标发布至 metricbeat,统一收集至 Elasticsearch 当中。statsd 底层规则相对简单,所以在每个编程语言中都有相应的 SDK 可以直接使用,并没有复杂的依赖:

https://github.com/statsd/statsd/wiki

但是目前 metricbeat 收集来的 statsd 信息是不支持 tag 的,所以还只能做一些简单的指标收集,并不能对同一指标的不同维度做聚合分析。

增加服务 tracing

Elasticsearch 当中也带了 APM 服务这个暂时还没有尝试接入,如果可以使用的话,是一个性能监控和分析的利器。

总结

私有化部署的环境中,日志的收集和监控不像互联网产品一样需要较强的性能和可扩容性,开箱即用和功能的强大就较为重要。7.6.0 版本的 Elasticsearch 和 Kibana 在这方面能很好地满足需求,只需要对部署流程进行标准化,并提前准备好配置文件,就可以在半小时内搭建好一整套监控体系。

从零搭建一个基于 ELK 的日志、指标收集与监控系统相关推荐

  1. 从零搭建一个基于React+Nextjs的SSR网站(四):如何搭建服务器并部署Nextjs项目

    个人博客源码:https://github.com/shaotianyu/blog-front PS: 如果你有疑惑,可以给我留言,咱们一起解决它. 从零搭建一个基于React+Nextjs的SSR网 ...

  2. srs流媒体服务器windows_基于SRS构建的直播平台的监控系统的搭建思路与实现方法...

    市面直播平台百家争鸣,直播监控系统是判断一个直播平台是否完善的必要条件.文章简要介绍了笔者搭建的一套基于SRS的直播平台,并从设计思路.实现方法与实现过程等方面重点介绍了针对此直播平台建设的监控系统, ...

  3. android jmf,基于JMF与Android的无线视频监控系统的设计与实现

    摘要: 视频监控系统是一种防范能力很强的综合系统,是安防领域的重要组成部分.随着无线网络与流媒体传输技术的飞速发展,视频监控系统也朝着无线化,高清化,智能化的方向发展.针对这一需求,通过研究JAVA多 ...

  4. 零基础搭建一个基于PHP+MYSQL网站教程,个人建站全过程

    零基础搭建一个基于PHP+MYSQL网站教程,个人建站全过程 一.网站计划编写. 1.定位,网站名称,关键字,描述,分类目录,内容 [这里推荐用脑图软件,可以用百度脑图] 2.想好域名      二. ...

  5. 从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建

    从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建 本文简介 为什么使用Spring Boot 搭建怎样一个环境 开发环境 导入快速启动 ...

  6. [渝粤教育] 宁波城市职业技术学院 Web服务器运维(从零搭建一个企业网站) 参考 资料

    教育 -Web服务器运维(从零搭建一个企业网站)-章节资料考试资料-宁波城市职业技术学院[] 作业:购买阿里云ECS 作业:在万网注册域名 作业:ICP备案 微测验:准备主机 1.[单选题]ECS是阿 ...

  7. 搭建一个完整的实时日志统计平台

    搭建一个完整的实时日志统计平台 在互联网应用中,不管是哪一种处理方式,其基本的数据来源都是日志数据,例如对于web应来 说,则可能是用户的访问日志.用户的点击日志等. 如果对于数据的分析结果在时间上有 ...

  8. 自己搭服务器 做购物网站成本,从零搭建一个购物网站,实操经验

    对于很多不懂代码不懂技术的人来说,想要搭建自己的购物网站非常的困难.难道不懂计算机基础,不会写代码就真的不能进行购物网站开发了吗?事实上并非如此.接下来HiShop小编就跟大家分享一下,如何从零搭建一 ...

  9. 15 分钟搭建一个基于XLNET的文本分类模型——keras实战

    今天笔者将简要介绍一下后bert 时代中一个又一比较重要的预训练的语言模型--XLNET ,下图是XLNET在中文问答数据集CMRC 2018数据集(哈工大讯飞联合实验室发布的中文机器阅读理解数据,形 ...

最新文章

  1. 根据传入坐标和图片URL地址对图片进行切图操作、将图片转化成Base64位码
  2. python能绘制统计图吗-Python数据科学(九)- 使用Pandas绘制统计图表
  3. python b站 礼物_[我叫以赏]Python获取B站UP主粉丝数
  4. 关于MySQL出现`lock wait timeout exceeded; try restarting transaction` 的解决方案
  5. javaScript学习笔记之比较运算符||逻辑运算符||条件运算符(三目运算符)
  6. 禅道 php api,云禅道有API的方式可以获取数据吗
  7. 复练-软考网规-IDS和IPS概念、分类、评价标准
  8. powerbuilder提示不是下拉窗口_制作简易工资查询模板,下拉菜单选择姓名即可显示...
  9. tomcat记录X-Forwarded-For字段中的远程IP
  10. java语言代码大全_java新手入门-java新手代码大全
  11. Matlab p文件解密,p转m文件 可查看源码
  12. BOSS招聘网站数据分析岗位分析详情
  13. AI微信小程序源码下载人脸照片AI转换动漫照片全新源码安装简单无需服务器域名
  14. TypeScript基础入门之Symbols
  15. @Vaild注解使用详解
  16. 教你如何从小白开始,一步步从千氪财经上赚到第一桶金
  17. 电池的类型,你真的了解吗?
  18. Java常用类字符串异常处理
  19. xtrabackup备份恢复MySQL数据库
  20. 【RSA-Tool 2 by tE】的使用

热门文章

  1. java中获取系统时间_JAVA中获取当前系统时间
  2. 快递单信息抽取【二】基于ERNIE1.0至ErnieGram + CRF预训练模型
  3. 单端、伪差分、全差分ADC
  4. 12345申诉黄码转绿码要多久?
  5. 认知篇:CQRS 架构模式的本质
  6. 捞偏门?浅谈机器学习的一些小众方向
  7. 中国造纸行业发展趋势与盈利前景展望报告2022-2027年
  8. 计算机桌面图标被挡怎么办,电脑桌面左部的图标被遮挡住了部分,请问怎样修改啊...
  9. Python学习教程(Python学习视频_Python学习路线):Day04循环结构
  10. Julia 将.jl脚本文件打包为可执行文件