文档章节

Choerodon如何进行日志收集与告警

Choerodon
 Choerodon
发布于 05/20 18:03
字数 2154
阅读 15
收藏 0

作者:董文启

应用程序日志是由软件应用程序记录的事件文件, 它一般包含错误,信息事件和警告。一个良好的日志系统有助于快速发现问题,定位问题,同时也为业务分析起到一定的作用。

传统ELK系统

ELK系统是目前比较流行的日志解决方案,由Elasticsearch、Logstash、Kibana组成,目前三个组件都归属于Elastic。

Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具有HTTP Web接口和无模式JSON文档。Elasticsearch是用Java开发的,并在Apache许可证下作为开源软件发布。

自2010年发布以来,Elasticsearch已迅速成为最受欢迎的搜索引擎,常用于日志分析,全文搜索和业务分析等业务场景。

Logstash 将日志收集后发送到Elasticsearch中进行存储,用户访问Kibana提供的UI界面查询数据。

Choerodon中的日志系统

总览

和ELK类似,Choerodon选用了Elasticsearch存储日志数据,并由Kibana展示数据。Choerodon平台运行在Kubernetes平台之上,同时也管理多个Kubernetes集群,为了让日志系统尽可能的不影响业务系统,Choerodon使用了比Logstash更轻量的由C语言编写的fluent bit替代采集端工具Logstash。fluent bit通过Deamonset的方式运行在Kubernetes集群中的每一个可调度的节点上,实时采集日志,发送到Elasticsearch中,一般情况下,从日志产生到Kibana中可以查看到的延迟不超过1秒钟。精简结构图如下:

先看一下查看界面:

通过搜索关键字error查询含有该关键字的日志,界面显示最近15分钟gateway-helper服务出现了三次error的日志信息,列表中为该日志的缩略信息,可以点击日志前面的小箭头展开查看完整的信息。

展开之后就可以看到更加详细的信息了。

PS:多行展示官方的fluent bit截止目前暂未良好的支持docker中的json-file日志,建议使用Choerodon定制fluent bit。

Fluent bit vs Fluentd

Fluentd和Fluent Bit项目均由Treasure Data创建和赞助,旨在解决日志的收集,处理和交付问题。

两个项目都有很多相似之处,Fluent Bit完全基于Fluentd架构和一般设计的设计和经验。选择使用哪一个取决于最终需求,从架构角度可以考虑:

  • Fluentd是日志收集器,处理器和聚合器,使用Ruby和C构建。
  • Fluent Bit是一个日志收集器和处理器,它没有像Fluentd一样强大的聚合功能。在Choerodon日志方案聚合功能由Elasticsearch提供。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拉取。改造步骤分为以下几个部分:

  1. 引入prometheusSDK:prometheus提供了Python的SDK,简单的引入之后应用就具有了可以被监控的特性,可以选择监听指定端口已提供监控数据。

  2. 埋点:将更新监控数据的操作置于elastalert每次执行查询完成后已更新监控数据即可。

目前Choerodon正在用Golang开发新的日志监控工具,得益于Golang的特性,新的日志监控工具将以更低的内存消耗,更低的cpu占用和更稳定的运行状态为日志监控提供支持。

使用Choerodon认证登录Kibana

如上所示,Kibana作为日志查看界面,如果使用社区版Kibana是没有权限校验的,会存在一定风险,希望授权用户才能访问日志查询界面。为此Choerodon设计开发了一个认证代理服务,将无权限控制的Kibana放置于认证代理的后端,只有通过了认证,才能访问到Kibana的界面。如下图所示:

效果图:

现在,你已经了解Choerodon的日志方案,接下来就可以跟随着Choerodon官网部署尝试一下吧。

参考文献:

关于Choerodon猪齿鱼

