Fluentd是一个开源的数据收集器,专为处理数据流设计,有点像 syslogd ,但是使用JSON作为数据格式。它采用了插件式的架构,具有高可扩展性高可用性,同时还实现了高可靠的信息转发。

据分(Y)析(Y),Fluentd是由Fluent+d得来,d生动形象地标明了它是以一个守护进程的方式运行。官网上将其描述为data collector,在使用上,我们可以把各种不同来源的信息,首先发送给Fluentd,接着Fluentd根据配置通过不同的插件把信息转发到不同的地方,比如文件、SaaS Platform、数据库,甚至可以转发到另一个Fluentd。

总结一下,数据流殊途,同归与Fluentd,Fluentd做一些诸如过滤、缓存、路由等工作,将其转发到不同的最终接收方。

用Fluentd处理数据还能保证一定的实时性,其提供种类丰富的客户端lib,很适合处理单位时间emit出log数量巨大的场景。从v10后,Fluentd 不支持 Windows。

其采用Ruby编写,比较注重性能的地方采用C编写,Ruby的创始人松本老师这样评价Fluentd:

Fluentd proves you can achieve programmer happiness and performance at the same time. A great example of Ruby beyond the Web.

Heroku的联合创始人Adam Wiggins说的挺有道理:

Logs are streams, not files. I love that Fluentd puts this concept front-and-center, with a developer-friendly approach for distributed systems logging.

更多信息请看 这里

安装

安装前的准备工作

  1. 安装 ntpd

    ntpd ,以d结尾,是一个守护进程,全称是Network Time Protocol (NTP) daemon,它通过与一个Internet标准时钟服务器同步来维护系统时钟,同时也可以将本机做为一个时钟服务器对外提供时钟同步服务。更多信息请man一下ntpd。

    安装ntpd是为了防止Fluentd在收集log的时候出现非法的时间戳。

    在Ubuntu下,apt-get即可安装:

    $ sudo apt-get install ntp

    之后查看ntpd是否启动成功(pgrep返回进程号):

    $ pgrep ntpd
  1. 增加系统文件描述符的最大数量

    通过ulimit查看当前的文件描述符的最大数量:

    $ ulimit -n

    如果是1024,那是远远不够的,将下面4行添加到 /etc/security/limits.conf 中,重启机器。

    root soft nofile 65536
    root hard nofile 65536
    * soft nofile 65536
    * hard nofile 65536

    之后用ulimit查看,应该是65536了。

  1. (Optional)优化机器内核TCP/IP参数

    如果Fluentd处于一个高负载的运行环境,比如一个机器中运行了多个Fluentd实例,那么最好将下面的参数添加到 /etc/sysctl.conf 中:

    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.ip_local_port_range = 10240 65535

    然后执行 sysctl -w 或者重启机器使之生效。

    这个跟TCP/IP的细节有关系,我没有深究,貌似是为了防止短连接数过多,机器处于 TIME_WAIT 状态的TCP连接数过多,开启快速回收与重用。具体请参考 这里

安装Fluentd

写在前面

有 很多种方式来安装Fluentd,比如通过Ruby的Gem,以及Ubuntu的deb、OS X的Homebrew。

采用Ruby的Gem安装比较简单,安装的是基本版的Fluentd,即不自带 /etc/init.d 脚本,在运行时内存分配采用的是操作系统默认的方式;

而采用.rpm/.deb for Linux的方式安装呢,安装的是一个由 Treasure Data, Inc维护的稳定版本Fluentd,又被称为td-agent。为了保持一个良好的灵活性,Fluentd采用Ruby编写,性能要求比较高的地方采用C编写,考虑到一般的用户可能安装操作Ruby有困难,因此该公司维护并提供了一个稳定版本的Fluentd。该版本的Fluentd在内存分配上采用了着重避免内存碎片分配实现 jemalloc。两个版本的区别可以在这 查看

那么我们到底选用哪种方式呢,根据官方的文档。td-agent强调new features的稳定性,如果希望自己控制Fluentd的features,自己手动去更新,采用gem的方式安装。如果是第一次使用Fluentd或者在大规模的生产环境使用,推荐安装td-agent,每2-3个月,td-agent就会发布一个新的版本。

在Ubuntu 12.04上安装Fluentd

注意 这种方式截止到笔者发稿仅支持一下两个Ubuntu的版本:

  • Ubuntu 12.04 LTS / Precise
  • Ubuntu 10.04 LTS / Lucid

可以在 这里查看最新进展。

  1. (Optional but Recommend)设置GPG Key

    deb包使用 Treasure Data GPG key签名,首先将 GPG key导入apt:

    $ apt-key add /path/to/RPM-GPG-KEY-td-agent
  1. 执行下面的脚本

    echo "This script requires superuser access to install apt packages."
    echo "You will be prompted for your password by sudo." # clear any previous sudo permission
    sudo -k # run inside sudo
    sudo sh <<SCRIPT # add treasure data repository to apt
    echo "deb http://packages.treasure-data.com/precise/ precise contrib" > /etc/apt、sources.list.d/treasure-data.list # update your sources
    apt-get update # install the toolbelt
    apt-get install -y --force-yes td-agent SCRIPT

    即安装完毕。

    也可执行下面的的命令:

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

    其实脚本内容就是上面的,我粘过去的。

  1. 启动Fluentd的守护进程

    因为我们安装的是td-agent,自带 /etc/init.d/td-agent 脚本,通过该脚本启动Fluentd服务。

    $ /etc/init.d/td-agent restart
    * Restarting td-agent td-agent
    $ /etc/init.d/td-agent status
    * ruby is running

    同时还支持以下命令:

    $ /etc/init.d/td-agent start
    $ /etc/init.d/td-agent stop
    $ /etc/init.d/td-agent restart
    $ /etc/init.d/td-agent status

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

  1. 测试

    默认在配置文件中td-agent在8888端口监听,接收来自HTTP的log信息,并把其路由到stdout( /var/log/td-agent/td-agent.log ),可以用curl命令测试:

    $ curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test

    之后可以打开 /var/log/td-agent/td-agent.log查看。

Fluentd初探 简介与安装的更多相关文章

  1. Node.js 教程 01 - 简介、安装及配置

    系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...

  2. Java Gradle入门指南之简介、安装与任务管理

        这是一篇Java Gradle入门级的随笔,主要介绍Gradle的安装与基本语法,这些内容是理解和创建build.gradle的基础,关于Gradle各种插件的使用将会在其他随笔中介绍.    ...

  3. 细细品味Storm_Storm简介及安装

    Storm是由专业数据分析公司BackType开发的一个分布式实时数据处理软件,可以简单.高效.可靠地处理大量的数据流.Twitter在2011年7月收购该公司,并于2011年9月底正式将Storm项 ...

  4. VMware vSphere 5.1 简介与安装

    虚拟化系列-VMware vSphere 5.1 简介与安装  标签: 虚拟化 esxi5.1 VMware vSphere 5.1 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...

  5. Nutch搜索引擎(第2期)_ Solr简介及安装

    1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查询性能进行了优化 ...

  6. Node.js的简介和安装

    一.Node.js的简介和安装 a)       什么是Node.js? Node.js是一个开发平台 让JavaScript运行在服务器端的开发平台 ---简单点说就是用JavaScript写服务器 ...

  7. Nutch之简介与安装

    初学Nutch之简介与安装 初学Nutch之简介与安装   1.Nutch简介 Nutch是一个由Java实 现的,开放源代码(open-source)的web搜索引擎.主要用于收集网页数据,然后对其 ...

  8. Nutch搜索引擎Solr简介及安装

    Nutch搜索引擎(第2期)_ Solr简介及安装   1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的 ...

  9. DNN简介以及安装

    开源框架DNN简介以及安装 donetnuke 是一款免费的开源cms框架,目前也有收费版,不过免费版也可以适应大家大部分的需求.我前些阵子是老板让我在20天内,做好一个官网并且发布,并且指定使用dn ...

随机推荐

  1. 《C#并发编程经典实例》学习笔记-进程(process)和线程(thread)

    本文主要参考自孙钟秀主编的<操作系统教程>一书中关于进程和线程的部分. 进程 为什么引入进程? 一,刻画系统动态性,发挥系统并发性,提高资源利用率. 以C#为例,在编辑器Visual St ...

  2. EF(EntityFramework)与mysql使用,序列化问题[System.ObjectDisposedException]

    在EF 中使用mysql关联取数据时,如果当前实体中包含另一个实体的list成员,而这个成员为空的话,在json序列化的时候就会报错: '((System.Data.Entity.DynamicPro ...

  3. 如何在 Mac上 安裝 .NET Core 2.1 ?

    一.前言 Free. Cross-platform. Open source. A developer platform for building all your apps. --- .net co ...

  4. 49.Linux-wpa_cli使用之WIFI开启,扫描热点,连接热点,断开热点,WIFI关闭(49)

    本章学习内容: 1.WIFI如何开启 2.扫描热点 3.连接热点 4. 断开热点 5.关闭WIFI 本节使用的是wpa_supplicant工具,它主要包含wpa_supplicant(命令行模式)与 ...

  5. Java高并发 -- 并发扩展

    Java高并发 -- 并发扩展 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 死锁 死锁是指两个或两个以上的事务在执行过程中,因争夺锁资源而造成的一种互相等待的现象, ...

  6. react学习(三)之生命周期/refs/受控组件 篇

    挂载/卸载 //在类组件中 class Clock extends React.Component { constructor(props) { super(props); this.state = ...

  7. Less 结合 nth-child 选择器循环生成样式

    问题描述: 实现头像的堆叠效果 从第二个头像开始,每个头像都会盖住前一个头像上,遮盖的宽度为 30px 实现叠加的方式有很多,比如给每个头像添加 translateX 属性,或者使用负值 margin ...

  8. 通过css改变svg img的颜色

    需求如下图,hover的时候改变图标颜色,图标为引入的svg img 一般的解决办法有:1.字体图标改变css的color属性:2.js在hover事件中切换图片:3.老一点的方案是hover切换背景 ...

  9. JavaScript易错知识点整理[转]

    前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...

  10. css优先级计算规则——权重

    一.css的优先级 当对同一个元素设置相同的多个声明时,会按照优先级的高低选择应用哪种声明. <style> #id{ color:red; } p{ color:blue; } < ...