preface

logstash--> redis --> logstash --> es这套架构在讲究松耦合关系里面是最简单的,
架构图如下:

解释下这个架构图的流程

  1. 首先前端logstash读取apache的日志(input读取)。然后放到redis的db里面(output存入)。存储形式为列表形式存放
  2. 后端logstash从redis读取日志内容(input读取),从前端logstash指定的库里面读取指定的key。读取之后filter(filter-grok)过滤。然后传送到es上(output推送)。
  3. es接受日志,处理。

我们可以参考官网的建议:https://www.elastic.co/guide/en/logstash/2.3/deploying-and-scaling.html#deploying-message-queueing

废话不多说,我们开始着手配置吧,。

安装redis

在linux-node2节点上操作
安装redis,并且启动,

  1. [root@linux-node2 conf.d]# yum -y install redis # 确保一定是2.4版本以上的,不然logstash input的时候会报错的
  2. [root@linux-node2 conf.d]# grep bind /etc/redis.conf
  3. bind 0.0.0.0 # 这里记得修改监听地址

确认无误后启动redis

  1. [root@linux-node2 conf.d]# /etc/init.d/redis start

配置logstash

linux-node1操作
logstash对应的模块是output里面的redis模块,当然,也可以支持rabbitMQ,选择redis是因为redis性能强,而且配置简单。那么为啥要在output上做呢,是因为output是logstash的输出,直接对接在redis上,所以是ouput。
下面就看看官网对redis模块的讲解:https://www.elastic.co/guide/en/logstash/2.3/plugins-outputs-redis.html

下面贴下logstash配置,这里把屏幕输入传送到redis上

  1. [root@linux-node1 conf.d]# cat redis.conf
  2. input {
  3. stdin {
  4. }
  5. }
  6. output {
  7. redis {
  8. host => "192.168.141.4"
  9. port => "6379"
  10. db => "6" # 选择那个库
  11. data_type => "list" # 存入数据的类型
  12. key => "demo" # 数据的键
  13. }
  14. }

随便回车敲入一些内容,使其redis库里面有东西

查看redis结果

我们到登陆redis后查看内容:

  1. redis 127.0.0.1:6379> select 6 # 切换到数据库6下面
  2. OK
  3. redis 127.0.0.1:6379[6]> keys *
  4. 1) "demo"
  5. redis 127.0.0.1:6379[6]> type demo
  6. list
  7. redis 127.0.0.1:6379[6]> llen demo # 查看列表长度
  8. (integer) 3
  9. redis 127.0.0.1:6379[6]> lindex demo -1 # 从redis的左边取第一位
  10. "{\"message\":\"man\",\"@version\":\"1\",\"@timestamp\":\"2016-12-11T07:18:44.751Z\",\"host\":\"linux-node1\"}"

到此,可以说明logstash的output和redis已经能够正常的工作了

收集apache的日志

linux-node1操作
我们此时更改下logstash的配置,配置如下:

  1. [root@linux-node1 conf.d]# cat /etc/logstash/conf.d/redis.conf
  2. input {
  3. file {
  4. path => "/var/log/httpd/access_log"
  5. start_position => "beginning"
  6. }
  7. }
  8. output {
  9. redis {
  10. host => "192.168.141.4"
  11. port => "6379"
  12. db => "6"
  13. data_type => "list"
  14. key => "apache"
  15. }
  16. }

配置确认无误后,启动logstash

  1. [root@linux-node1 conf.d]# /opt/logstash/bin/logstash -f redis.conf

此时切换到linux-node2的终端上查看

  1. redis 127.0.0.1:6379[6]> keys *
  2. 1) "demo"
  3. 2) "apache" # 出现这个key了
  4. redis 127.0.0.1:6379[6]> llen apache
  5. (integer) 2002
  6. redis 127.0.0.1:6379[6]> lindex apache 0
  7. "{\"message\":\"192.168.141.4 - - [11/Dec/2016:15:54:09 +0800] \\\"GET / HTTP/1.0\\\" 403 4961 \\\"-\\\" \\\"ApacheBench/2.3\\\"\",\"@version\":\"1\",\"@timestamp\":\"2016-12-11T07:54:09.745Z\",\"path\":\"/var/log/httpd/access_log\",\"host\":\"linux-node1\"}" # 有内容了

