配置logstash从redis读取filebeat收集的日志(上)

简介: logstash读取redis缓存日志1.logstash从redis读取收集日志原理常规的日志收集方式都是由filebeat收集完直接输出给es集群,如果当后端应用访问量大,产生的日志也特别巨大,这时再由filebeat收集日志直接传输给es,会给es带来特别大的压力,如果es这时挂掉,filebeat依然在收集日志,这时filebeat找不到es集群,则会把收集来的日志丢弃

logstash读取redis缓存日志

1.logstash从redis读取收集日志原理


常规的日志收集方式都是由filebeat收集完直接输出给es集群,如果当后端应用访问量大,产生的日志也特别巨大,这时再由filebeat收集日志直接传输给es,会给es带来特别大的压力,如果es这时挂掉,filebeat依然在收集日志,这时filebeat找不到es集群,则会把收集来的日志丢弃

针对日志量大的问题可以在es集群前面增加redis和logstash,filebeat收集完日志交给redis,由logstash从redis中读取收集来的日志数据传输给es集群,最终在kibana上进行展示

logstash只需要部署一台即可,只是用于将redis收集来的日志传输给es集群

由于redis属于缓存数据库,当logstash把数据从redis上取完后,会自动把key删掉

logstash并不是读完redis中所有的数据后直接传输给es,而是读完一条redis的数据后,就往es上存储一条,这样就不会减轻es集群的压力

环境准备image.png

2.配置filebeat收集日志存储到redis

2.1.部署redis

1.安装redis(epel源中有redis的rpm包)
[root@node-2 ~]# yum -y install redis
2.启动redis
[root@node-2 ~]# systemctl start redis
[root@node-2 ~]# systemctl enable redis
3.查看端口号
[root@node-2 ~]# netstat -lnpt | grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      94345/redis-server
4.登陆redis
[root@node-2 ~]# redis-cli
127.0.0.1:6379> 
5.配置redis允许任何主机访问
[root@node-2 /etc/filebeat]# vim /etc/redis.conf 
bind 0.0.0.0
[root@node-2 /etc/filebeat]# systemctl restart redis

2.2.redis基本操作

1.设置一个key
127.0.0.1:6379>set key 
OK
2.查看一个key
127.0.0.1:6379> keys *
1) "key"
3.查看key类型
127.0.0.1:6379> type test
none
4.查看数据
127.0.0.1:6379> LRANGE test 0 -1
(empty list or set)

2.3.配置filebeat将收集的日志存储到redis

inputs还是一致的,只是outpot换成了redis


配置语法:


output.redis:

hosts: [“192.168.81.220:6379”] #redis地址

key: “nginx-www” #存储的库名

db: 0

timeout: 5


收集前要确保nginx应用的日志输出为json格式,在使用ab命令生成日志

1.配置filebeat
[root@nginx ~]# !vim /etc/filebeat/filebeat.yml 
#定义收集什么日志
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/www_access.log
  json.keys_under_root: true
  json.overwrite_keys: true
#定义modules模块路径
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
#指定kibana地址
setup.kibana:
  host: "192.168.81.210:5601"
#定义redis集群地址以及定义索引名
output.redis:
  hosts: ["192.168.81.220:6379"]          #redis地址
  key: "nginx-www"                #存储的库名
  db: 0
  timeout: 5
setup.template.name: "nginx"
setup.template.pattern: "nginx-*"
setup.template.enabled: false
setup.template.overwrite: true
2.重启filebeat
[root@nginx ~]# systemctl restart filebeat

2.4.查看redis是否创建了nginx-www

由于我们nginx的日志是中文的,因此在使用redis-cli时要增加raw参数,否则看到的都是乱码

[root@node-2 ~]# redis-cli --raw
127.0.0.1:6379> KEYS *
1) "key"
2) "nginx-www"
127.0.0.1:6379> TYPE nginx-www
list
127.0.0.1:6379> LRANGE nginx-www 0 -1

已经有nginx-www key了,并且数据也都是刚刚filebeat传输过来的nginx 日志

解析正常

3.配置logstash读取redis日志并存储到es集群

3.1.安装logstash