Choerodon猪齿鱼开源多云技术平台,是基于开源技术Kubernetes,Istio,knative,Gitlab,Spring Cloud来实现本地和云端环境的集成,实现企业多云/混合云应用环境的一致性。平台通过提供精益敏捷、持续交付、容器环境、微服务、DevOps等能力来帮助组织团队来完成软件的生命周期管理,从而更快、更频繁地交付更稳定的软件。

大家也可以通过以下社区途径了解猪齿鱼的最新动态、产品特性,以及参与社区贡献:

© 著作权归作者所有

Choerodon
粉丝 58
博文 39
码字总数 126935
作品 1
青浦
产品经理
私信 提问
Choerodon 的微服务之路(四):深入理解微服务配置中心

本文是Choerodon 的微服务系列推文第四篇,上一篇《Choerodon的微服务之路(三):服务注册与发现》介绍了Choerodon的注册中心,并通过代码的形式介绍了 在Choerodon微服务框架中是如何来实现...

Choerodon
01/02
0
0
如何将现有的应用迁移到Choerodon猪齿鱼(上)

在数字化浪潮席卷之下,很多传统行业的线上业务急速增长,其业务场景、用户行为都发生了转变,面对敏捷的业务和IT应变需求,如何快速地进行创新实验,提高IT部门的总体运营效率,高效融合开发...

Choerodon
2018/10/08
0
0
SeciLog 1.22 发布,增加自定义告警,性能监控等

日志分析软件 SeciLog 1.22发布,对搜索进行了优化,增加了自定义告警,增加了统计功能,优化了图表查询,简化了配置,增加了性能监控,增加了es备份,上篇文章1.21,有兴趣可以了解一下。本...

赛克蓝德
2016/01/15
3.7K
5
Choerodon猪齿鱼的数据初始化设计解析

Choerodon猪齿鱼作为一个微服务框架需要解决微服务数据初始化本身具有的问题和复杂性,同时也需要满足框架本身特有的数据初始化需求,下面为大家介绍一下这方面的设计思想和实现。 微服务的数...

Choerodon
06/10
0
0
赛克蓝德日志分析软件(SeciLog)15年总结

需求 随着现代化企业的发展,企业对信息化的依赖程度越来越高,企业为了保障业务正常运行,需要部署大量的设备和软件系统:包括防火墙、入侵检测、扫描器、堡垒机、监控、OA、ERP、业务系统等...

赛克蓝德
2016/01/30
933
0

没有更多内容

加载失败,请刷新页面

加载更多

lua字符串和时间戳相互转换

1. 时间戳转成格式化字符串 直接利用函数os.date()将时间戳转化成格式化字符串.```local timestamp = 1561636137;local strDate = os.date("%Y/%m/%d %H:%M:%S", timestamp)print("strD......

书香神
40分钟前
1
0
代码规范

代码格式化 安装vscode插件:Prettier - Code formatter 格式化配置:将下列配置写入到vscode的settings.json文件 (遵照代码格式化) "prettier.disableLanguages": ["vue"], "prettier.......

TreeZhou0511
今天
5
0
python实现人工神经网络的一个例子

人工神经网络已经有无数的开源框架,比如tensorflow,caffe等,可以直接用。但最近需要做一个小样例,把基本思想讲一讲,因此自己写了一个demo,以供参考。 下面直接上代码,代码中有注释,比...

propagator
今天
6
0
远程dubugger

1、在tomcat的bin下/data/project/XXX/apache-tomcat-8.5.23/bin 在catalina.bat文件中新增如下即可 JAVA_OPTS="-Xmx1024m -Xms1024m -agentlib:jdwp=transport=dt_socket,server=y,suspend......

一只小青蛙
今天
3
0
jemter 连接MySQL

jemter 连接MySQL 点击测试计划,测试计划最后”添加目录或jar包到ClassPath“,点击浏览,添加mysql-connector.jar mysql-connector.jar的下载地址: https://mvnrepository.com/artifact/my...

xiaobai1315
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部