关注分享主机优惠活动
国内外VPS云服务器

Fluent构建日志收集服务(Fluent日志文件)

简介公司需要设置一台日志收集服务器,用来将公司的项目日志收集在一台服务器上,方便查看,减轻各个项目服务器的压力。然而,由于目前资源不足,麋鹿和EFK被遗弃。最后,经过对Linux自带的Syslog和fluentd的研究和尝试,虽然Linux自带的Syslog更简单,但是汇总的数据中会出现乱码(怀疑是Appender的问题),而且将日志信息合并成Json格式比较麻烦,所以选择fluentd进行日志收集。

1.在搭建环境的准备中fluentd用于日志收集,源代码用于安装,需要安装一些依赖插件如Ruby。下面是要依次安装的组件。

1.1安装ruby,下载ruby压缩包ruby-2.6.5.tar.gz,版本:2.6.5,解压。

tar+ZXVF ruby -2 . 6 . 5 . tar . gzcd Ruby -2 . 6 . 5安装Ruby,安装需要gcc。

yum安装-y gcc。/configure prefix =/export/source/ruby make & amp;amp& ampampMake安装完成后,修改系统配置文件/etc/profile,最后将ruby目录添加到path中。

export ruby _ home =/export/source/ruby export path = $ path:$ Java _ home/bin:$ ruby _ home/bin验证安装是否成功。

[root @ localhost ruby -2 . 6 . 5]# ruby -vruby 2 . 6 . 5 p 14(2019-10-01 revision 67812)[x86 _ 64-Linux]显示ruby版本号,安装成功。

1.2获取流畅源代码,从github拉流畅源代码,github地址:fluent。

git克隆https://github.com/fluent/fluentd.gitcd fluent d

1.3修改gem源首先检查当前默认的源。

gem source * * * current sources * * * https://rubygems.org/remove默认源

gem sources -r https://rubygems.org/增加来源。目前有ruby -中国源可用,新增ruby -中国源。

gem sources -a https://gems . ruby -China . com https://gems . ruby -China . com添加到sources #检查当前源gem source * * * current sources * * * https://gems . ruby -China . com以更新缓存。

宝石来源-u

1.4安装Bundlegem安装bundle er,等待安装成功的提示。

1.5构建fluent进入fluent文件夹后,构建项目。

[root @ localhost fluentd]# bundle install获取gem......捆绑完成!11个Gemfile依赖项,现在安装了37个gem。使用“捆绑信息[gemname]”查看捆绑的gem的安装位置。[root @ localhost fluent d]# bundle exec rake build fluent d 1 . 7 . 3 build to pkg/fluent d+1 . 7 . 3 . gem .[root @ localhost fluent d]# gem install pkg/fluent d+1 . 7 . 3 . gem成功安装fluent d+1 . 7 . 3 fluent d的解析文档安装fluentd-1.7.3 fluent d -1 . 7 . 3的ri文档安装fluent d -1 . 7 . 3一个安装fluent的文档在3秒钟后S1 gem安装完成。

1.6运行fluent[root @ localhost fluent]# fluent --setup。fluent -c ./fluent/fluent . conf -vv & amp;最后,fluentd读取的配置文件信息显示在控制台上,并打印相关日志。至此,日志收集服务器所需的fluentd已经搭建完成,下一步就是配置fluentd完成日志收集功能。

2.安装过程中遇到的问题

2.1在没有zlib包的情况下安装bundler错误:加载命令:install(加载错误)无法加载此类文件--zlib错误:执行gem时...(nomethoderror)nil的未定义方法“invoke _ with _ build _ args ”: nil class解决方案安装zlib-devel

Yum -y install zlib-devel进入ruby源码文件夹,安装ruby自己提供的zlib包ruby-2.5.1/ext/zlib。

Ruby-2.6.5/ext/zlibruby。/extconf.rb make make install在make时会报错。

make:* * * *没有使目标`/include/ruby.h '成为` zlib.o '所需的规则。停下来。修改目录中的Makefile。

zlib . o:$(top _ srcdir)/include/ruby . h

换成

zlib.o:../../include/ruby.h

你可以在这里成功。

2.2没有openssl错误描述:无法加载这样的文件-- openssl

