微服务业务监控和行为分析怎么作?试试日志埋点

file

1、说明

互联网公司通常都会有专门的数据团队对公司的一些业务指标负责;为了拿到这些基本的业务指标,通常也要工程团队去配合作一些数据采集工做,因而埋点诞生了。
 git

埋点的方式有不少种,本文主要介绍 日志埋点 这种方式以及实现思路和案例。数据库

日志埋点 就是经过程序打印 log 日志的方式进行业务/行为数据的记录json

 

2、整体架构

file

经过 日志埋点 来实现业务监控和行为分析主要须要如下4个步骤api

  1. 数据生成(埋点)
  2. 数据收集
  3. 数据解析(结构化)
  4. 数据落盘
  5. 数据使用(展现/分析)

 

3、方案说明

3.1. 数据生成

日志数据的生成直接使用 Logback 等日志框架就能够了,能够本身封装公共方法、aop、注解等方式来生成指定的埋点日志服务器

可是为了便于后面的数据解析,日志数据须要规范先行架构

  1. 全部的埋点日志必需约定好统一的格式,例如:{时间}|{来源}|{对象id}|{类型}|{对象属性(以&分割)}app

    按上面的格式生成的日志为:
    2019-11-07 10:32:01|api-gateway|1|request-statistics|ip=171.221.203.106&browser=CHROME&operatingSystem=WINDOWS_10框架

  2. 避免埋点的日志文件和系统自己输出的日志混淆
    file异步

    埋点的日志输出的目录、文件等须要和应用自己的日志分离,经过 Logback 的配置就能实现分布式

 

埋点案例
file

生成日志
file

网关埋点用户请求

 

3.2. 数据收集

关于日志数据的收集可选择的中间件比较多,除了图中的 FileBeat 以外还有 FlumeFluentdrsyslog 等;须要每台服务器都部署一个收集中间件。

每台服务器部署一个就好了,就算一台服务器中启了多个微服务也是能够一齐收集

PS:日志收集后面的 消息队列 并非必需的能够去掉,可是增长 消息队列 后有如下两个优势

  1. 削峰填谷:减轻后面日志解析的压力
  2. 数据共享:日志数据除了提供给日志系统以外,能够增长消费端的同时提供给其余地方使用,如流计算等

 

3.3. 数据解析

使用 Logstashgrok表达式解析日志数据并结构化,以上面的日志数据为例

2019-11-07 10:32:01|api-gateway|1|request-statistics|ip=171.221.203.106&browser=CHROME&operatingSystem=WINDOWS_10

结构化后的日志数据为:

{
    timestamp: '2019-11-07 10:32:01',
    appName: 'api-gateway',
    resouceid: '1',
    type: 'request-statistics',
    ip: '171.221.203.106',
    browser: 'CHROME',
    operatingSystem: 'WINDOWS_10'
}

 

3.4. 数据落盘

经过 Logstash 能自动建立 Elasticsearch 索引并以天为单位分片
file

能够经过索引模板来指定每一个字段的类型和分词器等属性

 

3.5. 数据使用

日志数据落盘到 Elasticsearch 后,就能够经过聚合查询等方式实时显示监控数据或者分析日志数据

监控案例
file

聚合查询逻辑可参考 https://gitee.com/zlt2000/microservices-platform

 

4、总结

日志埋点 只是其中一种埋点手段而已,优势是系统无入侵且灵活;日志收集、解析、落盘等均可以灵活搭配选择不一样的中间件,而且不须要修改源系统的代码;而且能够方便对接其余分析平台(例如: 大数据平台)

PS:业务监控是否能够不作日志埋点,直接查询业务的数据库呢?(不建议这样作)

  1. 使用日志埋点能实现监控数据与业务数据分离,监控平台不会影响或增长业务数据库的压力
  2. 使用日志埋点能方便实现实时业务数据预警

    举个栗子:日志收集后面添加流计算中间件,计算某个时间窗口内优惠卷日志的数量或者金额大于某个阀值,则发出预警

 

推荐阅读

 
扫码关注有惊喜!

file

相关文章
相关标签/搜索