简介
Fluentd(td-agent)是一个日志采集器,提供了丰富的插件来适配不同的数据源、输出目的地等
Fluentd is an open source data collector, which lets you unify the data collection and consumption for a better use and understanding of data.
从图中可以看出,有了Fluentd,原来混乱的数据发送有了一个统一的处理app:Fluentd。
本篇文章使用系统为CentOS
安装
在线安装
官网提供了一个直接安装的脚本,使用如下命令即可完成安装,首先要保证自己的网络通畅:
curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh
echo "=============================="
echo " td-agent Installation Script "
echo "=============================="
echo "This script requires superuser access to install rpm 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 GPG key
rpm --import https://packages.treasuredata.com/GPG-KEY-td-agent
# add treasure data repository to yum
cat >/etc/yum.repos.d/td.repo <<'EOF';
[treasuredata]
name=TreasureData
baseurl=http://packages.treasuredata.com/3/redhat/\$releasever/\$basearch
gpgcheck=1
gpgkey=https://packages.treasuredata.com/GPG-KEY-td-agent
EOF
# update your sources
yum check-update
# install the toolbelt
yes | yum install -y td-agent
SCRIPT
# message
echo ""
echo "Installation completed. Happy Logging!"
echo ""
从这个脚本可以看出:添加了一下yum源,使用yum直接安装,比较简单。
离线安装
大多数产品化时,基本上是使用离线安装的,我们下载rpm包进行安装。
下载所有rpm包
找一台网络通畅的CentOS机器,首先添加yum源
# add GPG key
rpm --import https://packages.treasuredata.com/GPG-KEY-td-agent
# add treasure data repository to yum
cat >/etc/yum.repos.d/td.repo <<'EOF';
[treasuredata]
name=TreasureData
baseurl=http://packages.treasuredata.com/3/redhat/\$releasever/\$basearch
gpgcheck=1
gpgkey=https://packages.treasuredata.com/GPG-KEY-td-agent
EOF
# update your sources
yum check-update
使用下面命令下载所有rpm包
mkdir /home/fluentd_rpms
yum -y install td-agent --downloadonly --downloaddir=/home/fluentd_rpms
有了rpm包,找到依赖顺序,使用rpm -ivh *.rpm
进行安装
启动服务
查看是否安装:rpm -qa|grep td-agent
使用命令启动:
systemctl start td-agent
默认配置文件路径:
/etc/td-agent/td-agent.conf
默认日志文件路径:
/var/log/td-agent/td-agent.log
可以从这个日志文件中查看td-agent服务运行日志/报错信息
名词解释
source:指定数据源
match:指定输出地址
filter:指定了一个事件处理过程
system:用来设置系统的配置
label:为output和filter分组
@include:使用它可以在配置文件里面包含其他的配置文件
插件:fluentd采集发送日志时要使用插件,一些插件是内置的,要使用非内置的插件需要安装插件
下图为常用的input插件:
下图为常用的output插件:
@type:一般用来指定使用的插件名称
具体情景配置
开放tcp、http端口接收数据,发送到本地文件
# Receive events from 20000/tcp
# This is used by log forwarding and the fluent-cat command
<source>
@type forward
port 20000
</source>
# http://this.host:8081/myapp.access?json={"event":"data"}
<source>
@type http
port 8081
</source>
# Match events tagged with "myapp.access" and
# store them to /var/log/td-agent/access.%Y-%m-%d
# Of course, you can control how you partition your data
# with the time_slice_format option.
<match myapp.access>
@type file
path /var/log/td-agent/access
</match>
可以看到,我们使用了2个输入源(tcp、http),一个输出(file),使用@type来指定插件名称。
测试请求
curl -X POST -d 'json={"event":"data"}' http://localhost:8081/myapp.access
当发送这个请求时,fluentd 引擎会将这个事件自动转换为如下格式的数据:
generated by http://this.host:8081/myapp.access?json={"event":"data"}
tag: myapp.access #用来标识事件的标记
time: (current time) #当前事件
record: {"event":"data"} #传入的数据
输出到文件的数据
可以看到fluentd采集了日志,并发送到了文件中:
[root@localhost access]# cat buffer.b578cf2dd43c2e00f6fd9a38197bef4e8.log
2018-10-22T19:01:46+08:00 myapp.access {"event":"data"}