logstash beats 系列 & fluentd

一、logstash

      Logstash: 是一个灵活的数据传输和处理系统,在beats出来之前,还负责进行数据收集。Logstash的任务,就是将各种各样的数据,经过配置转化规则,统一化存入Elasticsearch。使用Ruby开发的Logstash在灵活性上,非常出色。不过性能一直是被诟病的问题。

     由于Logstash在数据收集上并不出色,而且作为agent,性能并不达标。elastic发布了beats系列轻量级采集组件。至此,elastic形成了一个完整的生态链和技术栈,成为大数据市场的佼佼者。

二、Elastic Stack Beats 系列

    Beats 是 ELK Stack 技术栈中负责单一用途数据采集并推送给 Logstash 或 Elasticsearch 的轻量级产品。   

  Beats 架构:

    beats 是一个使用 Golang 构建的平台,libbeat 是其核心库,用来提供API进行与Elasticsearch,Logstash 的连接,还能配置输入特性和实现信息收集等工作。其中封装一个输出模块(Publisher),输出模块可以负责将收集到的数据发送给 Logstash 或者 Elasticsearch。由于 go 语言设计有 channel,收集数据的逻辑代码与 Publisher 都是通过 channel 通信的,耦合度的最低的。因此,开发一个收集器,完全不需要知道Publisher 的存在,程序运行的时候自然就“神奇”的把数据发往服务端了。除此之外,还封装了配置文件处理、日志处理、守护化等功能,方便开发者拓展 beats 的能力。 

Beats 是一组轻量级采集程序的统称,我们通常常用的几个如下:

        1)  filebeat: 进行文件和目录采集,主要用于收集日志数据。

        2) metricbeat: 进行指标采集,指标可以是系统的,也可以是众多中间件产品的,主要用于监控系统和软件的性能。

        3)packetbeat: 通过网络抓包、协议分析,对一些请求响应式的系统通信进行监控和数据收集,可以收集到很多常规方式无法收集到的信息。

        4) Winlogbeat: 专门针对 windows 的 event log 进行的数据采集。

        5) Heartbeat: 系统间连通性检测,比如 icmp, tcp, http 等系统的连通性监控。

        6) 可以通过 beats 生成器来生成自己的 beats

1. filebeats

    filebeat是构建于beats之上的,应用于日志收集场景的实现,用来替代 Logstash Forwarder 的下一代 Logstash 收集器,是为了更快速稳定轻量低耗地进行收集工作,它可以很方便地与 Logstash 还有直接与 Elasticsearch 进行对接。


1) 健壮性

filebeat 异常中断重启后会继续上次停止的位置。(通过${filebeat_home}\data\registry文件来记录日志的偏移量)

2) 智能调节传输速度,防止logstash、es 过载

Filebeat 使用压力敏感协议(backpressure-sensitive)来传输数据,在 logstash 忙的时候,Filebeat 会减慢读取-传输速度,一旦 logstash 恢复,则 Filebeat 恢复原来的速度。


2. Metricbeat 

  Metricbeat 是一个轻量级的系统级性能指标监控工具。收集CPU,内存,磁盘等系统指标和 Redis,nginx等各种服务的指标。

    1)通过在Linux,Windows,Mac上部署Metricbeat,可以收集cpu,内存,文件系统,磁盘IO,网络IO等统计信息。

    2)支持采集 Apache, NGINX, MongoDB, MySQL, PostgreSQL, Redis, and ZooKeeper等服务的指标。零依赖,只需要在配置文件中启用即可

    3)如果你使用Docker管理你的服务。可以在该主机上单独起一个Metricbeat容器,他通过从proc文件系统中直接读取cgroups信息来收集有关Docker主机上每个容器的统计信息。不需要特殊权限访问Docker API

    4)Metricbeats是ELK Stack全家桶中的一员,可以和ELK无缝协同工作。例如使用Logstash二次处理数据,用Elasticsearch分析,或者用Kibana创建和共享仪表盘。

3. Packetbeat

Packetbeat 是一个轻量级的网络数据包分析工具。Packetbeat可以通过抓包分析应用程序的网络交互。并且将抓到的数据发送到 Logstash 或者Elasticsearch。 

1)Packetbeat 轻松的实时监控并解析像HTTP这样的网络协议。以了解流量是如何经过你的网络。Packetbeat 是被动的,不增加延迟开销,无代码侵入,不干涉其他基础设施。

2)Packetbeat是一个库,支持多种应用程序层协议,如 http、dns、mysal、icmp、postgres、redis 等。

3)Packetbeat可以让你实时在目标服务器上进行抓包-解码-获取请求和响应-展开字段-将json格式的结果发送到Elasticsearch。

4)Packetbeat是ELK Stack全家桶中的一员,可以和ELK无缝协同工作。例如使用Logstash二次处理数据,用Elasticsearch分析,或者用Kibana创建和共享仪表盘。

4. Winlogbeat

  Winlogbeat 是一个轻量级的 Windows 事件日志收集工具。将 Windows 事件发送到 Elasticsearc h或者Logstash

  如果你有 Windows 服务器的话,其实可以从 Windows 事件日志中看到很多东西。例如,登陆(4624),登陆失败(4625),插入USB便携设备(4663)或者新装软件(11707)。WinlogBeat可以配置从任何事件日志通道读取并且结构化提供原始事件数据。使得通过 Elasticsearch 过滤和聚合结果变得很容易。

    Winlogbeat是ELK Stack全家桶中的一员,可以和ELK无缝协同工作。例如使用Logstash二次处理数据,用Elasticsearch分析,或者用Kibana创建和共享仪表盘。

5. Heartbeat

Heartbeat 是一个心跳检测工具,主要监控服务的可用性。监控给定的地址是否可用(官网原话:对于给定的URL列表,Heartbeat就问一句,还活着没?活着吱一声。。。) 可以结合ELK Stack其他产品做进一步的分析

1)不管你是测试同主机服务还是其他网络服务,Heartbeat都可以很轻松的生成正常运行时间和响应时间数据。而且修改配置不需要重启Heartbeat

2)Heartbeat通过ICMP,TCP,和HTTP进行ping,也支持TLS,身份验证(authentication ),和代理(proxies)。由于简单的DNS解析,你可以监控所有负载均衡的服务(原文:You can monitor all the hosts behind a load-balanced server thanks to simple DNS resolution)

3)现如今基础设施,服务和主机经常动态调整。Heartbeat可以修改配置文件后自动加载(原文:Heartbeat makes it easy to automate the process of adding and removing monitoring targets via a simple, file-based interface.)

4)Heartbeat是ELK Stack全家桶中的一员,可以和ELK无缝协同工作。例如使用Logstash二次处理数据,用Elasticsearch分析,或者用Kibana创建和共享仪表盘。

6. 创建一个自己的 Beat

    可以根据官方文档,使用 beats 生成器生成自己的 beats

    https://www.elastic.co/cn/blog/build-your-own-beat

三、 Fluentd

Fluentd是一个完全开源免费的log信息收集软件,支持超过125个系统的log信息收集。其架构图如图


Fluentd可以分为客户端和服务端两种模块。客户端为安装在被采集系统中的程序,用于读取log文件等信息,并发送到Fluentd的服务端。服务端则是一个收集器。在Fluentd服务端,我们可以进行相应的配置,使其可以对收集到的数据进行过滤和处理,并最终路由到下一跳。下一跳可以是用于存储的数据库,如MongoDB, Amazon S3, 也可以是其他的数据处理平台,比如Hadoop。

1. install & 启动

由于Fluentd的安装较为麻烦,所以业界流行的稳定安装版本其实是有Treasure Data公司提供的td-agent

curl-Lhttps://toolbelt.treasuredata.com/sh/install-ubuntu-trusty-td-agent2.sh|sh

通过start, stop, restart等命令可以启动、关闭和重启Fluentd服务。此时默认的Fluentd配置文件的目录是/etc/td-agent/td-agent.conf文件。

2. Post Sample Logs via HTTP

默认情况下,/etc/td-agent/td-agent.conf文件已经对td-agent进行了基本的配置。可以接收通过HTTP Post的数据,并将其路由、写入到/var/log/td-agent/td-agent.log中。

可尝试通过以下curl命令来尝试post数据。

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

执行之后,可在输出log的最后一行找到我们输入的测试数据。

3. Syntax of Config

在Fluentd中,配置文件非常重要,它定义了Fluentd应该执行的操作。

打开/etc/td-agent/td-agent.conf文件,可以看到配置文件的具体内容。配置文件中基本会出现的配置分为以下几种:

source: 定义输入

match:定义输出的目标,如写入文件,或者发送到指定地点。

filter:过滤,也即事件处理流水线,可在输入和输出之间运行。

system:系统级别的设置。

label:定义一组操作,从而实现复用和内部路由。

@include:引入其他文件,和Java、python的import类似。

1)source: 定义输入

Fluentd支持多输入。每一个输入配置必须包含类型/type,比如tcp数据输入,或者http类型输入。type将指定使用的input plugin。以下的示例中就定义了两个输入源,一个是从24224端口进入的tcp数据流,另一个是从9880端口进入的http数据。

# Receive events from 24224/tcp# This is used by log forwarding and the fluent-cat command@type forward  port 24224#http://this.host:9880/myapp.access?json={"event":"data"}@type http  port 9880

Source指定的input插件将带有{tag, time,record} 三个属性的事件/event提交给Fluentd的引擎,完成数据的输入。

