为什么我们需要Logstash,Fluentd等日志摄取器?

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Fluent-Bit旨在成为日志收集和加工的通用瑞士军刀, 同时Fluent Bit在设计时考虑了性能和低资源消耗。

疑问:既然应用能直接向ElasticSearch写日志,为什么我们还需要Logstash,Fluentd等日志摄取器?而且这些日志摄取器组件还成为日志收集的事实标准?


  1. 与成都大佬的沟通答疑:


b4c455512a04472ca0593527bd049ed3.png


  1. 最近读到的十二要素方法论第11点:Treat logs as event streams


A twelve-factor app never concerns itself with routing or storage of its output stream. It should not attempt to write to or manage logfiles. Instead, each running process writes its event stream, unbuffered, to stdout. During local development, the developer will view this stream in the foreground of their terminal to observe the app’s behavior.


总结:您的应用不应该关注日志的路由和存储(Elasticsearch / Graylog / ...),您的日志应该只输出到stdout,整个系统所有应用保持统一输出,由日志摄取器无侵入式收集


在具有多种服务的dockerized环境中,每个容器都是隔离的并拥有自己的日志,我们需要一个接口来收集这些日志。


Docker Logging Driver就是干这个的:每个docker守护程序都有一个日志驱动程序,所有容器的日志都会流经该驱动程序, Docker Logging Drive让我们具备处理、转发日志的能力。


Fluent Bit vs Fluentd


流行的库是Fluentd, 这是一个开源的日志收集、处理、聚合组件,使用Ruby开发。

Fluent-Bit是从同一项目中fok出来的,用C写成的开源日志收集器。



Fluentd Fluent Bit
Scope Containers / Servers Containers / Servers
Language C & Ruby C
Memory ~40MB ~450KB
Performance High Performance High Performance
Dependencies Built as a Ruby Gem, it requires a certain number of gems. Zero dependencies, unless some special plugin requires them.
Plugins More than 650 plugins available Around 50 plugins available
License Apache License v2.0 Apache License v2.0


下面我们使用轻量级的Fluent-bit向ElasticSearch发送容器日志。


可通过文件或者命令行配置Fluent-Bit,下面是关键的配置节:


  • Service:定义Fluent-Bit引擎的全局行为


  • Input:定义Fluent-Bit从什么地方收集数据


  • Parser:将非结构化日志转换为结构化日志


  • Filter:修改Input插件收集的传入数据


  • Output:定义Fluent Bit将数据输出到哪里


Fluent Bit as Docker Logging Driver


为收集、转发容器日志,我们需要将Fluent Bit设置为Docker Logging Driver。


  • 使用forward输入插件,监听Forward协议的转发消息


  • 要将日志转发到Elasticsearch,需设置es输出插件


fluent-bit.conf示例如下:


[SERVICE]
    log_level info
[INPUT]
    Name forward
    Listen 0.0.0.0
    port 24224
[OUTPUT]
    Name es
    Match **
    Host 127.0.0.1
    Port 9243
    # When Logstash_Format is enabled, the Index name is composed using a prefix and the date
    Logstash_Format True
    # HTTP_User <user>
    # HTTP_Passwd <pw>
    # Alternative time key, useful if your log entries contain an @timestamp field that is used by Elasticsearch
    # Time_Key es_time
    # If your Elasticsearch is using TLS, configure this
    # tls On
    # tls.verify Off


启动ES、Fluent-Bit和一个产生日志的测试项目:


version: "3.5"
services:
  elasticsearch:
    image: elasticsearch:7.6.2
    ports:
      - "9200:9200"
    environment:
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.type=single-node
  fluentbit:
    image: fluent/fluent-bit:1.5.3
    volumes:
      - type: bind
        source: ./fluent-bit.conf
        target: /fluent-bit/etc/fluent-bit.conf
    ports:
      - "24224:24224"
      - "24224:24224/udp"
    depends_on:
      - elasticsearch
  ubuntu:
    image: ubuntu
    command: [/bin/echo, "Dotnet Plus很干,值得关注!"]
    depends_on:
      - fluentbit
    logging:
      driver: fluentd
      options:
        tag: docker-ubuntu


其中注意:


  1. Fluent-Bit容器外挂pipeline配置文件


  1. Fluentd和Fluent Bit均使用fluentd作为Docker Logging Driver。


检查ElasticSearch中的日志


curl localhost:9200/_cat/indices


yellow open logstash-2020.08.22 vqoyvKE4SFCcJtfo6BRmQg 1 1 1 0 6.2kb 6.2kb


curl localhost:9200/logstash-2020.08.22/_search?pretty=true&q={'matchAll':{''}}


{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "logstash-2020.08.22",
        "_type" : "_doc",
        "_id" : "z0WsFnQBU8QzIbCaBXGY",
        "_score" : 1.0,
        "_source" : {
          "@timestamp" : "2020-08-22T14:56:33.000Z",
          "log" : "Dotnet Plus很干,值得关注!",
          "container_id" : "e921435eb7b8dc61bbb8e938bf67cea2694e2afd699ca71c4ef5b6d7cca12e34",
          "container_name" : "/ef_ubuntu_1",
          "source" : "stdout"
        }
      }
    ]
  }
}


docker应用仅使用stdout,docker logging driver将日志转发至Fluent-Bit,Fluent-Bit将它们转发给Elasticsearch。


小编结束语


以上就是利用Fluent-Bit从容器应用收集日志并发送到ElasticSearch的基本示例。


我们再回顾下Fluent-Bit产生的背景和特性:


如今,我们环境中的信息源在不断增加,数据收集越来越复杂,需要解决


  • 不同的信息来源


  • 不同的数据格式


  • 数据可靠性


  • 安全


  • 灵活的路由


  • 多个目的地


Fluent-Bit旨在成为日志收集和加工的通用瑞士军刀, 同时Fluent Bit在设计时考虑了性能和低资源消耗。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3月前
|
Java 应用服务中间件 nginx
微服务框架(二十九)Logstash Nginx 日志上报
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Logstash Nginx 日志上报 本系列文章中所使用的框架版本为Spring Boot 2.0.3...
|
3月前
|
Dubbo Java 应用服务中间件
微服务框架(三十)Logstash Kong 日志上报
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Logstash Kong 日志上报 本系列文章中所使用的框架版本为Spring Boot 2.0.3-...
|
3月前
|
JSON Java 数据格式
微服务框架(十三)Spring Boot Logstash日志采集
  本文为Spring Boot中Log4j2对接Logstash,进行日志采集。Logstah只支持log4j,使用log4j2时需要通过TCP插件调用 此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。
|
7月前
|
存储 数据采集 安全
通过filebeat、logstash、rsyslog采集nginx日志的几种方式
由于nginx功能强大,性能突出,越来越多的web应用采用nginx作为http和反向代理的web服务器。而nginx的访问日志不管是做用户行为分析还是安全分析都是非常重要的数据源之一。如何有效便捷的采集nginx的日志进行有效的分析成为大家关注的问题。本文通过几个实例来介绍如何通过filebeat、logstash、rsyslog采集nginx的访问日志和错误日志。
264 0
|
6月前
|
存储 NoSQL Redis
容器部署日志分析平台ELK7.10.1(Elasisearch+Filebeat+Redis+Logstash+Kibana)
容器部署日志分析平台ELK7.10.1(Elasisearch+Filebeat+Redis+Logstash+Kibana)
134 0
|
6月前
|
NoSQL Redis 索引
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引
Filebeat收集日志数据传输到Redis,通过Logstash来根据日志字段创建不同的ES索引
|
3月前
|
Linux
利用Logstash实现GrayLog日志转发到第三方日志平台
利用Logstash实现GrayLog日志转发到第三方日志平台
37 0
|
8月前
|
存储 消息中间件 JSON
统一日志管理方案:Spring项目logback日志与logstash和Elasticsearch整合
统一日志管理方案:Spring项目logback日志与logstash和Elasticsearch整合。
397 0
|
10月前
|
消息中间件 Java Kafka
filebeat+kafka+logstash+elasticsearch+kibana实现日志收集解决方案
filebeat+kafka+logstash+elasticsearch+kibana实现日志收集解决方案
136 0
|
Web App开发 编解码 网络协议
Nginx filebeat+logstash+Elasticsearch+kibana实现nginx日志图形化展示
Nginx filebeat+logstash+Elasticsearch+kibana实现nginx日志图形化展示
147 0