1.下载logstash
https://repo.huaweicloud.com/logstash/6.6.0/logstash-6.6.0.rpm
2.安装logstash
[root@elasticsearch ~/soft]# rpm -ivh logstash-6.6.0.rpm 
警告:logstash-6.6.0.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:logstash-1:6.6.0-1               ################################# [100%]
Using provided startup.options file: /etc/logstash/startup.options
OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
Successfully created system startup script for Logstash

3.2.配置logstash读取redis缓存的日志

配置文件含义

input { //从哪里读取数据

redis { //数据源是从redis读取

host => “192.168.81.220” //redis地址

port => “6379” //redis端口

db => “0”

key => “nginx-www” //从哪个key读取数据

data_type => “list” //key的类型

}

}

output { //存储到哪

stdout{}

elasticsearch { //存储到es

hosts => “http://192.168.81.210:9200” //es地址

manage_template => false

index => “nginx-www-access-%{+yyyy.MM.dd}” //索引名

}

1.配置logstash
[root@elasticsearch ~]# vim /etc/logstash/conf.d/redis.conf 
input {                 
  redis {
    host => "192.168.81.220"
    port => "6379"
    db => "0"
    key => "nginx-www"
    data_type => "list"
  }
}
output {
    stdout{}
    elasticsearch {
      hosts => "http://192.168.81.210:9200"
      manage_template => false
      index => "nginx-www-access-%{+yyyy.MM.dd}"
    }
}
2.启动logstash
[root@elasticsearch ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis.conf 

启动成功会输出很多读取来的日志内容,最好用nohup来启动,启动过程特别耗时间

nohup /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis.conf &

每次收集过来的日志都会输出在大屏上个,用了nohup后会输出到nohup.out文件,还是比较方便的

3.3.查看es索引库数据

收集过来23条

3.4.kibana关联es索引库并查看收集的日志

3.4.1.关联es索引库

3.4.2.查看收集来的日志数据

点击Discovery—选择索引

字段也都是可以过滤匹配的

4.filebeat收集多个日志存储到redis并自定义key

4之前都是一台机器上的所有日志都存储到redis的一个key中,显然有点不合理,因此需要针对每一个收集的日志文件让其存储到不同的key中。

配置和存储到es集群差不多,不同日志存储到redis不同key,其实思路和存储到es是一样的,做一个tag标签,当tag值为xxx就创建xxx的key

  keys:
    - key: "www"                  //当tags为www就创建www的key
      when.contains:
        tags: "www"
    - key: "bbs"
      when.contains:
        tags: "bbs"

4.1.配置filebeat收集日志并自定义redis key

[root@nginx ~]# vim /etc/filebeat/filebeat.yml 
#定义收集什么日志
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/www_access.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["nginx-www"]
- type: log
  enabled: true
  paths:
    - /var/log/nginx/bbs_access.log
  json.keys_under_root: true
  json.overwrite_keys: true
  tags: ["nginx-bbs"]
#定义modules模块路径
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
#指定kibana地址
setup.kibana:
  host: "192.168.81.210:5601"
#定义redis集群地址以及定义索引名
output.redis:
  hosts: ["192.168.81.220:6379"]
  #key: "nginx-www"
  keys:
    - key: "nginx-www"
      when.contains:
        tags: "nginx-www"
    - key: "nginx-bbs"
      when.contains:
        tags: "nginx-bbs"
  db: 0
  timeout: 5
setup.template.name: "nginx"
setup.template.pattern: "nginx-*"
setup.template.enabled: false
setup.template.overwrite: true
[root@nginx ~]# systemctl restart filebeat

4.2.产生日志并查看redis上的key

1.产生日志
[root@elasticsearch ~]# ab -c 100 -n 2000 http://www.jiangxl.com/
[root@elasticsearch ~]# ab -c 100 -n 2000 http://bbs.jiangxl.com/
2.查看redis上生成的key
127.0.0.1:6379> keys *
1) "nginx-bbs"
2) "filebeat"
3) "nginx-www"
127.0.0.1:6379> LLEN nginx-bbs            #查key里面有多少条数据
2000
127.0.0.1:6379> LLEN nginx-www
2000

5.配置logstash自定义es索引

5.1.配置logstash指定不同的索引存储库

语法格式:

if “nginx-www” in [tags] { //当标签为nginx-www时,就创建nginx-www-access索引库,如果要写多组自定义索引就填写几个if即可

stdout{}

elasticsearch {undefined

hosts => “http://192.168.81.210:9200

manage_template => false

index => “nginx-www-access-%{+yyyy.MM.dd}”

}

}