2)match:定义输出的目标,如写入文件,或者发送到指定地点

Match配置了数据流的匹配规则和匹配成功后所需执行的动作,和路由表项类似。比如以下的配置中就对匹配myapp.access标签成功的数据包执行file类型动作,将数据写入到路径为/var/log/fluent/access的文件中。

# Match events tagged with "myapp.access" and# store them to /var/log/fluent/access.%Y-%m-%d# Of course, you can control how you partition your data# with the time_slice_format option.@type file  path /var/log/fluent/access

标准的动作有file和forward等。File表明写入文件,而forward表明转发到下一跳。

Match Pattern的设计与正常的正则匹配没有区别,具体的分类如下:

*:匹配tag的某一部分,比如a.*可以匹配a.b,但a.b.c无法匹配成功。**:匹配0个或者多个tag部分。比如a.**可以匹配a.b,a.b.c{X,Y,Z}:匹配X,Y,orZ,或关系。

此外,他们还可以混用,比如a.{b,c,d}.*等等。当标签内,有多个匹配模式时,将支持或逻辑的匹配,即只要匹配成功人一个都执行对应的操作。比如:

匹配a和b.匹配a,a.b,a.b.c

3)Logging

Fluentd支持两种类型的logging 配置,一种是 global 全局的,另一种是针对插件的Plugin。

支持的log的输出级别有如下几种:

fatal error warn info debug trace

4)Fluentd有5种类型的插件,分别是:

Input:完成输入数据的读取,由source部分配置

Parser:解析插件

Output:完成输出数据的操作,由match部分配置

Formatter:消息格式化的插件,属于filter类型

Buffer:缓存插件,用于缓存数据

每一个类型都包含着多种的插件,比如input类型就包含了以下几种插件:

in_forward   in_http   in_tail   in_exec  in_syslog  in_scribe

5)Route

Route指的是数据在Fluentd中的处理流水线,一般的流程为

input -> filter -> output

input -> filter -> output with label

即由输入插件获取数据,然后交给filter做处理,然后交给output插件去转发。同时,也支持数据包/事件的重新提交,比如修改tag之后重新路由等等。

reroute event by tags

reroute event by record content

reroute event to other label

4. Use case

此处将选择一个最简单的使用案例来介绍Fluentd的使用。Fluentd收集Docker的登陆信息案例。

首先创建一个config file, 用于配置Fluentd的行为,可命名为”in_docker.conf“。

type forward  port 24224  bind 0.0.0.0type stdout

然后保存文件。使用以下命令运行Fluentd。

$fluentd-cin_docker.conf

若运行成功则可见输出信息如下所示:

$ fluentd -c in_docker.conf2015-09-01 15:07:12 -0600 [info]: reading config file path="in_docker.conf"2015-09-01 15:07:12 -0600 [info]: starting fluentd-0.12.152015-09-01 15:07:12 -0600 [info]: gem 'fluent-plugin-mongo' version '0.7.10'2015-09-01 15:07:12 -0600 [info]: gem 'fluentd' version '0.12.15'2015-09-01 15:07:12 -0600 [info]: adding match pattern="*.*" type="stdout"2015-09-01 15:07:12 -0600 [info]: adding source type="forward"2015-09-01 15:07:12 -0600 [info]: using configuration file:@type forward    port 24224    bind 0.0.0.0@type stdout2015-09-01 15:07:12 -0600 [info]: listening fluent socket on 0.0.0.0:24224

然后启动docker containner。如果之前没有安装过docker engine,请读者自行安装。由于docker 本身支持Fluentd收集信息,所以可以通过启动命令来启动Fluentd的client/客户端。

$dockerrun--log-driver=fluentdubuntuecho"Hello Fluentd!"HelloFluentd!

以上命令中的ubuntu为一个镜像,如果本地没有,docker engine会自动下载,并在此镜像上创建容器。启动容器后,查看默认的输出信息文件:/var/log/td-agent/td-agent.log,可在最后一行查看到输出的信息。

总结

Fluentd是一个优秀的log信息收集的开源免费软件,目前以支持超过125种系统的log信息获取。Fluentd结合其他数据处理平台的使用,可以搭建大数据收集和处理平台,搭建商业化的解决方案。

四、Fluentd & logstash 对比

logstash支持所有主流日志类型,插件支持最丰富,可以灵活DIY,但性能较差,JVM容易导致内存使用量高。

fluentd支持所有主流日志类型,插件支持较多,性能表现较好。

参考:

https://www.jianshu.com/p/9c26bd9f6ebd

https://juejin.im/entry/58bad514ac502e006bf70517

http://soft.dog/2015/12/24/beats-basic/

http://www.muzixing.com/tag/fluentd.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容