/export/source/ruby/lib/ruby/2 . 6 . 0/ruby gems/core _ ext/kernel _ require . Rb:54:in ` require ':无法加载这样的文件--OpenSSL(LoadError)29:from/export/source/ruby/bin/gem:21:in ` & lt;主& gt'28:from/export/source/ruby/lib/ruby/2 . 6 . 0/ruby gems/gem _ runner . Rb:59:in ` run 27:from/export/source/ruby/lib/ruby/2 . 6 . 0/ruby gems/command _ manager . Rb:148:in ` run 26:from/export/source/ruby/lib/ruby/ruby/2 . 6 . 0/ruby gems/command _ manager . Rb:178:in ` process _ args '.../export/source/ruby/lib/Ruby/2 . 6 . 0/Ruby gems/request . Rb:84:in ` rescue in configure _ connection _ for _ https ':无法要求openssl、安装OpenSSL并重新构建Ruby(首选)或使用非-HTTPS源(Gem::Exception)22:from/export/source/Ruby/bin/Gem:21:in ` & lt;main & gt21:from/export/source/ruby/lib/ruby/2 . 6 . 0/ruby gems/gem _ runner . Rb:59:in ` run 20:from/export/source/ruby/lib/ruby/2 . 6 . 0/ruby gems/Command _ manager . Rb:148:in ` run 19:from/export/source/ruby/lib/ruby/ruby/2 . 6 . 0/ruby gems/Command _ manager . Rb:178:in ` process _ args '...解决办法

yum安装openssl-devel -y

在ruby本身提供的附加文件夹ruby-2.6.5/ext/openssl中,执行ruby。/extconf.rb,然后make。

露比。/extconf.rb make make install make错误

make:* * * *没有使目标`/include/ruby.h '成为' ossl.o '所需的规则。停下来。修改Makefile并添加top_srcdir =..// ..

3.完成要求并修改配置。在上一节中,我们在日志服务器上完成了单间fluentd。日志收集服务器有五个需求,相关需求通过修改fluentd等配置文件来完成。

1.对需求日志的存储路径应用+日期分割来修改配置文件,并在模块中添加path属性。如果需要将同一个标签输出到不同的文件,需要将@type设置为copy,然后在块中添加一个块,并在。

可以在path属性中读取过滤后的标签,标签的格式为。在回退配置文件中,这样您就可以在回退配置文件中设置应用程序名称,然后在fluentd.conf中读取它通过path中的${ tag }占位符读取客户端发送的标记。标签属性可以根据。例如,当标签为test.demo时,标签[0]代表test,标签[1]代表demo。时间的配置可以直接在路径path中设置,时间和timekey配置添加到缓冲块中。配置文件如下所示:

& lt商店& gt@ type file @ id demo path/data/log/$ { tag[3]}/$ { tag[4]}/% Y-% M-% d/$ { tag[4]} symlink _ path/data/tmp/$ { tag[3]} _ $ { tag[4]} _ data . log追加false time _ slice _ wait 10m time _ slice _ format % Y % m % d & lt;缓冲标记,时间& gtflush _ mode interval flush _ interval 30s chunk _ limit _ size 5MB time key 1d & lt;/buffer & gt;& lt/store & gt;产生的目录如下

├──[21]dab│└──[56]log demo│├──[4.0k]2019-10-14││├──[3.2m]log demo . 2019 10 14 _ 0 . log││├──[3.2m]log demo . 2019 10 14 _ 1 . log││├──[3.5m]log demo . 2019 10 14 _ 2 . log││├──[3.9m]log demo

2.根据文件大小对需要存储的日志文件进行分段,并修改配置文件,在匹配块中增加缓冲块配置。配置内容如下

& ltmatch level . com . zhy . * * & gt;@ type file @ id demo path/data/log/$ { tag[3]}/$ { tag[4]}/% Y-% M-% d/$ { tag[5]}/$ { tag[4]} _ $ { tag[5]} symlink _ path/data/tmp/$ { tag[3]} _ $ { tag[4]} _ data . log #不要追加日志文件append false < buffer tag,time & gt#刷新模式flush_mode interval #刷新周期flush_interval 10s #块大小限制chunk _ limit _ size 5mb time key 1d </buffer & gt;& lt/store & gt;& lt/match & gt;修改缓冲区刷新模式为固定时间间隔间隔刷新,设置刷新周期,不追加文件。这样,当缓冲区有内容时,会每隔10s保存一次日志文件,或者当缓冲区块达到5MB时立即保存一次,以保证每个日志文件的大小在5MB以内。生成的日志目录结构如下:

。├──[21]dab│└──[56]log demo│├──[4.0k]2019-10-14│├──[3.2m]log demo . 2019 10 14 _ 0 . log│├──[1.7m]log demo . 2019 10 14 _ 10 . log│├──[1.9m]log demo . 2019 10 14 _ 11 . log│3.2m

3需要根据日志级别划分日志。为了方便查看各种级别的日志,需要在目录中添加日志级别,并放入相应的日志。在不修改客户端标记的情况下,标记将在fluentd服务器中重新生成,以包括日志级别,并且需要rewrite_tag_filter插件来重置标记。您需要在使用之前安装该插件。

[root @ localhost fluentd]$ fluent -gem install fluent -plugin -rewrite -tag -filter fetching fluent -plugin -rewrite -tag -filter -2 . 2 . 0 . gem fetching fluent -config -regex P-type -1 . 0 . 0 . gem成功安装fluent -config -regex P-type -1 . 0 . 0成功安装fluent -plugin -rewrite -tag -filter -2 . 2 . 00

& ltmatch com.zhy. * * & gt@ type rewrite _ tag _ filter & lt规则& gt关键消息模式^\[(\w+)\]标签级别。${tag}。1美元& lt/rule & gt;& lt/match & gt;原始输入日志格式如下

219-10-14 14:44:09.000000小编0800 com . zhy . SMS . opapplication:{ " msg ":"[错误]这是错误日志...error\r\n "," level":"ERROR "," logger ":" com . sk . controller . log controller "," thread": "pool-3-thread-397 "," message ":"这是一个错误日志...error"}在日志信息中,msg和level对应的值都包含日志级别,可以从msg和level键中选择日志级别组成新的日志级别。配置文件中pattern属性写的正则表达式用来匹配msg中[]的值,然后取出的日志级别放在原标签后面$1。

注意:如果match上的匹配规则可以对应于修改的标签,则标签将总是被匹配,导致修改标签失败,如下所示

& ltmatch com.zhy. * * & gt@ type rewrite _ tag _ filter & lt规则& gt关键消息模式^\[(\w+)\]标记${tag}。1美元& lt/rule & gt;& lt/match & gt;此时修改后的标签还是以com.zhy开头,所以修改会失败,所以在新标签前加上级别前缀,级别可以自定义。

& ltmatch com.zhy. * * & gt@ type rewrite _ tag _ filter & lt规则& gt关键消息模式^\[(\w+)\]标签级别。${tag}。1美元& lt/rule & gt;& lt/match & gt;

4.目录需要通过nginx进行映射。在nginx配置文件中添加服务器配置,给服务器添加root属性,设置映射到服务器根目录下的/data目录。位置属性分为两个步骤。第一步是打开文件浏览,第二步是设置浏览器文本格式来显示文件内容。

location/log { auto index on;}通过autoindex打开文件浏览功能,将客户端浏览路径配置为/log。

地点^/log/.*\.log $ { add _ header content -Type text/plain;}首先通过正则表达式匹配浏览路径,匹配规则以/log开头,以结尾的文件。日志。然后,将Content-Type设置为text/plain,就可以直接在浏览器中浏览日志内容了。如果不设置,会弹出下载窗口进行下载,需要清理浏览器的缓存。

服务器{ listen 8002autoindex _ exact _ size off字符集ut F-8;autoindex _ localtime on根/数据;location/log { auto index on;}地点^/log/.*\.log $ { add _ header content -Type text/plain;} }

5需要生成一个固定大小的日志文件,并能够立即查看日志。要求是在项目文件夹下生成一个日志文件。与以前的日志文件不同,该日志显示当前的日志内容,并且具有固定的大小。因为fluentd的append生成的文件可以追加到一个文件中,但是不能固定大小,日志大小会无限膨胀。通过查阅资料,我们最终选择使用linux自带的日志转储工具logrotate来实现这个需求。

目前linux自带logrotate,安装起来很方便,没必要。而且github中logrotate的更新还是相当活跃的。Github地址:logrotate

1.修改配置

在使用logrotate之前,修改fluentd配置以在每个项目中生成相应的即时日志文件。将存储块添加到匹配块。

& lt商店& gt@ type file @ id immediate log path/data/log/$ { tag[3]}/$ { tag[4]}/$ { tag[4]} _ immediate append true & lt;缓冲标签& gtpath/data/tmp/$ { tag[3]}/$ { tag[4]}/$ { tag[4]} _ immediate flush _ mode interval flush _ interval 5s & lt;/buffer & gt;& lt/store & gt;在配置中,会在对应的项目文件夹下生成一个名为appname_immediate.log的日志文件,日志文件后面会追加append,并定期用5s刷新。因为它是即时日志文件,所以刷新频率很高。不使用即时模式的原因是考虑到服务器负载,如果立即刷新,负载可能会很高,所以我们选择延迟几秒钟追加日志内容。

然后修改logrotate配置文件。配置文件在/etc/logrotate.conf中,但是在这个配置文件中不方便管理。因此,您可以自己编写一个配置文件,并将其保存在/etc/logrotate.d目录中,其中已经保存了您自己的几个logrotate配置。在这里,我们创建一个名为applog的新配置文件,并将配置项添加到该文件中:

/data/log/*/* _ immediate . log { daily # Run rotate 3 #每天转储三个大小为10m的文件#当要转储的文件大于10MB时,转储压缩#压缩转储文件copytruncate #复制转储文件并清空原始文件}logrotate配置文件中的第一行指示转储文件的路径。/data/log目录中所有以_immediate.log结尾的文件都转储到这里,并且可以使用通配符进行路径配置。有关配置的其余部分,请参见注释。这里的主要功能是每天转储一次日志文件。当文件大小超过10MB时,将被转储和压缩。最多有三个转储文件。其他配置请参考官网:logrotate配置详情。

配置完成后,可以通过命令检查配置文件是否正确。

# -d:调试模式,验证配置文件logrotate -d/etc/log rotate . conf运行后,控制台上会显示读取的配置文件、翻转信息等。如果想看实际效果,把命令里的-d改成-f强制执行。运行-f命令后,应用对应的immediate.log目录下会生成一个以日期结尾的压缩文件,原来的日志文件会被清空。logrotate配置完成。

2.logrotate执行时间

Logrotate由cron计划任务执行。您可以通过查看cron配置文件来查看计划任务的执行时间。CentOS用的是anacron,配置文件在/etc/anacrontab。

#/etc/anacrontab:anacron的配置文件#有关详细信息,请参见anacron(8)和anacrontab(5)。SHELL =/bin/shPATH =/sbin:/bin:/usr/sbin:/usr/bin mailto = root #添加到作业基本延迟中的最大随机延迟RANDOM_DELAY=45#作业将仅在以下时间内启动START_HOURS_RANGE=3-22#天数延迟分钟数job -标识符命令1 5 cron . daily nice run -parts/etc/cron . daily 7 25 cron . weekly nice run -parts/etc/cron . weekly @ weeklyRANDOM_DELAY=45表示任务开始后的最大随机延迟时间,默认最大延迟为45分钟。最后三行用于不同的计划任务配置。cron.daily行中定义了每日调度任务执行模式,每天一次,强制延迟5分钟执行。因此,默认配置通常在凌晨3: 00后执行。

在这里,您可以修改START_HOURS_RANGE、RANDOM_DELAY和cron.daily的DELAY来定制每日调度任务的执行时间。

4.遇到的问题

说明配置好一切后,使用logrotate -d没有报错,手动执行logrotate -f可以生成转储文件,但是不能每天根据配置自动生成转储文件。

查看cron日志(cron日志地址:/var/log/cron),发现每天都会执行调度的任务。

10月16日3:00:47 localhost anacron[24471]:作业" cron.daily "开始16日3:00:47 localhost run -parts(/etc/cron . daily)[24475]:正在开始logrotateOct 16日3:00:50 localhost run -parts(/etc/cron . daily)[24484]:已完成logrotateOct 16日3:00:50 localhost run -parts(//cron . daily)[24484]

这个问题的解决是selinux的安全策略造成的。只需要将安全上下文var_log_t添加到转储日志所在的目录中。

CH-RV--type = var _ log _ t/data/log执行上面的命令会将安全上下文添加到/data/log目录中的所有文件。之后,通过观察可以成功生成转储文件。

这是Fluent的日志收集服务的详细信息。更多关于Fluent的日志收集,请关注主机频道zhujipindao中的其他相关文章。com!

未经允许不得转载:主机频道 » Fluent构建日志收集服务(Fluent日志文件)

评论 抢沙发

评论前必须登录!