做者:董文启mysql
应用程序日志是由软件应用程序记录的事件文件, 它通常包含错误,信息事件和警告。一个良好的日志系统有助于快速发现问题,定位问题,同时也为业务分析起到必定的做用。nginx
ELK系统是目前比较流行的日志解决方案,由Elasticsearch、Logstash、Kibana组成,目前三个组件都归属于Elastic。git
Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具备HTTP Web接口和无模式JSON文档。Elasticsearch是用Java开发的,并在Apache许可证下做为开源软件发布。github
自2010年发布以来,Elasticsearch已迅速成为最受欢迎的搜索引擎,经常使用于日志分析,全文搜索和业务分析等业务场景。spring
Logstash 将日志收集后发送到Elasticsearch中进行存储,用户访问Kibana提供的UI界面查询数据。sql
和ELK相似,Choerodon选用了Elasticsearch存储日志数据,并由Kibana展现数据。Choerodon平台运行在Kubernetes平台之上,同时也管理多个Kubernetes集群,为了让日志系统尽量的不影响业务系统,Choerodon使用了比Logstash更轻量的由C语言编写的fluent bit替代采集端工具Logstash。fluent bit经过Deamonset的方式运行在Kubernetes集群中的每个可调度的节点上,实时采集日志,发送到Elasticsearch中,通常状况下,从日志产生到Kibana中能够查看到的延迟不超过1秒钟。精简结构图以下:docker
先看一下查看界面:数据库
经过搜索关键字error查询含有该关键字的日志,界面显示最近15分钟gateway-helper服务出现了三次error的日志信息,列表中为该日志的缩略信息,能够点击日志前面的小箭头展开查看完整的信息。json
展开以后就能够看到更加详细的信息了。后端
PS:多行展现官方的fluent bit截止目前暂未良好的支持docker中的json-file日志,建议使用Choerodon定制fluent bit。
Fluentd和Fluent Bit项目均由Treasure Data建立和赞助,旨在解决日志的收集,处理和交付问题。
两个项目都有不少类似之处,Fluent Bit彻底基于Fluentd架构和通常设计的设计和经验。选择使用哪个取决于最终需求,从架构角度能够考虑:
相似于Fluent bit的组件还有不少如Filebeat等,Choerodon也在关注各主流组件的更新,选择最合适的日志采集端工具。
通常在采集日志的时候,为了更容易分析日志,须要将日志进行解析。下面的这个图中将Java应用的一条日志解析为level,class,processid和msg四个部分:
解析日志须要指定解析规则,Choerodon部署界面能够为应用配置解析规则,当配置了解析规则后即表示该应用的日志须要按照配置的规则收集,部署界面以下图所示:
经过mysql这个解析规则解析该应用的日志,目前Choerodon日志解决方案中默认提供了docker、mysql、tomcat、springboot和nginx的日志解析规则,若是你认为须要添加其余通用的日志解析规则欢迎到Choerodon社区中建议。
在Fluent-bit中能够配置通配符"*”来收集匹配规则的日志,可是不少时候开发者但愿在部署应用时指定是否收集日志。在Choerodon平台中,应用是运行在Kubernetes平台之上的,因此开发者能够经过给应用的部署集添加标签来表示需不要收集日志,再经过一个程序去读取标签的内容,自动修改Fluent-bit的配置就能够随心的控制是否须要收集日志了。若是须要默认收集全部应用的日志,排除部分日志可使用Fluent-bit提供的 fluentbit.io/exclude注解。
Choerodon的服务运行在Kubernetes集群中,若是可以在查看日志的时候也能看到日志来自哪一个服务器,属于哪一个Pod就可以更快的定位和查找问题。
Fluent bit提供了Kubernetes的filter,经过赋予Fluent bit查询权限,它就可以自动的为每条日志附加集群的相关信息。
如上图所示,你能够看到每一条日志来源的主机,命名空间,所属Pod名称等信息,大大提升了开发者定位的能力。
收集日志以后开发者须要对某个关键字出现的次数进行告警,如Exception这个关键字在某服务中一分钟出现了5次以上,须要将这个消息通知给特定的人员。
在这以前你们先来了解一下Choerodon中的监控方案:
应用监控数据经Prometheus采集处理以后展现在Grafana中,告警信息经过Alertmanager发送给用户。由于在监控方案中已经有可用的告警机制,开发者只须要将日志系统中的内容转换为Prometheus能够采集的指标数据便可使用监控方案中的告警机制。
Elastalert是用Python编写的Elasticsearch告警工具,经过配置必定时间间隔查询elasticsearch数据库,对比预设规则达到告警的目的,Choerodon能够经过简单的改造elastalert实现将elastalert查询的结果转换为Prometheus的数据格式供Prometheus拉取。改造步骤分为如下几个部分:
引入prometheusSDK:prometheus提供了Python的SDK,简单的引入以后应用就具备了能够被监控的特性,能够选择监听指定端口已提供监控数据。
埋点:将更新监控数据的操做置于elastalert每次执行查询完成后已更新监控数据便可。
目前Choerodon正在用Golang开发新的日志监控工具,得益于Golang的特性,新的日志监控工具将以更低的内存消耗,更低的cpu占用和更稳定的运行状态为日志监控提供支持。
如上所示,Kibana做为日志查看界面,若是使用社区版Kibana是没有权限校验的,会存在必定风险,但愿受权用户才能访问日志查询界面。为此Choerodon设计开发了一个认证代理服务,将无权限控制的Kibana放置于认证代理的后端,只有经过了认证,才能访问到Kibana的界面。以下图所示:
效果图:
如今,你已经了解Choerodon的日志方案,接下来就能够跟随着Choerodon官网部署尝试一下吧。
参考文献:
Choerodon猪齿鱼开源多云技术平台,是基于开源技术Kubernetes,Istio,knative,Gitlab,Spring Cloud来实现本地和云端环境的集成,实现企业多云/混合云应用环境的一致性。平台经过提供精益敏捷、持续交付、容器环境、微服务、DevOps等能力来帮助组织团队来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件。
你们也能够经过如下社区途径了解猪齿鱼的最新动态、产品特性,以及参与社区贡献: