京东大数据日志生命周期与告警避坑指南
自我介绍
王球,京东科技软件开发工程师,2016年入职新智云负责分布式调度系统的设计和开发,2018年入职京东主要负责分布式调度系统和日志系统的设计和开发。
平台介绍
背景
- 京东智能城市操作系统涉及大量离散日志,包括程序日志、安全日志、SQL日志等,记录了丰富的业务信息。
- 通过统一日志服务进行集中管理,实现统一采集、存储、查询,应用于异常检测、安全审计、运维监控等场景。
- 提升运维效率,通过日志分析快速定位问题、及时告警或预警。
需求
- 操作系统产品日志采集:集中化、多样化、高度自动化。
- 中间件/其它业务系统日志采集:支持多种日志源。
- 基于日志的告警:支持可视化规则配置告警规则。
- 日志查询和接口:为开发人员提供子系统日志查询功能。
- 日志统计分析和图表:为运维人员提供日志统计和图表。
功能介绍
- 日志采集:集中化、多样化、高度自动化。
- 数据存储:冷热分离、定期迁移、分桶。
- 数据加工:可托管、可扩展、高可用;数据规整、富化、流转、脱敏和过滤。
- 数据投递:消息队列、数据库、文件系统。
- 日志告警:关键字、时间窗口。
日志系统选型
- ELK:组件多,部署维护复杂,资源占用多。
- Splunk:收费商业项目。
- Graylog:开源日志聚合、分析、审计工具,部署维护简单,扩展性强,搜索高效。
采集技术
- 非入侵:filebeat。
- 入侵:GELF(UDP、GELFkafka),结构化日志格式,包含日志来源主机、时间戳等字段。
日志采集
- SDK:支持logback、log4j、log4j2;传输支持udp、kafka、http,支持降级。
- Agent:sidecar+filebeat,cgroup资源管理、自启动、不使用swap内存、oomkilled。
- 采集降级:支持多种场景下的降级策略。
日志生命周期
- 数据流转:系统外部的原始数据->数据传输层->数据接入层->本地缓存->业务处理层->输出/入库/转发处理器。
- 本地数据缓存:基于kafka的api实现。
SDK拦截逻辑
- 植入全链路id以及格式预处理,MDC、常量字段、业务日志转换。
数据加工
- 数据规整:字段提取、格式转换,获取结构化数据。
- 数据脱敏:对密码、手机号等敏感信息进行脱敏。
- 数据过滤:过滤出关键服务的日志。
加工函数
- 事件搜索:类似Lucene语法、正则表达式,条件过滤机制。
- 基本操作函数:字段取值、控制、比较等。
- 转换函数:基础类型转换、数字转换等。
- 字符串函数:多字段操作、编码解码等。
- 日期时间函数:日期时间转换等。
- 正则表达式函数:字段提取、匹配等。
- GROK支持:提供四百多种GROK内置模式。
- 编解码:支持SHA1、SHA256等格式。
函数定义
- 脚本方式:数据加工任务选择相应的脚本任务进行日志数据的加工处理。
数据存储
- 冷热架构:Elasticsearch划分为“热”数据节点和“冷”数据节点。
- Curator定期迁移数据。
- 索引集策略:时间、数据量切分索引;索引保留策略;动态调整。
数据查询
- 支持精确查询、模糊查询、全文查询、字段查询。
- 支持上下文查询、日志聚类、实时滚动、重建索引等功能。
- 第三方日志接入方可通过http/rpc协议方式调用提取指标。
DSL扩展
- 组合查询:level:1AND name:xiaomingOR code:001。
- 模糊查询:name:wang*,name:w?ng*。
- 精确查询:level:1默认查询message字段。
- 正则表达式查询:/ethernet[0-9]+/。
- 其他查询:exists:fieldDemo。
数据投递
- 支持通过Splunk、Logstash、Flume等第三方软件消费数据。
- 支持将数据投递到消息队列kafka、rabbitMQ等。
- 支持将数据投递到OSS、HDFS等文件系统。
- 支持将数据投递到JDBC Database、TSDB等时序数据库。
- 使用场景:京办协同办公业务大屏,应用系统业务日志->日志系统->kafka->实时计算->Mysql。
告警
- 事件定义:查询最近一段时间,每隔多长时间查询一次。
- 关键字告警:定义关键字查询语句。
- 聚类告警:某个字段进行聚类统计,超过阈值即可报警。
- 通知定义:
- Webhook:实现对接咚咚、微信、短信等。
- 通知模板:可通过脚本方式定义通知模板。