博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
fluentd,elasticsearch,kibana,kafaka日志收集
阅读量:7113 次
发布时间:2019-06-28

本文共 4762 字,大约阅读时间需要 15 分钟。

  hot3.png

概述

日志收集框架有很多,logstash,flume,fluentd等等,这里我们使用fluentd

我们这里会尝试使用fluentd->elasticsearch->kibana搭建一个日志采集和展示平台
也可以使用fluent-plugin-kafka来把把采集的日志发送到kafka,然后在jstorm里对收集到的数据进一步加工处理,最后存入redis,流程为:

fluentd->kafka->jstorm->redis

顺便说下,现在logstash,elasticsearch,kibana都归属于elasticsearch

关于jstorm的相关说明可以参考另一篇文章:

环境

CentOS release 6.7 (Final)

软件

  • td-agent-2.3.0(fluentd),为最新版本,这里为什么是td-agent了,因为td-agent是fluentd的稳定版本,推荐使用
  • elasticsearch-2.4.4,不为最新版本,支持JDK7,最新版本为elasticsearch-5.3.0,需要JDK8的支持,而笔者的环境为JDK7,故使用elasticsearch-2.4.4
  • kibana-4.6.4-linux-x86_64,不为最新版本,最新版本为kibana-5.3.0-linux-x86_64,需要Elasticsearch v5.3.0的支持

机器

172.16.154.235:td-agent,elasticsearch

172.16.154.241:kibana

安装td-agent

准备工作

执行ulimit -n,如果显示1024,则需要调整vi /etc/security/limits.conf,在末尾添加如下内容:

root soft nofile 65536
root hard nofile 65536
* soft nofile 65536
* hard nofile 65536
需要退出当前用户重新登录
fluentd是用ruby和C开发的,我们需要安装ruby相关的环境以便方便的操作:

yum install ruby rubygems  -y

安装

curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

来安装td-agent,该命令实际是下载了一个新的yum源,然后通过yum install的方式来安装,但是可能会执行失败,如果出现什么认证啊权限啊什么的问题,直接执行下面的命令来安装即可:

yum install --nogpgcheck td-agent -y

安装好后,就可以执行以下命令了

/etc/init.d/td-agent start /etc/init.d/td-agent status

同时也支持service的执行方式如下:

service td-agent status

配置文件在/etc/td-agent/td-agent.conf

测试

现在就可以测试了,默认监听8888端口,监听来自HTTP的请求,并且会输出到/var/log/td-agent/td-agent.log 可以执行以下命令来测试:

curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test

UI

fluentd提供了一个UI,可以很方便进行管理

如果你通过上述方式安装的,那默认就已经安装了td-agent-ui,直接执行td-agent-ui start即可
如果没有安装,则通过如下命令进行安装:

gem install -V fluentd-ui

访问 即可,用户名为admin,密码为changeme

配置

input

fluentd支持多种input,一般常用的为tail,即为读取日志文件追加的内容,已经存在的内容则不会读取

output

output常见的有mongodb,elasticsearch,kafka等,只需安装相关的插件即可,以elasticsearch为例,执行:

td-agent-gem install fluent-plugin-elasticsearch

下面的例子就会用到该插件

在td-agent-ui中也可以管理插件哦

收集tomcat日志

下面以收集tomcat日志为例,讲具体的配置

修改tomcat配置

修改conf/server.xml,修改为下面的配置

combined表示打印出来的是apache格式的日志,会附带Referer和User-Agent的信息

fileDateFormat设置的表示每个小时产生新的日志文件,不写此项表示每天轮巡
修改完重启tomcat即可,试着访问tomcat的应用,会在logs下看到相应的日志

修改td-agent配置

vi /etc/td-agent/td-agent.conf 修改内容如下:

    type tail    path /usr/local/tomcat7/logs/access_*.log    pos_file /var/log/td-agent/waf.log.pos    tag test.waf    format apache
host 172.16.154.235 type elasticsearch logstash_format true flush_interval 5s include_tag_key true tag_key mapred

注意source节点里面的format,这里为apache,说明解析的标准的apache日志,使用apache2也可以,实际使用的正则pattern为:

format /^(?
[^ ]*) [^ ]* (?
[^ ]*) \[(?

仔细对比输出的日志,会发现该pattern并没有提取出http版本的信息,我们可以稍微改下如下

format /^(?
[^ ]*) [^ ]* (?
[^ ]*) \[(?

改完重启td-agent即可

service td-agent restart

elasticsearch

下面在241上安装elasticsearch,极其简单,下载压缩包解压即可,vi bin/elasticsearch, 添加

ES_JAVA_OPTS="-Des.insecure.allow.root=true"

否则启动会有问题

vi config/elasticsearch.yml

修改network.host为本地IP,端口用默认9200即可

执行./bin/elasticsearch启动即可,如果想要后台执行:

/bin/elasticsearch -d

完了直接访问

kibana

最前面说了,elasticsearch和kibana属于同一组织的,所以解压后的包结构非常相似,配置文件在config下,运行命令在bin下

需要改的是从哪台机器的elasticsearch获取数据elasticsearch_url
完了,启动

./bin/kibana

访问kibana地址:

错误排除

如果日志收集不成功,可以通过查看日志来排查问题

我这边出现的问题是td-agetn没有权限读取tomcat的logs目录里的内容,因为我的tomcat启动时是由一个名称为tomcat的用户来启动的,而fluentd也会自己创建一个名称为td-agent的用户来启动td-agent,所以就木有权限了,最简单的我们可以把td-agent用户加到root用户组即可

彩蛋

如果一开始不想为td-agent的正则匹配所纠结,或者日志不方便直接用td-agent进行解析,则可以使用如下的配置,把整个日志都收集起来,然后交给storm等进行具体的处理即可,配置如下

  @type    tail   format   /^(?
.*)$/ path /usr/local/tomcat7/logs/access_*.log pos_file /var/log/td-agent/waf.log.pos tag test.waf

或者直接把format设为none,这样output会为json,key为message,value则为一整行的内容,当然key也是可以自定义的,添加下message_key my_message即可

---------------------------------------2017年4月21日17:45:29 加---------------------------------------

HA

我们之前的做法是,在生成日志的那台机器上采集,然后发送到elasticsearch,这2个操作都在一台机器上,对机器的消耗较大,也比较容易发生故障。现在我们可以把上述的步骤拆成2步来做,如下图所示: fluentd

在日志生成的那台机器log forwarders上只做收集,然后立即转发给其他log aggregators机器,所有的过滤以及进一步的操作比如发送给elasticsearch全部交给他,并且log aggregators本身也支持主备,即主挂了后,log forwarders会自动把日志发送给备。 这样大大降低了故障发生的概率
log forwarders的配置样例如下:

# TCP input  @type forward  port 24224# HTTP input  @type http  port 8888# Log Forwarding
@type forward # primary host
host 192.168.0.1 port 24224
# use secondary host
host 192.168.0.2 port 24224 standby
# use longer flush_interval to reduce CPU usage. # note that this is a trade-off against latency. flush_interval 60s

转载于:https://my.oschina.net/dxqr/blog/880250

你可能感兴趣的文章
使用NPOI读取Excel出错
查看>>
Reverse Nodes in k-Group
查看>>
libevent(一)定时器Demo
查看>>
(4)Django框架学习-Model篇
查看>>
Python 中文编码
查看>>
BigDecimal舍入模式使用及建议
查看>>
Tornado初探
查看>>
HDU5690: All X(大数取模,同余)
查看>>
HDU2544:最短路(最短路)
查看>>
js ==与===区别(两个等号与三个等号)
查看>>
小程序:最难点For的wx:key
查看>>
struts2 标签的使用之一 s:if
查看>>
Light Switching(SPOJ LITE)—— 线段树成段更新异或值
查看>>
2015 Multi-University Training Contest 2 1002 Buildings
查看>>
滑动平均线的notebook画法
查看>>
Spring_IOC
查看>>
CodeForces - 633 H Fibonacci-ish II(莫队+线段树)
查看>>
1012. 数字分类 (20)
查看>>
个人最终总结
查看>>
Array inversion case
查看>>