本文在【flume使用(二):采集远程日志数据到MySql数据库】一文基础之上进行测试操作。本文使用到的:

flume版本、jdk版本、mysql、数据库表、javaBean、自定义的mysqlSink、以及多agent配置均同【flume使用(二):采集远程日志数据到MySql数据库】

一、需求说明

采集远程系统上log4j实时生成的日志到本机上进行数据库持久化。

二、设计

数据流:

(1)log4j(配置文件配置flume输出)

----[通过avro协议传输]------->(2)一个agent(source:avro; channel:memory; sink:avro)

----[通过avro协议传输]------>(3)一个agent(source:avro; channel:memory; sink:自定义mysqlSink)

---[mysqlSink进行jdbc持久化]----->(4)mysql数据库

本测试为了方便一些:

(1)是在windows上直接eclipse执行;(可以打包让运行在linux机器202上)

(2)是linux机器202;

(3)是linux机器201;

(4)数据库在linux机器201上

三、实施

1.编写实时输出log4j日志程序

(1)新建maven测试项目:pom.xml

4.0.0

yichao.mym

flume-log4j

0.0.1-SNAPSHOT

log4j

log4j

1.2.16

org.apache.flume

flume-ng-core

1.7.0

org.apache.flume.flume-ng-clients

flume-ng-log4jappender

1.7.0

(2)编写log4j.properties

log4j.rootLogger=INFO, stdout, flume

log4j.logger.per.flume=INFO

### flume ###

log4j.appender.flume=org.apache.flume.clients.log4jappender.Log4jAppender

log4j.appender.flume.layout=org.apache.log4j.PatternLayout

log4j.appender.flume.Hostname=192.168.216.202

log4j.appender.flume.Port=44444

### stdout ###

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Threshold=INFO

log4j.appender.stdout.Target=System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n

(3)编写日志打印程序

package yichao.mym.base.bean;

import org.apache.log4j.Logger;

public class WriteLog {

protected static final Logger logger = Logger.getLogger(WriteLog.class);

public static void main(String[] args) throws Exception {

int name = 0;

while (true) {

logger.info("log4j-flume-name-"+name+","+(name++));

Thread.sleep(1000);

}

}

}

注意这里打印的数据必须要能让mysqlSink.java能够解析。由于log4j输出数据格式问题,导致原本根据“,”拆分的字符不能正确解析,原因是输出的数据如: [ log4j-flume-name-1668,1668   ] 。这条数据前后都有间隔,导致第二个字段"1688  "不能被转换成整型。

解决方式:修改解析方式:mysqlSink.java中在string转int类型时,先对string进行去除空格处理

处理前:person.setAge(Integer.parseInt(content.substring(content.indexOf(",")+1)));

处理后:person.setAge(Integer.parseInt(content.substring(content.indexOf(",")+1).trim()));

目前文章flume使用(二)已经做了修正

2.编写采集log4j实时传输过来数据的flume的配置文件

此配置文件放到linux机器202中,而原linux机器201的conf配置文件不变仍然使用:avro-mysql.conf

文件名:log4jAvro-avro.conf

agent1.sources=source1

agent1.channels=channel1

agent1.sinks=mysqlSink

# describe/configure source1

agent1.sources.source1.type=avro

agent1.sources.source1.bind=192.168.216.202

agent1.sources.source1.port=44444

agent1.sources.source1.channels=channel1

# use a channel which buffers events in memory

# type:memory or file is to temporary to save buffer data which is sink using

agent1.channels.channel1.type=memory

agent1.channels.channel1.capacity=5000

agent1.channels.channel1.transactionCapacity=1000

agent1.sinks.mysqlSink.type=avro

agent1.sinks.mysqlSink.channel=channel1

agent1.sinks.mysqlSink.hostname=192.168.216.201

agent1.sinks.mysqlSink.port=4545

配置文件同样放在linux机器202的flume目录中的bin中

四、测试都进入flume中的bin目录下执行命令

1.启动linux机器201

./flume-ng agent -c ../conf -f ../conf/avro-mysql.conf -n agent1 -Dflume.root.logger=INFO,console

2.启动linux机器202(注意启动的配置文件)

./flume-ng agent -c ../conf -f ../conf/log4jAvro-avro.conf -n agent1 -Dflume.root.logger=INFO,console

3.在windows上执行编写好的实时输出log4j的程序

此时刷新mysql数据库表,即可看到数据正源源不断的插入进来:

flume可以实时监控mysql嘛_flume使用(三):实时log4j日志通过flume输出到MySql数据库...相关推荐

  1. python实时监控文件目录_教你三种方法,用 Python实时监控文件

    原标题:教你三种方法,用 Python实时监控文件 在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题后去解决 ...

  2. java实时监控数据变化_服务数据实时监控平台

    1.前言:         之前做性能测试,使用jmeter线程回环的方式并发压力,说起来jmeter原生报告"太丑了.太丑了.太丑了.........". 前两天看到" ...

  3. python实现实时监控_基于 Python 的交换机实时监控系统的设计与实现

    从高校校园网运维工作实际出发,论文提出了一种基于 Python 语言+SNMP协议的网络交换机监测系统设计思路与实现方法.整个系统系统采用B/S模式,基于轻量级的web开发框架web.py实现.后端采 ...

  4. 【云驻共创】华为云之手把手教你搭建IoT物联网应用充电桩实时监控大屏

    文章目录 前言 1.什么是充电桩 2.什么是IOT 3.什么是端.边.云.应用协同 4.什么是Astro轻应用 一.玩转lOT动态实时大屏(线下实际操作) 1.Astro轻应用说明 1.1 场景说明 ...

  5. PostgreSQL 业务数据质量 实时监控 实践

    2019独角兽企业重金招聘Python工程师标准>>> 标签 PostgreSQL , pg_stat , 实时质量监控 背景 当业务系统越来越庞大后,各个业务线的数据对接会越来越频 ...

  6. python实时监控文件大小_python实现实时监控文件的方法

    在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题后去解决,比如要监控nginx的$request_time和 ...

  7. HTML+CSS+JavaScript+Ajax+ECharts实现疫情实时监控大屏-2设计与实现

    疫情期间,各类应用系统.大数据系统为防疫抗疫带来了巨大助力.国家博物馆首次将代码列为藏品,那就是抗击疫情期间来自阿里程序员写的健康码第一行代码以及研发人员的签名.这展现了广大程序员在疫情面前,争当勇敢 ...

  8. php 支付宝账单监控,支付宝账单监测 收款监测 实时监控

    支付宝账单监测 收款监测 实时监控 支付宝账单监测 收款监测 实时监控 前段时间,有一朋友想让我做一套支付宝监控系统,具体需求如下: 监控自己的支付宝账单,并对接到自己的订单系统,如果支付宝有一笔收款 ...

  9. py 网站实时监控+可手动回溯回放网站数据的实现

    这里以xxx壁纸网站为例,实现可回溯数据与实时监控,其实要实现实时监控并不难,但是要实现数据回溯所涉及的细节就特别的多了 先说实时监控,先获取主网页的信息,对当前主网页的信息进行提取,从而获取时间信息 ...

最新文章

  1. scrum看板管理产品线路图
  2. docker-ce-17.09 网络基础配置
  3. selenium 获取请求返回内容的解决方案
  4. 学c语言用vs,毫无编程基础的小白准备学习C语言,用VC6还是VS2015?
  5. java中多态父类的成员变量和方法调用问题
  6. typedef的四个用途和两个陷阱
  7. java sql inj_Java防止SQL注入的几个途径
  8. Ⅴ0还有别的方法设置图案吗_水冷空调扇如何使用 水冷空调扇使用方法介绍【图文】...
  9. 前台实现ajax 需注意的地方
  10. gpt和mbr用来装服务器系统,给win10分区用MBR还是GPT?详解MBR还是GPT的区别
  11. 增强 扫描王 源码_camscanner(扫描全能王)功能解析与复现 - 页面增强
  12. HM编码器代码阅读(16)——帧间预测之AMVP模式(四)预测MV的获取
  13. R语言批量提取excel当中的数据
  14. Bookmarklet - 小书签,实用浏览器小工具
  15. 使用python进行分布分析(算数平均、几何平均、偏度、峰度,绘制直方图),以2022年上半年沪深300指数为例
  16. Java实现 LeetCode 52 N皇后 II
  17. L2-4 哲哲打游戏 (25 分)_模拟
  18. Paintbrush for mac(绘图工具)
  19. 2019年TI杯 简易电路特性测试仪 制作过程(4)——程序总体分析 20/04/20
  20. 使用Font-Awesome图标字体库

热门文章

  1. 直播预告 | 双边分支网络BBN:攻坚长尾分布的现实世界任务
  2. 免费报名 | 智源论坛:智能处理器探索,AI技术前沿精粹尽览
  3. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】最小费用最大流
  4. mysql食堂系统E R图_教务管理系统数据库E/R图
  5. javaMail操作QQ邮箱发送邮箱 Demo
  6. MySQL和PGSQL事务锁等待超时时间
  7. 微服务架构下的安全认证与鉴权
  8. mysql主表一条数据对应从表多条数据需要只显示一条
  9. Applese 的取石子游戏
  10. Yuhao and a Parenthesis