使用LogHub进行日志实时采集

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 日志服务[LogHub功能](~~43721~~)提供日志数据实时采集与消费,其中实时采集功能支持30+种手段,这里简单介绍下各场景的采集方式。

日志服务LogHub功能提供日志数据实时采集与消费,其中实时采集功能支持30+种手段,这里简单介绍下各场景的接入方式。

数据采集一般有两种方式,区别如下。我们这里主要讨论通过LogHub流式导入(实时)采集。

方式 优势 劣势 例子
批量导入 吞吐率大,面向历史存量数据 实时性较差 FTP、OSS上传、邮寄硬盘、SQL数据导出
流式导入 实时,所见即所得,面向实时数据 收集端要求高 LogHub、HTTP上传、IOT,Queue

背景

“我要点外卖“是一个平台型电商网站,用户、餐厅、配送员等。用户可以在网页、App、微信、支付宝等进行下单点菜;商家拿到订单后开始加工,并自动通知周围的快递员;快递员将外卖送到用户手中。

screenshot

运营需求

在运营的过程中,发现了如下的问题:

  1. 获取用户难,投放一笔不小的广告费对到渠道(网页、微信推送),收货了一些用户,但无法评判各渠道的效果
  2. 用户经常抱怨送货慢,但慢在什么环节,接单、配送、加工?如何优化?
  3. 用户运营,经常搞一些优惠活动(发送优惠券),但无法获得效果
  4. 调度问题,如何帮助商家在高峰时提前备货?如何调度更多的快递员到指定区域?
  5. 客服服务,用户反馈下单失败,用户背后的操作是什么?系统是否有错误?

数据采集难点

在数据化运营的过程中,第一步是如何将散落日志数据集中收集起来,其中会遇到如下挑战:

  • 多渠道:例如广告商、地推(传单)等
  • 多终端:网页版、公众账号、手机、浏览器(web,m站)等
  • 异构网:VPC、用户自建IDC,阿里云ECS等
  • 多开发语言:核心系统Java、前端Nginx服务器、后台支付系统C++
  • 设备:商家有不同平台(X86,ARM)设备

我们需要把散落在外部、内部日志收集起来,统一进行管理。在过去这块需要大量几种工作,现在可以通过LogHub采集功能完成统一接入。

screenshot

日志统一管理、配置

  1. 创建管理日志项目Project,例如叫myorder
  2. 为不同数据源产生日志创建日志库Logstore,例如:

    • wechat-server (存储微信服务器访问日志)
    • wechat-app (存储微信服务器应用日志)
    • wechat-error (错误日志)
    • alipay-server
    • alipay-app
    • deliver-app (送货员app状态)
    • deliver-error (错误日志)
    • web-click (H5页面点击)
    • server-access(服务端Access-Log)
    • server-app (应用)
    • coupon (应用优惠券日志)
    • pay (支付日志)
    • order(订单日志)
  3. 如需要对原始数据进行清洗与ETL,可以创建一些中间结果logstore

