• 《中国民生银行天眼日志平台架构演进的平凡之路》读后感


    中国民生银行的 IT 业务系统的迅速发展,主机、设备、系统、应用软件数量不断增多,业务资源访问、操作量不断增加,对于应用整体系统智能分析与处理的要求不断提高, 急需建立包含所有应用、系统、存储、设备的统一的日志集中管理平台。本文分享了中国民生银行大数据基础产品团队如何基于 ELK 技术栈构建自己的天眼日志平台以及平台架构优化、升级和演进的过程。

    在早期的平台架构;

    早期的天眼日志平台使用了原始的 ELK 三层架构模式:多个独立的 Logstash agent(shipper) 负责收集不同来源的数据,一个中心 agent(Indexer) 负责汇总和分析数据,在中心 agent 前的 Broker 使用 Redis 作为缓冲区,中心 agent 后的 Elasticsearch(后简称 ES)用于存储和搜索数据,应用可以采用定制化的 Kibana 提供丰富的图表展示,也可以根据 ES 的 RESTful API 行开发定制

    对于源端采集Agent轻量化:

    随着日志接入工作的不断推进,日志解析都是在 agent 端进行的弊病显露出来。由于 Logstash 是使用 Java 编写,插件是使用 jruby 编写,又需要 jvm 环境运行,对服务器的资源要求会比较高。同时 Logstash 在使用 filter/grok 插件处理复杂的日志字段抽取和预处理时,正则解析会耗费大量的 cpu 资源,在初始启动的一瞬间偶尔会冲破 cpu 监控报警阀值,有可能影响生产服务器。虽然目前还没发现对应用产生实际负面影响(agent 有监控脚本自杀机制),但是导致应用运维人员会非常紧张,在后来的架构演进中,我们正逐步取消源端解析而改为后台解析。

    随着 Elastic 技术堆栈的发展,出现了 Filebeat。Filebeat 是 Beat 成员之一,基于 Go 语言编写,无任何依赖,比 Logstash 更加轻量,非常适合安装在生产机器上,不会带来过高的资源占用。对比测试中我们创建了 1 个 G 的日志数据,不做正则解析,在分配同样资源的情况下,单线程 logtash 启动 cpu 瞬间飚高到 80%,后面基本上在 60% 左右,63s 处理完毕,Filebeat 启动时 cpu 瞬间在 40% 左右,之后在 20% 左右,15s 处理完毕。从结果上来看不管是性能还是资源占比 Filebeat 都比 Logstash 要好上不少。在后期演进中,我们逐步在新架构中将日志解析的工作放在了后端进行,只需要 Filebeat 将收集的日志整合原样上送即可。

    对于 Agent统一管控和性能监控;

    由于上一代原始架构平台部署的 agent 缺乏统一管理功能,相关配置信息均需要手工实施,自动化程度较弱,也无法与其他系统关联。对此我们在新的日志平台架构下依赖大数据管控平台完成相关自动化需求,大数据管控平台是我们大数据基础产品团队自主开发的一套对大数据集群和天眼日志平台中 agent 统一运维管控的项目,具备智能服务发现和服务器管理功能。大数据管控平台上线实现了日志平台 agent 的自动化部署、点击触发启停和监控可视化,监控可视化通过 Filebeat 和 Flume 上送心跳信息到 Kafka 上,在 Storm 集群上开发拓扑程序消费 Kafka 心跳信息存入到大数据管控平台的 MySQL 数据库中进行展示。另外通过大数据管控平台与工单系统、服务目录、CMDB 系统进行联动,日志平台本身只充当基础框架,统一认证权限添加、元数据信息下发、工单数据流处理都通过管控平台页面 agent 配置文件的集群模块化录入和上传来实现。

     对于系统的ES升级步骤大致可以分为几步;

    1.暂停 Logstash Indexer 日志数据写入

    2.关闭集群 shard allocation

    3.手动执行 POST /_flush?wait_for_ongoing,等到操作结束再返回

    4.手动执行 POST /_flush/synced

    5.关闭所有 ES 集群节点

    6.执行新版本 Elasticsearch 软件替换

    7.启动所有 ES 集群节点

    8.重新开启集群 shard allocation

    9.等待 recovery 完成,集群 health status 变成 green

    10.重新开启 Logstash Indexer 日志数据写入

    文中部分专业总结摘自原文专业术语,如有侵权,请联系15227013954

  • 相关阅读:
    SQLite 版本引发的 Python 程序调用问题
    从0到10亿,微信后台架构及基础设施设计与实践!
    从Oracle到PostgreSQL:动态性能视图 vs 标准统计视图
    第一章 准备工作
    Swagger2简介
    如何查询numpy,scipy,matplotlib等的版本和安装位置
    完美解决ImportError: cannot import name '_validate_lengths'报错问题
    完美解决AttributeError: module 'scipy.misc' has no attribute 'imread'报错问题
    线上课堂:ernetes Operator开发范式
    Bomb Enemy 炸弹人
  • 原文地址:https://www.cnblogs.com/zhaochunhui/p/10998879.html
走看看 - 开发者的网上家园