日志处理场景

日志量大

日志分散不易进行统一分析

难以添加有效监控

系统实现

Fluentd(td-agent)

MongoDB

Python Script(PyMongo module)

Zabbix

解决方案

系统架构

Fluentd+Mongodb+Python+zabbix

Fluentd实时收集LB日志,JSON化,存入中央Mongodb

Python程序查询Mongodb数据进行实时计算;计算结果存入zabbix;zabbix负责告警及图形展现

Fluentd/Mongodb架构图

Fluentd介绍

Fluentd is an open source data collector for unified logging layer.

Fluentd allows you to unify data collection and consumption for a better use and understanding of data.

Fluentd是一个日志收集系统,它的特点在于其各部分均是可定制化的,你可以通过简单的配置,将日志收集到不同的地方。

fluentd说明

在不使用plugin的情况下Fluentd仅仅是将日志输入转化为JSON格式输出的工具;各类plugin极大拓展了Fluentd的功能

Fluentd plugin最重要的有如下三种:

Input plugin 定义日志来源标准化,输入的格式

Buffer plugin 定义fluentd缓存的配置以实现可靠性

Output Plugin 定义输出的格式及目的地,可以是文件,网络,数据库,etc

Fluentd Input Plugin

http

让fluentd从http client获取数据

tail

tail是最常用的input plugin;

type tail

path /var/log/httpd-access.log #tail监听的文件地址

tag apache.access                   #每个输入需要一个特定标签以区别

format apache|syslog|自定义正则       #format可以灵活自定义

foward

将其他fluentd/fluent-cat命令的输出作为该fluentd的输入;

exec

通过执行外部命令,以命令执行的结果作为fluentd的输入;

Fluentd Output Plugin

Ouput Plugin用于存储Fluentd收集来的数据;目前有很多开源的plugin,如:fluentd-flume,fluentd-splunk,fluentd-cassandra,fluentd-scribe,fluentd-mongodb

Output plugin中最完美的当属mongodb plugin,因为Fluentd/Mongodb都以JSON为基础;mongodb良好的插入查询性能可以顶住海量日志实时分析的压力;mongodb的capped collection很好的解决了日志定量轮转的问题

安装部署

安装

ubuntu 12.04 安装,针对本版本,其他版本请看官网文档

curl -L http://toolbelt.treasuredata.com/sh/install-ubuntu-precise-td-agent2.sh | sh

配置

如果你是使用上面的deb/rpm包安装的Fluentd,那么配置文件位置在:/etc/td-agent/td-agent.conf,否则其位置应该在:/etc/fluentd/fluentd.conf

首先我们编辑配置文件中的source来设置日志来源

type tail

format apache

path /var/log/apache2/access_log

tag mongo.apache

其中:

type tail: tail方式是 Fluentd 内置的输入方式,其原理是不停地从源文件中获取新的日志。

format apache: 指定使用 Fluentd 内置的 Apache 日志解析器。

path /var/log/apache2/access_log: 指定日志文件位置。

tag mongo.apache: 指定tag,tag被用来对不同的日志进行分类

自定义format配置:

除了默认的apache、json等farmat配置,还可以通过写正则来配置解析器,如:

format /^(?[^ ]*) [^ ]* (?[^ ]*) \[(?[^\]]*)\] "(?\S+)(?: +(?[^ ]*) +\S*)?" (?[^ ]*) (?[^ ]*)(?: "(?[^\"]*)" "(?[^\"]*)")?$/

下面是fulentd自带的apache解析器:

class ApacheParser

REGEXP = /^(?[^ ]*) [^ ]* (?[^ ]*) \[(?[^\]]*)\] "(?\S+)(?: +(?[^ ]*) +\S*)?" (?[^ ]*) (?[^ ]*)(?: "(?[^\"]*)" "(?[^\"]*)")?$/

TIME_FORMAT = "%d/%b/%Y:%H:%M:%S %z"

。。。

https://github.com/fluent/fluentd/blob/710fc88ded9d8d5e12ee4bd4a02a1d5c86cadf4e/lib/fluent/parser.rb

下面再来编辑输出配置,配置日志收集后存储到MongoDB中

# plugin type

type mongo

# mongodb db + collection

database apache

collection access

# mongodb host + port

host localhost

port 27017

# interval

flush_interval 10s

match标签后面可以跟正则表达式以匹配我们指定的tag,只有匹配成功的tag对应的日志才会运用里面的配置。配置中的其它项都比较好理解,看注释就可以了,其中flush_interval是用来控制多长时间将日志写入MongoDB一次。

启动 fluentd(td-agent)

配置文件: /etc/td-agent/td-agent.conf

启动命令: sudo /etc/init.d/td-agent start

停止: sudo /etc/init.d/td-agent stop

重启: sudo /etc/init.d/td-agent reload

以上主要对于fluentd作为重点,对于mongo配置安装和日志分析这里没有叙述。

附:

apache/nginx access.log 说明

访问日志access_log记录了所有对Web服务器的访问活动。

正如其名字所示,访问日志access_log记录了所有对Web服务器的访问活动。

下面是访问日志中一个典型的记录:

10.1.1.95 - e800 [18/Mar/2005:12:21:42 +0800] "GET /stats/awstats.pl?config=e800 HTTP/1.1" 200 899 "http://10.1.1.1/pv/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Maxthon)"

access日志组成:

这行内容由9项构成,上面的例子中有两项空白,但整行内容仍旧分成了9项。

第一项信息是远程主机的地址。如果你想知道这个IP地址的域名,可通过nslookup或者host命令来查看。如果你想让Apache自己找出这个IP 的主机名,可以打开这个开关:HostnameLookups。(建议最好不要打开,会影响Apache记录服务器日志的速度)

第二项是空白,用一个"-"占位符替代。实际上绝大多数时候这一项都是如此。这个位置用于记录浏览者的标识,这不只是浏览者的登录名字,而是浏览者的 email地址或者其他唯一标识符。这个信息由identd返回,或者直接由浏览器返回。很早的时候,那时Netscape 0.9还占据着统治地位,这个位置往往记录着浏览者的email地址。然而,由于有人用它来收集邮件地址和发送垃圾邮件,所以它未能保留多久,很久之前市 场上几乎所有的浏览器就取消了这项功能。因此,到了今天,我们在日志记录的第二项看到email地址的机会已经微乎其微了。

第三项也是e800。这个位置用于记录浏览者进行身份验证时提供的名字。当然,如果网站的某些内容要求用户进行身份验证,那么这项信息是不会空白的。但是,对于大多数网站来说,日志文件的大多数记录中这一项仍旧是空白的。

日志记录的第四项是请求的时间。这个信息用方括号包围,而且采用所谓的"公共日志格式"或"标准英文格式"。因此,上例日志记录表示请求的时间是2005年3月18日12:21:42。时间信息最后的"+0800"表示服务器所处时区位于UTC之后的8小时。

日志记录的第五项信息或许是整个日志记录中最有用的信息,它告诉我们服务器收到的是一个什么样的请求。该项信息的典型格式是"METHOD RESOURCE PROTOCOL",即"方法 资源 协议"。

RESOURCE是指浏览者向服务器请求的文档,或URL。在这个例子中,浏览者请求的是"/stats/awstats.pl?config=e800 "。

在上例中,METHOD是GET,其他经常可能出现的METHOD还有POST和HEAD。此外还有不少可能出现的合法METHOD,但主要就是这三种。

PROTOCOL通常是HTTP,后面再加上版本号。

日志记录的第六项信息是状态代码。它告诉我们请求是否成功,或者遇到了什么样的错误。大多数时候,这项值是200,它表示服务器已经成功地响应浏览器的 请求,一切正常。一般地说,以2开头的状态代码表示成功,以3开头的状态代码表示由于各种不同的原因用户请求被重定向到了其他位置,以4开头的状态代码表 示客户端存在某种错误,以5开头的状态代码表示服务器遇到了某个错误。

日志记录的第七项表示发送给客户端的总字节数。它告诉我们传输是否被打断(即,该数值是否和文件的大小相同)。把日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。

日志记录的第八项记录的是客户在提出请求时所在的目录或URL。这次的是"http://10.1.1.1/pv/"即10.1.1.1的pv目录下的首页。大多数情况下,首页会是在httpd.conf中DocumentRoot 指令后面规定的那些类型和名字的web文件。

日志记录的第九项表示客户端的详细信息,这样你就不难理解为什么有些网站能够在页面中显示你的IP、OS、Browser了。

【参考文献】

http://www.csdn.net/article/2014-08-08/2821120

