使用Fluentd+MongoDB采集Apache日志

我们之前介绍了EFK日志采集分析套件,今天再介绍一个组合:Fluentd+MongoDB,用以实时收集半结构化数据。

  1. 背景知识
  2. 日志接入Fluentd后,会以json的格式在Fluentd内部进行路由。这就决定了Fluentd处理日志的方式是非常灵活的,它将日志视为半结构化数据,可以方便地修改其结构。
    相应地,日志的最终存储数据库也应该擅长处理这样的半结构或者非结构化数据。这样整个系统搭配起来才更协调和高效。
    而MongoDB恰好也是以类json的方式来处理内部数据的,非常适合作为Fluentd的目标存储。
  3. 实现机制
    我们通常以下列架构来组合Fluentd+MongoDB这对CP。
    在这个组合中,Fluentd的职责为:
    1. 持续“tail”Apache访问日志
    2. 将Apache日志文本解析为有意义的字段(如ip、path等),并缓存之
    3. 定期将缓存的日志写入MongoDB
  4. 安装部署
    1. 安装Apache、MongoDB
    2. 安装Fluentd
    3. 在Fluentd中安装MongoDB插件(最新版Fluentd已内置)
      fluent-gem install fluent-plugin-mongo

    接下来就是配置的事了。

  5. 配置说明
    1. 首先配置输入端
      <source> @type tail path /var/log/apache2/access_log pos_file /var/log/td-agent/apache2.access_log.pos <parse> @type apache2 </parse> tag mongo.apache.access</source>
      使用tail来追踪Apache的日志文件access_log,使用Fluentd内置的Apache日志解析器apache2来解析日志。日志事件tag为mongo.apache.access。
    2. 再配置输出端
      <match mongo.**> # plugin type @type mongo
      # mongodb db + collection database apache collection access
      # mongodb host + port host localhost port 27017
      # interval <buffer> flush_interval 10s </buffer>
      # make sure to include the time key <inject> time_key time </inject></match>
      <match>匹配所有mongo开头的tag,使用out_mongo作为输出插件。依次配置日志存储在MongoDB中的数据库和集合、MongoDB地址和端口。设置flush间隔为10秒,每10秒将缓存的日志写入MongoDB。
  6. 测试验证
    确保各服务正常运行。
    我们通过ping Apache来制造一些测试数据。
    $ ab -n 100 -c 10 http://localhost/
然后,在MongoDB中就可以看到这些日志了。
$ mongo> use apache> db["access"].findOne();{ "_id" : ObjectId("4ed1ed3a340765ce73000001"), "host" : "127.0.0.1", "user" : "-", "method" : "GET", "path" : "/", "code" : "200", "size" : "44", "time" : ISODate("2011-11-27T07:56:27Z") }{ "_id" : ObjectId("4ed1ed3a340765ce73000002"), "host" : "127.0.0.1", "user" : "-", "method" : "GET", "path" : "/", "code" : "200", "size" : "44", "time" : ISODate("2011-11-27T07:56:34Z") }{ "_id" : ObjectId("4ed1ed3a340765ce73000003"), "host" : "127.0.0.1", "user" : "-", "method" : "GET", "path" : "/", "code" : "200", "size" : "44", "time" : ISODate("2011-11-27T07:56:34Z") }
简单,易用,且高效。
(0)

相关推荐

  • mongo shell

    mongo shell mongo 连接 本地 mongo # 连接127.0.0.1:27017 远程 mongo "mongodb://mongodb0.example.com:2801 ...

  • (3条消息) Mongodb存储特性与内部原理

    一.存储引擎(Storage)mongodb 3.0默认存储引擎为MMAPV1,还有一个新引擎wiredTiger可选,或许可以提高一定的性能.mongodb中有多个databases,每个datab ...

  • 如何从Apache日志文件生成完整的访问者计数

    我描述了如何从Apache日志文件创建报告,以了解本地主机与其他主机之间的匹配次数.只需将IP地址替换为另一个地址,即可轻松更改该脚本,以提供针对任何单个IP地址(相对于世界其他地方)的报告. 也可以 ...

  • Windows应急响应和系统加固(9)——Windows Apache日志提取和安全分析

    Windows Apache日志提取和安全分析 一.Apache日志介绍: 1.Apache的访问日志功能由mod_log_config功能模块提供,日志格式为(CLF)Common Log Form ...

  • 编程语言采集 Nginx 日志的几种方式,你知道几种?

    来源:cnblogs.com/xiejava/p/12452434.html 由于nginx功能强大,性能突出,越来越多的web应用采用nginx作为http和反向代理的web服务器.而nginx的访 ...

  • 日志采集分析实例

    背景简述:业务的一系列的落地页产生了一批cdn日志,需要抓取落地页的地址,然后进行内容分析. 之前做过elastic stack方案做过nginx日志实时采集系统,对elastic家的产品情有独钟.配 ...

  • Fluentd部署:日志

    Fluentd是用来处理其他系统产生的日志的,它本身也会产生一些运行时日志.我们一起来了解一下Fluentd本身的日志机制. Fluentd包含两个日志层:全局日志和插件级日志.每个层次的日志都可以进 ...

  • EFK:免费的日志采集与可视化搜索套件

    我们收集日志是为了做进一步的分析.收集是第一步,收集到日志后还需要进行存储.索引,以便进行快速查询分析.我们还需要一个友好的查询界面,来方便用户使用日志. 本文介绍一个免费的开源软件组合,正好可以实现 ...

  • 编程语言Apache和Nginx关闭日志方法

    Apache和Nginx使用一段时间后日志文件会变的非常大.关闭apache日志apahce的配置文件conf文件里面 打开后把出日志的那个前面添加个#就行了 错误日志: ErrorLog " ...

  • Apache错误日志提示AH02004: SSL Proxy: Peer certificate is expired

    Apache错误日志提示AH02004: SSL Proxy: Peer certificate is expired

  • 广华日志漫笔99977(97)

    刚开始做流量的时候,不要想着我每天怎么搞个100个200个,就想着我每天怎么能搞到10个精准,我怎么能每天搞到10个精准流量,当你真的做到了这一点,当你真正做到了这一点,那你就超越了大部分人. 等人啊 ...