概述


Windows平台:Java写日志到Flume,Flume最终把日志写到MongoDB。

系统环境


  • 操作系统:win7 64
  • JDK:1.6.0_43

资源下载

  • Maven:3.3.3
    下载、安装、入门参考:1. Maven - 开始和2. 创建一个简单的Maven项目
  • Flume:1.6.0
    下载apache-flume-1.6.0-bin.tar.gz,并解压到合适的目录(e.g. F:\temp\apache-flume-1.6.0-bin)
  • MongoDB:3.2.3
    下载mongodb-win32-x86_64-3.2.3-signed.msi,并安装到合适的目录(e.g. D:\develop\MongoDB)

辅助资源下载

  • MongoDB Java Driver:2.13.0
    下载地址:mongo-java-driver-2.13.0.jar
    下载之后放入Flume安装目录的lib下。
  • flume-ng-mongodb-sink
    Flume需要这个,才能把数据写到MongoDB中
    下载地址:flume-ng-mongodb-sink
    这是一个基于Maven的源代码,package之后,将jar包放到Flume安装目录的lib下。

初始化


数据初始化

为MongoDB指定dbpath。
  1. 新建一个目录,作为dbpath
    e.g. D:\develop\MongoDB\mydata
  2. 启动监听服务 - CMD运行
    D:\develop\MongoDB\bin\mongod --dbpath=D:\develop\MongoDB\mydata

配置Flume

  1. 生成flume-env.ps1
    在安装目录的conf/下,复制flume-env.ps1.template,重命名为flume-env.ps1
  2. 修改log4j.properties
    在安装目录的conf/下,修改文件log4j.properties;修改flume.root.logger=INFO,console

实现


Flume到MongoDB

在Flume安装目录的conf下,添加mongo-agent.properties:
agent.sources = so1
agent.channels = c1
agent.sinks = s1agent.sources.so1.type = avro
agent.sources.so1.bind = 0.0.0.0
agent.sources.so1.port = 44444
agent.sources.so1.channels = c1agent.channels.c1.type = memory
agent.channels.c1.capacity = 1000
agent.channels.c1.transactionCapacity = 100agent.sinks.s1.type = org.riderzen.flume.sink.MongoSink
agent.sinks.s1.host = localhost
agent.sinks.s1.port = 27017
agent.sinks.s1.model = single
agent.sinks.s1.db = test
agent.sinks.s1.collection = log
agent.sinks.s1.batch = 100
agent.sinks.s1.channel = c1

简单说明:

  1. 根据agent.sources.so1的相关配置,在44444端口开启监听 - log4j可以往这个端口写日志
  2. 根据agent.sinks.s1的相关配置,so1接收到的数据,将写到localhost:27017的test数据库的log-collection中
    27017是MongoDB的默认监听端口

Java到Flume

这是一个基于Maven的一个simple project,你可以从flume-ng-java2mongodb拿到源代码。

文件结构

src/main/java|---- cn.sinobest.flume.client.demo|---- LogDemo.java
src/main/resources|---- log4j.properties
pom.xml

文件内容

  1. pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.sinobest.asj</groupId><artifactId>fluent-client-demo</artifactId><version>0.0.1-SNAPSHOT</version><dependencies><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.16</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.1</version></dependency><dependency><groupId>org.apache.flume.flume-ng-clients</groupId><artifactId>flume-ng-log4jappender</artifactId><version>1.6.0</version></dependency></dependencies>
    </project>

  2. log4j.properties
    # 配置Log4jAppender,能写日志到Flume
    log4j.appender.flumeAvro=org.apache.flume.clients.log4jappender.Log4jAppender
    log4j.appender.flumeAvro.Hostname=localhost
    log4j.appender.flumeAvro.Port=44444
    log4j.appender.flumeAvro.UnsafeMode=true
    log4j.appender.flumeAvro.layout=org.apache.log4j.PatternLayout
    log4j.appender.flumeAvro.layout.ConversionPattern=%m
    # 配置根logger 此配置的日志级别和appender会被所有的logger继承
    log4j.rootLogger=INFO, flumeAvro

    注意:

    <1> org.apache.flume.clients.log4jappender.Log4jAppender负责将数据写到Flume的具体实现
    <2> 44444端口为前文Flume配置agent.sources.so1的监听端口
  3. LogDemo.java
    package cn.sinobest.flume.client.demo;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    public class LogDemo {static final Log log = LogFactory.getLog(LogDemo.class);public static void main(String[] args) {log.info("{'name':'Adam', 'age':'26', 'skill':'reading'}");}
    }

    注意:确保日志内容是json格式的字符串。

测试

  1. 启动MongoDB

    D:\develop\MongoDB\bin\mongod --dbpath=D:\develop\MongoDB\mydata

  2. 启动Flume
    # cd F:\temp\apache-flume-1.6.0-bin\bin
    flume-ng.cmd agent --conf ..\conf -f ..\conf\mongo-agent.properties -n agent

    说明:第1行命令是提醒确认当前所在路径。

  3. 运行LogDemo
  4. 查看结果
    D:\tools\PowerCmd>D:\develop\MongoDB\bin\mongo
    2016-03-08T18:05:33.168+0800 I CONTROL  [main] Hotfix KB2731284 or later update is not installed, will zero-out data files
    MongoDB shell version: 3.2.3
    connecting to: test
    > db.log.find()
    { "_id" : ObjectId("56dea2b18449e36553652bc3"), "name" : "Adam", "age" : "26", "skill" : "reading" }
    > 

    说明:
    <1> mongo默认连接test数据库,也可以使用mongo test的方式指定连接test数据库。
    <2> db.log.find()用来查看log-collection中的数据,可以看到数据已经写入成功。

