先展示下配置信息,通过http协议将数据传入fluentd,然后match根据后面的tag: debug.** 进行匹配,最后将数据存入path中。
<source>
@type http
@id input_http
port 8888
</source>
<match debug.**>
@type file
path /var/log/fluent/test
</match>
在运行td-agent时,遇到了一个异常
按报错提示输入命令systemctl status td-agent.service
查看一下服务状态
并没有发现什么有用的提示信息,再执行一下journalctl -xe
,
发现也找不出什么有价值的信息,那只能看看td-agent.log有没有打印什么信息,执行一下cat /var/log/td-agent/td-agent.log
,
日志的第一行显示解析配置文件成功,说明配置项是没有问题的。再看看最后一行,嗯?什么情况?
2022-02-22 03:54:31 -0500 [error]: config error file="/etc/td-agent/td-agent.conf" error_class=Fluent::ConfigError error="out_file: `/var/log/fluent/test.20220222_**.log` is not writable"
它竟然说这个日志文件不可写?
并且可以看到这个文件夹都还未创建出来,这不会是用户权限的问题?可我在虚拟机用的是root权限啊?难道td-agent在安装时会自动创建一个用户?我们去看看,执行cat /etc/passwd
/etc/passwd 文件存放的是用户信息.由六个分号组成的7个信息,分别是:
用户名 (magesh): 已创建用户的用户名,字符长度 1 个到 12 个字符。
密码(x):代表加密密码保存在 `/etc/shadow 文件中。
用户 ID(506):代表用户的 ID 号,每个用户都要有一个唯一的 ID 。UID 号为 0 的是为 root 用户保留的,UID 号 1 到 99 是为系统用户保留的,UID 号 100-999 是为系统账户和群组保留的。
群组 ID (507):代表群组的 ID 号,每个群组都要有一个唯一的 GID ,保存在 /etc/group文件中。
用户信息(2g Admin - Magesh M):代表描述字段,可以用来描述用户的信息。
家目录(/home/mageshm):代表用户的家目录。
Shell(/bin/bash):代表用户使用的 shell 类型。
果然是这样,td-agent在运行时会使用td-agent这个用户去创建文件,但我们并未给td-agent去开放权限,所以执行以下命令
cd /var/log
mkdir fluent
chown td-agent:td-agent /var/log/fluent
再次运行
systemctl start td-agent.service
systemctl status td-agent.service
发现已经正常运行起来了,并且文件夹也创建好了
接着执行下curl -X POST -d 'jsnotallow={"json":"message"}' http://localhost:8888/debug.test
,然后执行下图的命令
发现数据已经被fluentd解析并且输出在配置的目标路径下了。
说说最近研究fluentd的感慨吧,国内用户并不多,一般的报错在csdn上也是搜不到的,必须看报错提示,如果没有的话,就只能去stackoverflow或者github上fluentd仓库的issues中看看有没有解决方案,使用的话,官网已经描述的非常详细了,非常推荐参照官网编写。最后附上官网链接:https://docs.fluentd.org/