大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

日志监控实践 | 多维度数据采集

  • 2019-09-11
  • 本文字数:2504 字

    阅读完需:约 8 分钟

日志监控实践 | 多维度数据采集

前期文章《监控数据从哪来?(入门篇)》介绍采集程序的架构和不同场景下数据的采集方式。本文我们将针对日志监控,介绍一下多维度数据采集方面的思考和实践。

多维度数据

多维度数据目前已经成为大数据分析和处理领域的基本模型,与维度打平的单维度数据相比,多维度数据具有监控配置管理简单、处理灵活、快速的优点,多维度数据监控在百度智能运维平台中具有广泛的应用。图 1 为运维系统使用的一个典型多维度数据:



图 1 多维度数据


  • “name”:监控项名称,监控数据的唯一标识

  • “timestamp”:数据的时间戳

  • “dimensions”:数据的维度信息

  • “value”:监控项值

日志多维度采集面临的问题

日志中保存了系统运行的大量信息,对智能运维产品来说,日志就是这个复杂系统未加工的粮食,如何准确提取和利用日志中的有用信息,就像把小麦加工成面粉甚至面包,是智能运维产品应该具备的基本能力。


百度线上业务日志种类数以万计,一些业务日志能达到每秒几十 MB 的生产速度,要从日志中筛选出用户关注的数据和指标,面临着几个关键问题。


  • 线上日志种类多,如何实现采集的灵活配置

  • 在平均每秒几十 MB 的日志量下,如何保证采集的效率和准确性

  • 采集出来的信息怎样满足用户二次处理的需求


带着这几个问题,我们将深入到百度智能运维系统的日志多维度数据采集模块,介绍一下我们在实践中证明行之有效的方案和措施。

采集任务灵活配置

为了方便用户配置日志多维度采集任务,我们把多维度采集任务以 JSON 文件的形式进行配置和分发,用户可以通过 Web 界面填写或直接修改 JSON 文件的方式设置采集日志路径、采集规则以及采集项内容等信息,图 2 为一个典型的日志多维度采集配置示例:



图 2 多维度采集配置


  • “log_filepath”:为待采集日志的文件路径

  • “match_regex”:日志多维度采集匹配的正则表达式,采用分组命名正则

  • “item”:多维度数据信息

  • “translate_dict”:信息转换相关配置


由于日志切分的需要,目前百度线上存在许多以时间命名的日志,日志文件名称随着时间的变化而改变。对于这种情况,“log_filepath”支持配置带有时间格式符的日志路径。例如日志以天切割,日志名形如“/home/test/test.log.20190331”,则可将日志路径配置为“/home/test/test.log.%Y%m%d”,采集程序会实时检查日志路径的变化,确保采集最新的日志。

日志快速读取和匹配

针对日志量大的场景,为保证多维度采集的及时性和准确性,我们采用了下面几种方法处理。


  • 采集程序采用多线程,充分利用机器的计算资源,一个采集任务由一个线程独立执行,提升采集效率的同时也可以保持任务的独立,避免采集过程异常情况的扩散,影响其它采集任务;

  • 采集任务设定周期,对采集到的数据在周期内进行规整和聚合,并支持在配置中设定日志读取速率,对于因达到采集处理极限未能在周期内采集完的数据,生成专门的监控项来进行报警,提醒用户对采集任务进行优化调整;

  • 增加前置匹配,加快日志的处理速度。在数据采集和处理过程 CPU 资源消耗最多的环节是正则的匹配和维度提取,为了加快匹配速度,我们增加了前置匹配功能,在前置匹配字段中可以配置简单的特征字符串或者正则表达式,对通过预处理的数据再进行多维度数据的匹配和提取,提高数据的处理速度。

采集信息的二次处理

通过命名正则从日志中提取出来的维度信息一般需要进行进一步处理才能满足计算、存储和展示的要求,我们提供了公式计算、IP 转换、信息映射等手段实现对数据的二次处理,使用户能更能聚焦关心的指标和数据,也能够减少数据量及其维度,减轻下游数据计算和存储模块的压力。



图 3 多维度提取


举例说明,如图 3 所示,通过命名正则从日志中提取出来的 6 个维度,下边通过公式计算、IP 地址转换、字典映射的方式对维度内容进行处理。

1 公式计算

公式计算目前支持 double、string、int 三种数据类型,支持+、-、*、/四则运算以及<、<=、==、!=、>=、>、&&、||等逻辑运算。


如果用户只想采集 uri 维度为“/page/2”,c_time 大于 30 的数据,则可通过图 4 公式对数据进行过滤。



图 4 公式计算

2IP 转换

有些线上日志中会写入请求的 IP 地址,我们需要根据源 IP 来从 IP 所属国家、省份、城市或者运营商的维度进行统计,为了支持这种场景,我们在采集程序内置了 IP 地址库和保留配置,可以将采集到的 IP 地址(包括 IPv4 和 IPv6)转换成运营商、城市、省份、国家信息,同时支持四种信息任意组合的转换。


通过“isp_province”这个默认配置则可将图 3 中的 IP 地址 114.114.114.114 转换成 IP 地址所属的运营商和身份信息,“CT”代表电信,“JIANGSU”代表江苏省,如图 5 所示。



