前文传送门:Logging with ElasticSearch, Kibana, ASP.NET Core and Docker

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

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

  2. 最近读到的十二要素方法论第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。

  • 使用foward输入插件,监听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配置文件
  2. 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在设计时考虑了性能和低资源消耗。

为什么我们需要Logstash,Fluentd等日志摄取器?的更多相关文章

  1. Logstash,Fluentd, Logtail对比伤害

    摘要: 针对主流日志采集客户端(Logstash,Fluentd,以及日志服务客户端Logtail)进行功能.性能和稳定性测评 日志收集的场景 DT时代,数以亿万计的服务器.移动终端.网络设备每天产生 ...

  2. 使用ELK(Elasticsearch + Logstash + Kibana) 搭建日志集中分析平台实践--转载

    原文地址:https://wsgzao.github.io/post/elk/ 另外可以参考:https://www.digitalocean.com/community/tutorials/how- ...

  3. logstash收集syslog日志

    logstash收集syslog日志注意:生产用syslog收集日志!!! 编写logstash配置文件 #首先我用rubydebug测试数据 [root@elk-node1 conf.d]# cat ...

  4. Filebeat+Kafka+Logstash+ElasticSearch+Kibana 日志采集方案

    前言 Elastic Stack 提供 Beats 和 Logstash 套件来采集任何来源.任何格式的数据.其实Beats 和 Logstash的功能差不多,都能够与 Elasticsearch 产 ...

  5. Centos6.5使用ELK(Elasticsearch + Logstash + Kibana) 搭建日志集中分析平台实践

    Centos6.5安装Logstash ELK stack 日志管理系统 概述:   日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的 ...

  6. logstash采集tomcat日志、mysql错误日志

    input{ file { path => "/opt/Tomcat7.0.28/logs/*.txt" start_position => "beginni ...

  7. logstash收集rsyslog日志

    (1)rsyslog配置 在192.168.1.31配置 #vim /etc/rsyslog.conf *.* @@192.168.1.32:514 //所有设备名,所有日志级别都发送到192.168 ...

  8. Elasticsearch+Logstash+Kibana搭建日志平台

    1 ELK简介 ELK是Elasticsearch+Logstash+Kibana的简称 ElasticSearch是一个基于Lucene的分布式全文搜索引擎,提供 RESTful API进行数据读写 ...

  9. 日志分析平台ELK之日志收集器logstash

    前文我们聊解了什么是elk,elk中的elasticsearch集群相关组件和集群搭建以及es集群常用接口的说明和使用,回顾请查看考https://www.cnblogs.com/qiuhom-187 ...

随机推荐

  1. SpringBoot实现前后端数据交互、json数据交互、Controller接收参数的几种常用方式

    1.获取参数的集中常见注解 @PathVariable:一般我们使用URI template样式映射使用,即url/{param}这种形式,也就是一般我们使用的GET,DELETE,PUT方法会使用到 ...

  2. lemon使用方法

    1.打开lemon,点击文件--新建比赛 2.输入比赛标题.保存文件名.比赛目录,点击确定 3.打开主文件夹,找到刚才创建的目录,双击打开 4.进入文件夹\(data\) 5.建立一个名为T1的文件夹 ...

  3. 详解 MySQL 面试核心知识点

    一.常见存储引擎 1.1 InnoDB InnoDB 是 MySQL 5.5 之后默认的存储引擎,它具有高可靠.高性能的特点,主要具备以下优势: DML 操作完全遵循 ACID 模型,支持事务,支持崩 ...

  4. 老男孩武老师的Django笔记

    武老师的 Django 博客笔记 基础篇 https://www.cnblogs.com/wupeiqi/articles/5237704.html 进阶篇 https://www.cnblogs.c ...

  5. Biopython 第三方库示例

    Biopython 第三方库示例 https://biopython-cn.readthedocs.io/zh_CN/latest/

  6. NodeJS 极简教程 <1> NodeJS 特点 & 使用场景

    NodeJS 极简教程 <1> NodeJS 特点 & 使用场景 田浩 因为看开了所以才去较劲儿.   1. NodeJS是什么 1.1 Node.js is a JavaScri ...

  7. CF R 209 div 2 CF359B Permutation 构造

    LINK:Permutation 休闲一下 开了一道构造题. 看起来毫无头绪 其实仔细观察第二个条件 0<=2k<=n. 容易想到当n是奇数的时候 k的范围更小 再手玩一下第一个条件 容易 ...

  8. 账本APP开发

    服务端开发 好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 我平时喜欢用账 ...

  9. java动态代理——jvm指令集基本概念和方法字节码结构的进一步探究及proxy源码分析四

    前文地址 https://www.cnblogs.com/tera/p/13336627.html 本系列文章主要是博主在学习spring aop的过程中了解到其使用了java动态代理,本着究根问底的 ...

  10. 《JAVA并发编程的艺术》学习笔记

    第一章:并发编程的挑战 1.1 上下文切换 即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制.时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通 ...