下面我们在linux-node2上配置logstash,来读取redis的内容

  1. [root@linux-node2 conf.d]# cat getredis.conf
  2. input {
  3. redis {
  4. host => "192.168.141.4"
  5. db => "6"
  6. data_type => "list"
  7. key => "apache"
  8. }
  9. }
  10. output {
  11. stdout{
  12. codec => rubydebug
  13. }
  14. }

确认没有问题,启动logstash

  1. [root@linux-node2 conf.d]# /opt/logstash/bin/logstash --verbose -f getredis.conf

我擦,报错了,报错内容如下,该报错内容一直刷屏:

  1. Redis connection problem {:exception=>#<Redis::CommandError: ERR unknown command 'script'>, :level=>:warn}

出现上面这个报错的问题是因为redis版本太低,yum安装的redis版本是2.4.10的,然后我自己源码包安装的是3.2.5,步骤如下:

  1. [root@linux-node2 tmp]# wget http://download.redis.io/releases/redis-3.2.5.tar.gz
  2. [root@linux-node2 tmp]# tar xzf redis-3.2.5.tar.gz
  3. [root@linux-node2 tmp]# cd redis-3.2.5
  4. [root@linux-node2 redis-3.2.5]# make
  5. [root@linux-node2 redis-3.2.5]# src/redis-server /etc/redis.conf #配置文件稍作更改即可,该监听地址

再次启动logstash,就可以了,完美启动

  1. [root@linux-node2 conf.d]# /opt/logstash/bin/logstash --verbose -f getredis.conf

此时我们可以停止刚才启动的logstash,重新配置一下。

使用grok模块处理apache日志

我们再次配置下linuix-node2节点上的logstash。先找到分析apache日志的模块,然后添加filter-grok。如下所示:

首先过滤出分析apache日志的模块,方便待会调用
  1. [root@linux-node2 conf.d]# grep APACHE /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns/grok-patterns --color # 首先过滤出分析apache日志的模块,方便待会调用
  2. COMMONAPACHELOG %{IPORHOST:clientip} %{HTTPDUSER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-)
  3. COMBINEDAPACHELOG %{COMMONAPACHELOG} %{QS:referrer} %{QS:agent}
配置logstash

添加filter-grok。

  1. [root@linux-node2 conf.d]# cat getredis.conf
  2. input {
  3. redis {
  4. host => "192.168.141.4"
  5. db => "6"
  6. data_type => "list"
  7. key => "apache"
  8. }
  9. }
  10. filter {
  11. grok {
  12. match => { "message" => "%{COMBINEDAPACHELOG}"}
  13. }
  14. }
  15. output {
  16. elasticsearch {
  17. hosts => ["192.168.141.3:9200"]
  18. index => "apache-log-%{+YYYY.MM}"
  19. }
  20. }

确认无误后,再次启动logstash

  1. [root@linux-node2 conf.d]# /opt/logstash/bin/logstash --verbose -f getredis.conf

访问下apache,然后我们在head上就可以看到apapche的日志。

转自

elk系列8之logstash+redis+es的架构来收集apache的日志 - 温柔易淡 - 博客园
http://www.cnblogs.com/liaojiafa/p/6160215.html

elk系列8之logstash+redis+es的架构来收集apache的日志【转】的更多相关文章

  1. elk系列8之logstash+redis+es的架构来收集apache的日志

    preface logstash--> redis --> logstash --> es这套架构在讲究松耦合关系里面是最简单的, 架构图如下: 解释下这个架构图的流程 首先前端lo ...

  2. ELK系列(1) - Elasticsearch + Logstash + Kibana + Log4j2快速入门与搭建用例

    前言 最近公司分了个ELK相关的任务给我,在一边学习一边工作之余,总结下这些天来的学习历程和踩坑记录. 首先介绍下使用ELK的项目背景:在项目的数据库里有个表用来存储消息队列的消费日志,这些日志用于开 ...

  3. ELK系列五:Logstash输出到Elasticsearch和redis

    1.Logstash与Redis的读写 1.1 Logstash 写入Redis 看完Logstash的输入,想必大家都清楚了Logstash的基本用法,那就是写配置文件. output{ { red ...

  4. ELK系列四:Logstash的在ELK架构中的使用和简单的输入

    1.ELK架构中Logstash的位置: 1.1.小规模集群部署(学习者适用的架构) 简单的只有Logstash.Elasticsearch.Kibana,由Logstash收集日志或者流量信息,过滤 ...

  5. ELK系列六:Logstash的Filter模块

    Date过滤 input { stdin{ codec => plain } } filter { date { match => ["message", " ...

  6. ELK:收集k8s容器日志最佳实践

    简介 关于日志收集这个主题,这已经是第三篇了,为什么一再研究这个课题,因为这个课题实在太重要,而当今优秀的开源解决方案还不是很明朗: 就docker微服务化而言,研发有需求标准输出,也有需求文件输出, ...

  7. ELK系列(5) - Logstash怎么分割字符串并添加新的字段到Elasticsearch

    问题 有时候我们想要在Logstash里对收集到的日志等信息进行分割,并且将分割后的字符作为新的字符来index到Elasticsearch里.假定需求如下: Logstash收集到的日志字段mess ...

  8. ELK系列(7) - 测试环境下Logstash异常退出:block in multi_receive_encoded

    问题与分析 在本地测试无误后将ELK部署到了测试环境,结果第二天发现Logstash挂掉了,一开始以为是自动部署之类导致的问题.之后几天时间里Logstash总是会down掉,查看了下日志文件,发现报 ...

  9. elk系列7之通过grok分析apache日志【转】

    preface 说道分析日志,我们知道的采集方式有2种: 通过grok在logstash的filter里面过滤匹配. logstash --> redis --> python(py脚本过 ...

随机推荐

  1. POJ3709_K-Anonymous Sequence

     题意很简单,给你若干个数字,你需要减去一些数字,使得在数列中的每个数字出现的次数不少于k次. 一开始我们都会想到是用DP,于是很快我们就可以得出状态为搞定前面i个数所需要花费的最小代价用f[i]表示 ...

  2. 【服务器_Tomcat】Tomcat的Server Options选项

    一.配置 默认前两个是没有勾选的,应该勾选上: 在Cotext节点中有一个reloadable='true'属性,将它改为false,可以在修改java文件后不用重启服务器即可生效,但是不包括新建ja ...

  3. svn和git的区别及适用场景

    svn和git的区别及适用场景 来源 https://blog.csdn.net/wz947324/article/details/80104621 svn的优势: 优异的跨平台支持,对windows ...

  4. Android ActionBar 使用详解

    ActionBar取代了以前的TitleBar,是一种更加灵活的人机交互方式:ActionBar并不是完全自立门户的一个新兴的东西,而是和3.0以下版本的menu进行了合并整合:so,添加action ...

  5. JDBC连接Oracle

    数据库的操作是当前系统开发必不可少的开发部分之一,尤其是在现在的大数据时代,数据库尤为重要.但是你真的懂得Java与数据库是怎么连接的么? 先给大家一个数据库连接的简单实例: package com. ...

  6. 【BZOJ2780】【SPOJ】Sevenk Love Oimaster(后缀自动机)

    [BZOJ2780][SPOJ]Sevenk Love Oimaster(后缀自动机) 题面 BZOJ 洛谷 题解 裸的广义后缀自动机??? 建立广义后缀自动机建立出来之后算一下每个节点被几个串给包括 ...

  7. 应用程序的日志通过rsyslog推送到syslog服务器

    centos5系列系统自带为syslog1.4.1 centos6系列自带rsyslog版本为5.8.10 centos7系列自带rsyslog版本为7.4.7 目前最新版rsyslog为8.27.0 ...

  8. 2656: [Zjoi2012]数列(sequence)(递归+高精度)

    好久没写题了T T NOIP 期中考双血崩 显然f(x)=f(x>>1)+f((x>>1)+1),考虑每次往x>>1递归,求出f(x),复杂度O(logN) 我们设 ...

  9. 服务器上 tomcat 配置了 tomcat-users 但是还是 403 的问题

    默认情况下,tomcat 限制了只能本机访问 如果我们想要修改这个设置: 编辑 webapps/manager/META-INF/context.xml <!--<Valve classN ...

  10. P4753 River Jumping

    P4753 River Jumping 题目描述 有一条宽度为 NN 的河上,小D位于坐标为 00 的河岸上,他想到达坐标为 NN 的河岸上后再回到坐标为 00 的位置.在到达坐标为 NN 的河岸之前 ...