CNCF之Fluentd简介与使用
CNCF(Cloud Native Computing Foundation)于 2015 年 7 月成立,隶属于 Linux 基金会,初衷围绕“云原生”服务云计算,致力于维护和集成开源技术,支持编排容器化微服务架构应用。随着应用程序的数量和公司规模的增长(尤其是越来越多的服务被容器化),在一个地方收集、分析和查询结构化日志是非常重要的。
这就是 Fluentd 的初衷。Fluentd 是一个日志收集器(类似于 logstorage ),通过它可以对日志进行过滤、净化和路由到各种目的地。与其他日志收集器一样,Fluentd 可以与各种核心和第三方输入及输出插件(如 Elasticsearch 插件、S3 插件等)一起使用。
Fluentd 还具有一定的内存存储和可靠性。从多个主机到 Fluentd、接着到Elasticsearch 集群的 rsyslog 文件的日志路径极其简洁,这一简单的例子也充分证明了使用 Fluentd 的益处所在。Fluentd是一个开源的数据收集器,专为处理数据流设计,有点像 syslogd ,但是使用JSON作为数据格式。它采用了插件式的架构,具有高可扩展性高可用性,同时还实现了高可靠的信息转发。
Fluentd使用插件:
首先介绍一下推荐使用的插件
-
用于路径中加入tag:fluent-plugin-forest
-
用于修改record:fluent-plugin-record-reformer
-
用于修改tag:fluent-plugin-rewrite-tag-filter
-
用于正则匹配日志内容,进行筛选:fluent-plugin-grep
# 客户端需要安装的插件
/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-rewrite-tag-filter
/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-grep
/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-record-reformer
# 服务器端需要安装的插件
/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-forest
Fluentd下载和安装
首先是下载,下载安装方式有多种,
可以通过Docker下载,MacOS也可以直接下载dmg文件后安装
目录在分别在以下位置,其中plist文件用于通过launchctl
命令来启动守护进程
- /Library/LaunchDaemons/td-agent.plist
- /etc/td-agent
- /opt/td-agent
- /var/log/td-agent
其中配置文件是/etc/td-agent
下的td-agent.conf
除此之外/opt/td-agent/etc/init.d/
目录下存放了可运行的文件td-agent.sh
也可以对服务设置别名方便操作
vim ~/.bash_profile #编辑添加如下脚本
alias fluentd.start =’sudo launchctl load /Library/LaunchDaemons/td-agent.plist’
alias fluentd.stop =’sudo launchctl unload /Library/LaunchDaemons/td-agent.plist’
然后通过如下命令,运行:
$ sudo launchctl load /Library/LaunchDaemons/td-agent.plist
$ less /var/log/td-agent/td-agent.log
停止运行:
$ sudo launchctl unload /Library/LaunchDaemons/td-agent.plist
简单地测试一下,通过HTTP将简单的Log发送过去
$ curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
然后可以在/var/log/td-agent
中找到内容
$ tail -n 1 /var/log/td-agent/td-agent.log
内容如下
gem安装使用
除此之外,可以通过gem进行安装,然后就可以通过命令行直接使用了
gem install fluentd -v "~> 0.12.0" --no-ri --no-rdoc
在用户路径下创建一个配置文件和插件路径
fluentd --setup ./fluent
然后就可以启动,这里我为了简单,就使用了一个更简单的配置:
<source>
@type forward
port 24224
bind 0.0.0.0
</source>
<match *.*>
@type stdout
</match>
运行
fluentd -c ./fluent/fluentd.conf
然后再打开一个终端,输入:
echo '{"json":"tttttest"}' | fluent-cat debug.test
就能发现,在运行fluentd的那个窗口中,输出了相关的信息
如图 :
通过Fluentd收集docker的日志
通过简单的配置之后,使用了我上面所列的配置文件,那么接下来在docker上启动容器即可
配置docker转储日志有两种方法,指定特定的容器或者配置docker daemon将所有容器日志均存储到fluent中。
方法1:指定容器
docker run --log-driver=fluentd --log-opt fluentd-address=myhost.local:24224
方法2: 设置全局log-driver
docker daemon --log-driver=fluentd
使用第一种方法,简单测试一下
docker run --log-driver=fluentd ubuntu echo "tttttest"
发现fluentd端输出成功了
最后就实现通过Fluentd收集日志了