Flume學習應用:Java寫日誌數據到MongoDB

来源:http://www.cnblogs.com/ywjy/archive/2016/03/08/5255161.html
-Advertisement-
Play Games

Windows平臺:Flume學習應用—Java寫日誌數據到MongoDB。


概述


Windows平臺:Java寫日誌到Flume,Flume最終把日誌寫到MongoDB。

系統環境


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

資源下載

輔助資源下載

  • 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 = s1

agent.sources.so1.type = avro
agent.sources.so1.bind = 0.0.0.0
agent.sources.so1.port = 44444
agent.sources.so1.channels = c1

agent.channels.c1.type = memory
agent.channels.c1.capacity = 1000
agent.channels.c1.transactionCapacity = 100

agent.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中

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 那天在調試API的時候,發現用c#寫的SHA1加密出來的結果和PHP中sha1()出來的不一樣,找了半天的原因後來才弄出來 在調試微信介面的時候大多的幫助文檔都是提供的是PHP的方法,所以在.net中實現的時候會出現很多的問題,最典型的就是token通不過驗證 現在提供一個結果與Php一樣 的SHA
  • 本次將考察三類工具,它們是每一位 MVC 程式員工具庫的成員:DI容器、單元測試框架和模仿工具。 1.創建一個示例項目 創建一個空 ASP.NET MVC 4 項目 EssentiaTools 。 1.1 創建模型類 在 Models 文件夾下新建 Product.cs 類文件 using Syst
  • 最強大腦有個小孩玩俄羅斯方塊游戲神乎其技,那麼,就寫一個吧,玩玩而已。 由於邏輯簡單,又作了一些簡化,所以代碼並不多。 using System; using System.Collections.Generic; using System.Linq; using System.Windows; u
  • 回到目錄 在MVC里,你的控制器對應的視圖一般是在Views目錄,而如果希望在Views里再分幾個模塊文件夾預設是不允許的,我們需要做一下設置,就可以實現Views下的多次文件夾層次了,例如,我們有產品模塊,用戶模塊,訂單模塊,我們就可以把它的文件夾結構設計成如下 用戶模塊:/views/UserM
  • ------解決方案--------------------------------------------------------1.看下你的輸出是不是包含在<ajax:AjaxPanel ID="AjaxPanel1" runat="server" ></ajax:AjaxPanel>標簽裡面;
  • 當應用程式需要和磁碟上的文件打交道的時候,就有了流的概念。流就像架設在應用程式所在記憶體和磁碟之間的一個管道。 大致思路 → 建立管道 //FileMode.Open打開現有文件,另外還有FileMode.Create, FileMode.Append //FileAccess表示對文件的操作許可權Fi
  • 引言:EXIF,是英文Exchangeable Image File{}#endregion#region 數據轉換結構/// summary>/// 轉換數據結構/// /summary>public struct MetadataDetail{public string Hex;//十六進位字元
  • 在典型的CMS系統中,通常需要為某個欄目指定個友鏈地址,通過指定友鏈地址,該欄目的地址更人性化、方便記憶,也有利用於搜索引擎優化。 但在MVC中,通常需要在應用程式啟動時註冊路由規則,該路由規則又通常和控制器進行了關聯,也就是某個地址通常情況下都是有對應的控制器進行處理的。本文介紹瞭如何在MVC環境...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...