Fluentd+MongoDB,用以实时收集半结构化数据。

  1. 背景知识

    日志接入Fluentd后,会以json的格式在Fluentd内部进行路由。这就决定了Fluentd处理日志的方式是非常灵活的,它将日志视为半结构化数据,可以方便地修改其结构。

    相应地,日志的最终存储数据库也应该擅长处理这样的半结构或者非结构化数据。这样整个系统搭配起来才更协调和高效。

    而MongoDB恰好也是以类json的方式来处理内部数据的,非常适合作为Fluentd的目标存储。

  2. 实现机制

    通常以下列架构来组合Fluentd+MongoDB这对CP。

在这个组合中,Fluentd的职责为:

  • 持续“tail”Apache访问日志
  • 将Apache日志文本解析为有意义的字段(如ip、path等),并缓存之
  • 定期将缓存的日志写入MongoDB
  1. 安装部署

    3.1 安装Apache、MongoDB、Fluentd

    3.2 在Fluentd中安装MongoDB插件(最新版Fluentd已内置)
fluent-gem install fluent-plugin-mongo
  1. 配置说明

    4.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。

4.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。

  1. 测试验证

    确保各服务正常运行。通过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") }

8. 使用Fluentd+MongoDB采集Apache日志的更多相关文章

  1. 使用Fluentd + MongoDB构建实时日志收集系统

    Fluentd是一个日志收集系统,它的特点在于其各部分均是可定制化的,你可以通过简单的配置,将日志收集到不同的地方. 目前开源社区已经贡献了下面一些存储插件:MongoDB, Redis, Couch ...

  2. elk系列7之通过grok分析apache日志

    preface 说道分析日志,我们知道的采集方式有2种: 通过grok在logstash的filter里面过滤匹配. logstash --> redis --> python(py脚本过 ...

  3. elk系列7之通过grok分析apache日志【转】

    preface 说道分析日志,我们知道的采集方式有2种: 通过grok在logstash的filter里面过滤匹配. logstash --> redis --> python(py脚本过 ...

  4. Centos7 搭建 Flume 采集 Nginx 日志

    版本信息 CentOS: Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x ...

  5. logresolve - 解析Apache日志中的IP地址为主机名

    logresolve是一个解析Apache访问日志中IP地址的后处理程序. 为了使对名称服务器的影响降到最低,logresolve拥有极为自主的内部散列表缓存, 使每个IP值仅仅在第一次从日志文件中读 ...

  6. Apache日志分析

    Apache日志统计举例 加些来了解一下如何统计Apache的访问日志,一般可以用tail命令来实时查看日志文件变化,但是各种的应用系统中的日志会非常复杂,一堆长度超过你浏览极限的日志出现在你眼前时, ...

  7. 关于Apache日志的统计

    统计apache日志文件里访问量前十的ip并按从多到少排列 五月 31, 2012 by FandLR   Filed under Linux Leave a comment 解法1: cat acc ...

  8. Apache日志配置参数详细说明

    Apache日志按时间分段记录 在apache的配置文件httpd.conf中找到ErrorLog logs/error_log及CustomLog logs/access_log common Li ...

  9. Apache日志配置详解(rotatelogs LogFormat)

    logs/error_logCustomLog logs/access_log common--默认为以上部分 修改为如下: ErrorLog "|/usr/sbin/rotatelogs ...

随机推荐

  1. springboot creating bean with name 'sqlSessionFactory'

    pom.xml文件配置 <build> <plugins> <plugin> <groupId>org.springframework.boot< ...

  2. word段落前的小点·

    原因是因为修改论文时,要求在论文的标题前加上 '·' 类似: 在网上搜索了半天,都是加符号,特此记录 解决: 1.文件---选项---显示--勾选段落标记 2.修改样式 至此,设置完毕,章节前的小点已 ...

  3. TensorFlow自定义训练函数

    本文记录了在TensorFlow框架中自定义训练函数的模板并简述了使用自定义训练函数的优势与劣势. 首先需要说明的是,本文中所记录的训练函数模板参考自https://stackoverflow.com ...

  4. Linux上安装java

    1,输入命令,查看是否已经安装了Openjdk:rpm -qa | grep java 如果有已经安装的java版本或者版本低于1.7,卸载该jdk:rpm -e 软件包名字 如果不能卸载,可以加上 ...

  5. VSCode Easy Less扩展 out 配置字段

    "less.compile": { "out": "..\\css\\" // 切记文件目录查找为 '\\' or '//' 此处我的设置会 ...

  6. 【原创】Python 网易易盾滑块验证

    本文仅供学习交流使用,如侵立删! 记一次 网易易盾滑块验证分析并通过 操作环境 win10 . mac Python3.9 selenium.PIL.numpy.scipy.matplotlib 分析 ...

  7. Docker 链接sqlserver时出现en-us is an invalid culture错误解决方案

    在部署服务到docker的时候出现全球化错误 System . Global ization . Cul tureNotFoundException: Only the invariant cultu ...

  8. Vue 列动态取值

    在前端开发过程中,可能会遇到列动态取值的情况,即列表中某列的取值由两个或以上的字段的值决定. 用 Vue 实现的话可以用如下代码解决 <template slot-scope="sco ...

  9. Go语言 context包源码学习

    你必须非常努力,才能看起来毫不费力! 微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero ! 前言 日常 Go 开发中,Context 包是用的最多的一个了,几乎所有函数 ...

  10. 用GitHub Actions自动部署Hexo

    什么是 GitHub Actions ? GitHub Actions 是一个 CI/CD(持续集成/持续部署)工具,GitHub 于 2018 年 10 月推出,正式版于 2019 年 11 月正式 ...