input {
  redis {
    host => "192.168.81.220"
    port => "6379"
    db => "0" 
    key => "nginx-www"
    data_type => "list"
  }
  redis {
    host => "192.168.81.220"
    port => "6379"
    db => "0" 
    key => "nginx-bbs"
    data_type => "list"
  }
}
output {
  if "nginx-www" in [tags] {
    stdout{}
    elasticsearch {
      hosts => "http://192.168.81.210:9200"
      manage_template => false
      index => "nginx-www-access-%{+yyyy.MM.dd}"
    }   
  }
  if "nginx-bbs" in [tags] {
    stdout{}
    elasticsearch {
      hosts => "http://192.168.81.210:9200"
      manage_template => false
      index => "nginx-bbs-access-%{+yyyy.MM.dd}"
    }   
  }
}

5.2.重载logstash并查看收集输出

[root@elasticsearch ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis.conf

logstash并不是全部收集完在传输给es集群,而是收集过来一条就传输给es一条,这样一样就减轻了es的压力

5.3.观察redis key变化

127.0.0.1:6379> LLEN nginx-www
0
127.0.0.1:6379> LLEN nginx-bbs
0

5.4.查看es上的是否创建索引

5.5.在kibana上关联es索引

nginx-www-access索引

nginx-bbs-access索引

5.5.查看日志数据

nginx-www-access索引

nginx-bbs-access索引

6.故障排查

6.1.logstash启动不成功

启动提示如下,一直不动

OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N

[root@elasticsearch ~]# vim /etc/logstash/jvm.options 
-Xms256m
-Xmx256m
-XX:-AssumeMP
配置完重启即可
相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
6月前
|
监控 安全 程序员
Python日志模块配置:从print到logging的优雅升级指南
从 `print` 到 `logging` 是 Python 开发的必经之路。`print` 调试简单却难维护,日志混乱、无法分级、缺乏上下文;而 `logging` 支持级别控制、多输出、结构化记录,助力项目可维护性升级。本文详解痛点、优势、迁移方案与最佳实践,助你构建专业日志系统,让程序“有记忆”。
508 0
|
6月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
660 25
|
7月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
1316 5
|
安全 BI 网络安全
EventLog Analyzer 如何满足等保合规要求?密码有效期、产品日志保留、配置备份三大核心问题全面解答
EventLog Analyzer(ELA)助力企业满足网络安全等级保护要求,支持配置自动/手动备份、日志180天留存及密码策略管理,提升合规性与安全运营效率。
242 0
|
9月前
|
NoSQL 安全 Linux
设置Redis在CentOS7上的自启动配置
这些步骤总结了在CentOS 7系统上设置Redis服务自启动的过程。这些命令提供了一个直接且明了的方式,确保Redis作为关键组件在系统启动时能自动运行,保障了依赖于Redis服务的应用的稳定性和可用性。
695 9
|
10月前
|
存储 NoSQL MongoDB
Docker中安装MongoDB并配置数据、日志、配置文件持久化。
现在,你有了一个运行在Docker中的MongoDB,它拥有自己的小空间,对高楼大厦的崩塌视而不见(会话丢失和数据不持久化的问题)。这个MongoDB的数据、日志、配置文件都会妥妥地保存在你为它精心准备的地方,天旋地转,它也不会失去一丁点儿宝贵的记忆(即使在容器重启后)。
1177 4
|
9月前
|
JSON 安全 Go
Go语言项目工程化 —— 日志、配置、错误处理规范
本章详解Go语言项目工程化核心规范,涵盖日志、配置与错误处理三大关键领域。在日志方面,强调其在问题排查、性能优化和安全审计中的作用,推荐使用高性能结构化日志库zap,并介绍日志级别与结构化输出的最佳实践。配置管理部分讨论了配置分离的必要性,对比多种配置格式如JSON、YAML及环境变量,并提供viper库实现多环境配置的示例。错误处理部分阐述Go语言显式返回error的设计哲学,讲解标准处理方式、自定义错误类型、错误封装与堆栈追踪技巧,并提出按调用层级进行错误处理的建议。最后,总结各模块的工程化最佳实践,助力构建可维护、可观测且健壮的Go应用。
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
存储 监控 API
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
327 22
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
下一篇
开通oss服务