fluentd,elasticsearch,kibana,kafaka日志收集

概述

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

fluentd->kafka->jstorm->redis

顺便说下,现在logstash,elasticsearch,kibana都归属于elasticsearch
关于jstorm的相关说明可以参考另一篇文章: 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

访问http://172.16.154.235:9292 即可,用户名为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,修改为下面的配置

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  prefix="access_" suffix=".log" pattern="combined" fileDateFormat="yyyy-MM-dd.HH"  resolveHosts="true"/>

combined表示打印出来的是apache格式的日志,会附带Referer和User-Agent的信息
fileDateFormat设置的表示每个小时产生新的日志文件,不写此项表示每天轮巡
修改完重启tomcat即可,试着访问tomcat的应用,会在logs下看到相应的日志

修改td-agent配置

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

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

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

format /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$/

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

format /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+) ((?<path>[^ ]*) +(?<http>[^ ]*))?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$/

改完重启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

完了直接访问http://172.16.154.235:9200

kibana

最前面说了,elasticsearch和kibana属于同一组织的,所以解压后的包结构非常相似,配置文件在config下,运行命令在bin下
需要改的是从哪台机器的elasticsearch获取数据elasticsearch_url
完了,启动

./bin/kibana

访问kibana地址:http://172.16.154.241:5601

错误排除

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

彩蛋

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

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

或者直接把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
<source>
  @type forward
  port 24224
</source>

# HTTP input
<source>
  @type http
  port 8888
</source>

# Log Forwarding
<match mytag.**>
  @type forward

  # primary host
  <server>
    host 192.168.0.1
    port 24224
  </server>
  # use secondary host
  <server>
    host 192.168.0.2
    port 24224
    standby
  </server>

  # use longer flush_interval to reduce CPU usage.
  # note that this is a trade-off against latency.
  flush_interval 60s
</match>

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值