网站首页 > 精选教程 正文
一、日志采集
- 日志接收服务端
Nginx在处理高并发上表现优异。因此我们采用Nginx作为日志接收的服务端。 Nginx的部署相对比较简单,在请求量很大时,我们可以部署两台 Nginx服务器,使用负载均衡。
Nginx关键配置里,主要是配置日志格式、日志路径等信息。日志格式在后续的日志解析中会用到,按照分隔符进行分割。我们可以在conf.d中设置不同的路由规则,比如在请求1.gif时,日志放在/a目录,请求2.gif时,日志放在/b目录。如果发送的单条信息量不大,可以采用get模式,如果采用post模式,需要安装php。安装后,就可以往index.php进行post数据。
2、前端采集
对于网站用户的浏览数据,我们一般采用埋点方式,在网页的公共块中引入统计js。网页在加载时,js的功能代码就会收集相关的数据,比如用户访问的地址,用户浏览器信息,用户id信息,将这些信息进行组装,比如以json形式。最后以参数形式,发送到上面第一步的日志接收服务端的地址。对于用户点击按钮的事件,我们可以监听鼠标点击事件,在触发时执行我们组装发送数据的逻辑。目前很多公司采用这种方式进行采集,我们可以看下汽车之家网站首页,抓包时可以看到,在访问首页时会有下面的请求,可以看到这个请求的参数里,封装了很多用户请求的信息
而对于app端的数据采集,一般则需要客户端编码,在一定事件触发下,组装相关数据,进行发送。比如在打开app时,客户端会收集设备信息、网络状态、软件版本信息等,组装成一定格式,发送到日志接收的服务的地址。为了方便部署,可以将这些采集功能的代码封装成SDK。如果使用过一些第三方的统计时,可以很清楚的了解其工作方式。
在这个步骤中,比较重要的一点是对数据字段的定义、发送格式的选型,json,Protocol Buffers等。在客户端数据采集时,由于客户端是流量敏感的,还需要制定一些策略,比如发送数据的压缩、包装、4g网络延迟发送等。
二、日志收集
Flume是一款分布式、高可用的高效日志收集工具。他有多种部署架构,比如下面这种方式,多个日志收集节点(收集flume),一个日志汇总节点(汇总flume)。Flume分为source、channel、sink三个角色类型,分别是数据来源、数据中转类型、和数据发送的目的地类型。
我们先了解下flume工作的三个组件
1、Source 也就是数据的收集端:比较常用的有:
Avro Source:通过监听avro端口接收客户端的事件流 ;
spooldir:监听目录内的数据变动 接收数据流
在新版本里还提供了Taildir Source 方式,来监控文件内数据数据的新增,并近实时的读取出来。 除了上述比较常用的,还支持HTTP Source、 HDFS Source、Exce Source等很多方式,可以查阅官方文档。
2、Channel channel是作为数据的缓冲,一般我们缓存数据会有内存、和硬盘两种方式,因此,Flume提供了 MemoryChannel(内存)和 Spillable Memory Channel(优先内存满后放入磁盘),JDBC Channel(JDBC),Kafka Channel(Kafka) 等多种类型。
3、Sink Sink则是从channel中取出数据,将数据发往最终的目的地。常见的sink有Avro Sink,HDFS Sink,Kafka Sink,Hbase Sink等。
这三个组件的功能如果不满足需求,都可以进行自定义开发。
我们以图1中的部署结构,“收集flume”用来监控Nginx日志目录发送到“汇总flume”,“汇总flume”将日志进行收集后,发送到Kafka队列和HDFS两个目的地中。我们看一下收集Flume的配置:
上面配置需要注意的是,source的type为spooldir,spooldir配置了需要监控的目录,ignorePattern配置了忽略以tmp结尾的文件(flume在读取文件时如果文件内容发生变化会报错,因此我们在文件还有写操作时,将文件后缀命名为tmp),deletePolicy定义了读取完文件后,对该文件的处理,我们配置为立即删除。
channel定义为内存硬盘混合存储。sink方式为将数据发送到我们的汇总flume监听的avro端口。
以上是汇总flume配置,需要注意的是,如果sink和channel是一对一的,也就是说sink到几个目的地就需要定义几个channel。如果多个sink公用一个chanel,那么一份数据是会被均匀分配到多个sink 是不完整的。
猜你喜欢
- 2024-10-15 windows 10 下docker布置nginx+php环境,用宿主WEB目录负载均衡
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)