附录


参考资料

  1. Flume使用小结
    主要参考了环境搭建部分,其他部分不适合。
  2. flume学习01-flume介绍
    博主写了一系列,共3篇文章来介绍Flume,这里只贴出第一篇,算是入门文章。后面有些内容没有研究。
  3. Flume 1.5日志采集并存入mongodb的安装搭建
    主要参考了Flume配置文件中,MongoSink的配置 - 后来发现博主没有指定db,数据是写到events数据库的events-collection中

转载于:https://www.cnblogs.com/ywjy/p/5255161.html

Flume学习应用:Java写日志数据到MongoDB相关推荐

  1. Java实现日志数据的采集显示

    1.日志实体类,用户记录用户登录登出 LogRec.java package q.dms.test;import java.util.Date;/*** 实体类 包含用户登录的id,ip,userNa ...

  2. java 写日志步骤

    项目希望记录用户访问时的历史.所以写日志相当重要,详细步骤如下 (1)新建项目,导入jar包 在官网上下载log4j.jar导入项目中 (2)新建Java类LogTest.java,写如下代码 pub ...

  3. 【多线程编程学习】java多线程基于数据分割的大文件下载器

    文章目录 代码:基于数据分割的大文件下载器 作为包装的存储对象类: 主文件下载类: 子任务下载类: 处理缓存: 启动类: 数据分割思想产生的问题 代码来自书籍<java多线程编程实战指南> ...

  4. java解析日志数据_Java实时监控日志文件并输出的方法详解

    Java实时监控日志文件并输出的方法详解 想在前台显示数据同步过程中产生的日志文件,在网上找到解决方案,做了代码测试好用.这里做个记录 java.io.RandomAccessFile可以解决同时向文 ...

  5. idea做一个日志自动生成的jar包,并用flume做生产者,采集日志数据,用kafka做消费者来消费日志数据

    前提:先将四台机器的zookeeper和kafka服务开启. 小任务:先准备好日志自动生成的jar包.并将其放入虚拟机master01中. 1.新建一个maven项目,命名为logmaker. pom ...

  6. java 写日志太快_Log4j2 快速入门 —— 定期/定大小生成日志文件(三)

    Log4j2 对于生成日志文件时,可以通过对中的进行设置,来完整日志文件各种生成方案 定期生成日志文件 log4j2.xml user/logs filePattern="${LOG_HOM ...

  7. Flume+Kafka+Storm+Redis构建大数据实时处理系统:实时统计网站PV、UV+展示

    http://blog.51cto.com/xpleaf/2104160?cid=704690 1 大数据处理的常用方法 前面在我的另一篇文章中<大数据采集.清洗.处理:使用MapReduce进 ...

  8. Jmeter 在 beanshell 脚本中写日志

    JMETER 在执行时,会写日志数据,我们在编写脚本的时候也可以自己写日志. 日志记录再jmeter 的bin 目录的 jmeter.log 文件中. jmeter 比较人性化,它在这里提供了脚本可以 ...

  9. 怎样用java编写日志_用JAVA写一个日志类程序以供大家学习

    中华网络安全联盟    作者:jacoo    来源:本站原创    时间:2006-4-18 说明: 尽管JAVA类库和其他工具提供了不少的纪录程序运行状态的日志类,我发觉也 不是万能的,有时需要根 ...

  10. 大数据学习总结+JAVA学习总结+大数据面试+java面试+大数据java异常总结

    文章目录 一.java模块面试问题 1.动态代理 2.浏览器禁用Cookie后的Session处理 3.主从复制的流程[重要] 5.redis的数据类型[重要] 6.Junit测试的注解 7.缓存问题 ...

最新文章

  1. 如何给Centos添加静态地址
  2. Selenium Grid的使用(分布式测试)
  3. js对HTML字符转义与反转义
  4. 在计算机领域客观事物的属性表示为数据,数据与信息试题解析
  5. 【数据结构算法】二:上三角、下三角中求数组地址--【下标的计算】
  6. 线段树的入门级 总结
  7. JAVA中DecimalFormat如何进行四舍五入?
  8. 如何打开浏览器的TLS 1.1 TLS 1.2支持
  9. E20-591考试必备资料分享
  10. 使用全局优化方法识别中文事件因果关系
  11. 计算机安全知识策划书,安全知识竞赛策划书
  12. 值得珍藏的免费观影网站
  13. dd命令测试磁盘读写速度
  14. Banana Pi BPI-R2 Pro 开源路由器采用瑞芯微Rockchip RK3568芯片方案设计
  15. 【慕课网】前端零基础入门---步骤二:页面化妆师CSS---02-CSS文本样式
  16. cmd下提示“不是内部或外部命令,也不是可运行的程序或批处理文件
  17. Linux-read函数
  18. 如何解决用360更新系统后网络连接失败
  19. 基于Pxa270和Qt图形界面技术的人脸识别与密码电子锁的门禁系统
  20. 安卓点击加减号实现数字加减功能

热门文章

  1. tm1639c语言程序,51单片机各种汇编延时子程序整理汇总
  2. Pytorch state_dict介绍
  3. Python破解验证码,只要15分钟就够了!
  4. python迭代器学习与简单的实践
  5. 据说是学习python最全的资料
  6. 2021-08-08备份数据库
  7. linux raw串口,linux下串口raw驱动(US100超声波)--Apple的学习笔记
  8. 三国演义人物出场统计代码含义_用python分析小说人物关系(二)——实战篇
  9. 机器学习 什么是Cross Entropy 交叉熵
  10. HyperLedger Composer升级fabric链码