fluentd mysql_使用Fluentd + MongoDB构建实时日志收集系统相关推荐

  1. 基于 Kafka 和 ElasticSearch,LinkedIn是如何构建实时日志分析系统的?

    https://blog.csdn.net/qq_36421826/article/details/81562297 今天,和跟大家分享我们在用ElasticSearch和Kafka做日志分析的时候遇 ...

  2. linux流式访问日志,流式实时日志分析系统的实现原理

    我们知道网站用户访问流量是不间断的,基于网站的访问日志,即 Web log 分析是典型的流式实时计算应用场景.比如百度统计,它可以做流量分析.来源分析.网站分析.转化分析.另外还有特定场景分析,比如安 ...

  3. 网页版本的飞行日志分析平台是_一个轻便的实时日志收集平台wslog

    一个轻便的实时日志收集平台wslog wslog原理 利用github.com上无数的slack hook 日志工具sdk 遵循 slack hook API 规范 https://api.slack ...

  4. 基于Flink的实时日志分析系统实践

    前言 目前业界基于 Hadoop 技术栈的底层计算平台越发稳定成熟,计算能力不再成为主要瓶颈. 多样化的数据.复杂的业务分析需求.系统稳定性.数据可靠性, 这些软性要求, 逐渐成为日志分析系统面对的主 ...

  5. 号称下一代日志收集系统!来看看它有多强

    点击下方公众号「关注」和「星标」 回复"1024"获取独家整理的学习资料! 关于日志收集.处理.分析的方案,其实是很多,常见的就是ELK组合,即:Elasticsearch + L ...

  6. 一起来解读分布式日志收集系统:Facebook Scribe

    1.分布式日志收集系统:背景介绍 许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征: (1) 构建应 ...

  7. python分布式日志收集系统_Go实现海量日志收集系统(一)

    项目背景 每个系统都有日志,当系统出现问题时,需要通过日志解决问题 当系统机器比较少时,登陆到服务器上查看即可满足 当系统机器规模巨大,登陆到机器上查看几乎不现实 当然即使是机器规模不大,一个系统通常 ...

  8. printf 重新实现put_Go 实现海量日志收集系统(四)

    2020.1.16 51Reboot 将在 2020.1.16日(今天) 21:00 为您带来分享主题<大佬教你如何从 ES 初学者到 ES专家> 直播链接(提前报名):https://k ...

  9. 深入浅出ELK日志收集系统搭建

    先看一下目录图 背景 试想这么一种场景:Nginx负载了2个Tomcat,那么日志查看就很麻烦了,每次查看日志都要登录2台服务器,挨个搜索,2台还好,如果5台呢?10台呢?那查看日志就可费劲了,所以需 ...

最新文章

  1. 图像零交叉点,视频生成,视频识别,视频摘要,视频浓缩
  2. Python开发基础总结之模块+日志+自省
  3. 8 月--菜鸟吐槽日志
  4. Python(迭代、三元表达式、列表生成、生成器、迭代器)
  5. MySQL之alter和upate
  6. 与登录shell相关的文件
  7. 如何评价一个开源项目——价值流网络
  8. hitchhiker部署_《 Hitchhiker的React Router v4指南》:路由配置的隐藏值
  9. facade-pattern外观模式
  10. 修改mysql数据库编码(5.7版本)
  11. QT 5.9.0下载安装及配置教程(自动化运维环境)
  12. 数字水印技术的基本概念和现状
  13. 11款企业网络运维监控软件汇总介绍-行云管家
  14. torch.optim的一些方法
  15. 前端js正则表达式2
  16. SLAM入门之数学基础
  17. luogu P5149 会议座位
  18. 哥德尔不完全性定理:现代数学的边界
  19. 【调研】消费者调研与市场调研的区别
  20. hr读取工作日历的函数

热门文章

  1. R语言实战应用-lightgbm 算法优化:不平衡二分类问题(附代码)
  2. 对梯度下降法的简单理解
  3. linux桌面文件夹改图标,Linux 给桌面程序设置个性化图标
  4. hive解决数据倾斜问题_八种解决 Spark 数据倾斜的方法
  5. 深度学习100例-卷积神经网络(CNN)识别神奇宝贝小智一伙 | 第16天
  6. 【算法数据结构Java实现】欧几里得算法
  7. 暑期总结之--c#界面设计作业Mini U-NET(多图杀猫)
  8. 剖析Elasticsearch集群系列第二篇 分布式的三个C、translog和Lucene段
  9. 从 Spring Cloud 看一个微服务框架的「五脏六腑]
  10. 使用pandas处理时间变量