(更多操作可以参见快速开始/管理控制台

用户推广日志采集

为获取新用户,一般有2种方式:

  1. 网站注册时直接投放优惠券
  2. 其他渠道扫描二维码,投放优惠券

    • 传单二维码
    • 扫描网页二维码登陆

做法

定义如下注册服务器地址,生成二维码(传单、网页)供用户注册扫描。用户扫描该页面注册时,就知道用户通过特定来源进入,并记录日志。

http://examplewebsite/login?source=10012&ref=kd4b

当服务端接受请求时,服务器输出如下日志:

2016-06-20 19:00:00 e41234ab342ef034,102345,5k4d,467890
  • time:注册时间
  • session: 浏览器当前session,用以跟踪行为
  • source:来源渠道,例如活动A为10001, 传单为10002,电梯广告为10003
  • ref:推荐号,是否有人推荐注册,没有则为空
  • params:其他参数

收集方式:

  1. 应用程序输出日志到硬盘,通过Logtail采集
  2. 应用程序通过SDK写入,参见SDK

服务端数据采集

支付宝/微信公众账号编程是典型的Web端模式,一般会有三种类型日志:

  • Nginx/Apache 访问日志:用以监控、实时统计

    10.1.168.193 - - [01/Mar/2012:16:12:07 +0800] "GET /Send?AccessKeyId=8225105404 HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Linux i686 on x86_64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"
  • Nginx/Apache 错误日志

    2016/04/18 18:59:01 [error] 26671#0: *20949999 connect() to unix:/tmp/fastcgi.socket failed (111: Connection refused) while connecting to upstream, client: 10.101.1.1, server: , request: "POST /logstores/test_log HTTP/1.1", upstream: "fastcgi://unix:/tmp/fastcgi.socket:", host: "ali-tianchi-log.cn-hangzhou-devcommon-intranet.   sls.aliyuncs.com"
  • 应用层日志:应用层日志要把事件产生的时间、地点、结果、延时、方法、参数等记录详细,对于扩展类字段一般放在最后

    {
        "time":"2016-08-31 14:00:04",
        "localAddress":"10.178.93.88:0",
        "methodName":"load",
        "param":["31851502"],
        "result":....
        "serviceName":"com.example",
        "startTime":1472623203994,
        "success":true,
        "traceInfo":"88_1472621445126_1092"
    }
  • 应用层错误日志:错误发生时间、代码行、错误码、原因等

    2016/04/18 18:59:01 :/var/www/html/SCMC/routes/example.php:329 [thread:1] errorcode:20045 message:extractFuncDetail failed: account_hsf_service_log

做法

  1. 日志写到本地文件,通过Logtail配置正则表达式写到指定Logstore
  2. Docker中产生日志可以使用容器服务集成日志服务
  3. Java程序可以使用Log4J Appender日志不落盘, LogHub Producer Library(客户端高并发写入)Log4J Appender
  4. C#、Python、Java、PHP、C等可以使用SDK写入
  5. Windows服务器可以使用Logstash采集

终端用户日志接入

  • 移动端:可以使用移动端SDK IOS, Android、或MAN(移动数据分析)接入
  • ARM设备:ARM平台可以使用Native C交叉编译
  • 商家平台设备:X86 平台设备可以用SDK、ARM平台可以使用Native C交叉编译

Web/M 站页面用户行为

页面用户行为收集可以分为两类:

  1. 页面与后台服务器交互:例如下单,登陆、退出等。
  2. 页面无后台服务器交互:请求直接在前端处理,例如滚屏,关闭页面等。

做法

  1. 第一种可以参考服务端采集方法
  2. 第二种可以使用Tracking Pixel/JS Library收集页面行为,参考Tracking Web接口

服务器日志运维

例如:

  • Syslog日志

    Aug 31 11:07:24 zhouqi-mac WeChat[9676]: setupHotkeyListenning event NSEvent: type=KeyDown loc=(0,703) time=115959.8 flags=0 win=0x0 winNum=7041 ctxt=0x0 chars="u" unmodchars="u" repeat=0 keyCode=32
  • 应用程序Debug日志

    __FILE__:build/release64/sls/shennong_worker/ShardDataIndexManager.cpp
    __LEVEL__:WARNING
    __LINE__:238
    __THREAD__:31502
    offset:816103453552
    saved_cursor:1469780553885742676
    seek count:62900
    seek data redo
    log:pangu://localcluster/redo_data/41/example/2016_08_30/250_1472555483
    user_cursor:1469780553885689973
  • Trace日志

    [2013-07-13 10:28:12.772518]    [DEBUG] [26064]  __TRACE_ID__:661353951201    __item__:[Class:Function]_end__  request_id:1734117   user_id:124 context:.....

做法

  • 参考服务端采集方法

不同网络环境下数据采集

LogHub在各Region提供 访问点,每个Region提供三种方式接入点:

  • 内网(经典网):本Region内服务访问,带宽链路质量最好(推荐)
  • 公网(经典网):可以被任意访问,访问速度取决于链路质量、传输安全保障建议使用HTTPS
  • 私网(专有网VPC):本Region内VPC网络访问

更多请参见网络接入,总有一款适合你。

其他

  1. 参见LogHub完整采集方式
  2. 参见日志实时消费,涉及流计算、数据清洗、数据仓库和索引查询等功能。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7月前
|
存储 数据采集 安全
通过filebeat、logstash、rsyslog采集nginx日志的几种方式
由于nginx功能强大,性能突出,越来越多的web应用采用nginx作为http和反向代理的web服务器。而nginx的访问日志不管是做用户行为分析还是安全分析都是非常重要的数据源之一。如何有效便捷的采集nginx的日志进行有效的分析成为大家关注的问题。本文通过几个实例来介绍如何通过filebeat、logstash、rsyslog采集nginx的访问日志和错误日志。
256 0
|
数据采集 监控 JavaScript
网站流量日志分析— —数据采集—使用 web 服务器自带日志记录采集|学习笔记
快速学习网站流量日志分析——数据采集—使用 web 服务器自带日志记录采集
544 0
网站流量日志分析— —数据采集—使用 web 服务器自带日志记录采集|学习笔记
|
8月前
|
消息中间件 数据采集 SQL
1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume(一)
1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume(一)
|
3月前
|
网络安全 数据安全/隐私保护
使用rsync+nxlog同步+采集应用日志并接入到GrayLog5.1【优化篇】
使用rsync+nxlog同步+采集应用日志并接入到GrayLog5.1【优化篇】
28 0
|
3月前
|
JSON NoSQL 网络安全
业务服务器免装插件,使用rsync+nxlog同步+采集应用日志并接入到GrayLog5.1
业务服务器免装插件,使用rsync+nxlog同步+采集应用日志并接入到GrayLog5.1
39 0
|
6月前
|
NoSQL 应用服务中间件 Redis
Filebeat限制采集的日志大小实际应用验证
Filebeat限制采集的日志大小实际应用验证
|
7月前
|
弹性计算 监控 应用服务中间件
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
200 0
|
7月前
|
自然语言处理 Java 开发工具
实战:ELK环境部署并采集springboot项目日志
实战:ELK环境部署并采集springboot项目日志
|
8月前
|
消息中间件 数据采集 JSON
1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume(二)
1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume(二)
通过MAE和WEB采集基站一键式日志方法
通过MAE和WEB采集基站一键式日志方法

相关产品

  • 日志服务