图 5 IP 地址转换

3 信息映射

对于采集到的信息,我们通过映射表的形式对字符串和数据进行进一步转换,拿机房信息为例,假如从日志中采集到的机房信息为“bjzgc”,我们需要将所有在北京的机房全部转换为“BJ”,可通过如下的映射表实现。



图 6 映射表


通过映射表我们可以只提取关心的机房信息,不在映射表中的机房信息采集程序可以自动过滤或者默认映射为“UNKNOWN”。

4 日志时间采集

为了保证采集速率,我们将采集任务设置了周期,在同一周期内的数据采用规整后的时间戳,对于那些时间精度要求高的运维场景这种处理无法满足要求,我们提供了默认配置支持从日志中提取时间作为监控数据的时间戳。


如图 3 所示,通过默认配置 log_timestamp 将日志中的时间信息“2019-03-10 16:38:50”提取出来,并转换成时间戳“1552207130”作为多维度数据的 timestamp。

总结

本文主要介绍了我们在日志多维度采集方面的实践经验,上述方案和措施可以基本满足百度内网用户对日志多维度数据的采集需求,但是在某些特殊情况下,如单纯使用正则无法采集到完整的维度信息、采集到的维度信息需要外部数据进行转化或者正则表达式特别复杂导致处理超时等情况,就需要对日志进行特殊的处理,在《日志监控实践 - 监控 Agent 集成 Lua 引擎实现多维度日志采集》文章中给出了解决方案。


作者介绍:


赵朋川,百度高级研发工程师,负责百度智能运维产品(Noah)数据采集 Agent 程序的设计研发工作,在运维数据采集方向有着丰富的实践经验。


本文转载自公众号 AIOps 智能运维(ID:AI_Ops)。


原文链接:


https://mp.weixin.qq.com/s/Y1PqWzgRg_8DYg1Ta-SROA


2019-09-11 23:382906

评论

发布
暂无评论
发现更多内容

M4: 设计千万级学生管理系统的考试试卷存储方案

Jadedev

架构实战营

[Day32-03]-[二叉树]不同的二叉搜索树

方勇(gopher)

LeetCode 二叉树 动态规划 数据结构和算法 卡特兰数

千万级学生管理系统的考试试卷存储方案

鱼恨水

linux之登录式shell和非登录式shell

入门小站

Linux

[Day32-04]-[二叉树]二叉树的最近公共祖先

方勇(gopher)

LeetCode 二叉树 数据结构和算法

深度学习之解构基础网络结构

AIWeker

人工智能 深度学习 基础网络

这是一篇关于哈希表的爽文

武师叔

5月月更

[Day32-02]-[二叉树]在二叉树中增加一行

方勇(gopher)

LeetCode 二叉树 数据结构和算法

【愚公系列】2022 年 05月 二十三种设计模式(一)-工厂方法模式(Factory Method Pattern)

愚公搬代码

5月月更

nginx配置系列(四)请求限制

乌龟哥哥

5月月更

这个页面效果看起来真恶心,怎么解?

石云升

团队管理 项目管理 职场经验 5月月更

[Day32-05]-[BST] BST最近公共祖先

方勇(gopher)

LeetCode 二叉树 数据结构和算法

架构实战营-模块四-作业

michael

架构实战营 #架构实战营 「架构实战营」

千万级学生管理系统的考试试卷存储方案

CityAnimal

架构实战营 #架构实战营 架构师实战营 「架构实战营」

运营好公众号需要具备的能力/技能

源字节1号

软件开发

Hadoop全分布式部署

芝士味的椒盐

Java 大数据 hadoop 5月月更

Kotlin 中的泛型:协变与逆变

如浴春风

5月月更

Kubernetes 如何将 Pod 分配给节点

玄月九

Kubernetes 污点 亲和 反亲和 容忍

今天是第几周

入门小站

工具

他们连夜跑路了,原因是我给数据开发的学弟学妹写了个实习生年终总结

袁袁袁袁满

如何在网站上安装 WordPress

海拥(haiyong.site)

WordPress 5月月更

使用PIL.Image库极简生成含冬奥会元素头像

芝士味的椒盐

Python 冬奥会 5月月更

软件架构的23个基本原则

俞凡

架构

在线Excel转XML工具

入门小站

工具

深度学习之解构卷积

AIWeker

人工智能 深度学习 卷积 convolution

模块四:学生管理系统考试试卷存储方案

jiaoxn

「架构实战营」

maven构建docker镜像三部曲之一:准备环境

程序员欣宸

Java Docker 5月月更

DDD实战(9):冲刺1战术之服务设计(上)

深清秋

DDD 软件架构 生鲜电商系统

设计千万级学生管理系统的考试试卷存储方案

唐诗宋词

深入理解 Go 中的字符串

宇宙之一粟

字符串 Go 语言 5月月更

千万级学生管理系统的考试试卷存储方案

高山觅流水

「架构实战营」

日志监控实践 | 多维度数据采集_文化 & 方法_赵朋川_InfoQ精选文章