热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

通过logstash收集日志(三)

一、logstash收集日志并写入redis用一台服务器按照部署redis服务,专门用于日志缓存使用,用于web服务器产生大量日志的场景,

一、logstash收集日志并写入redis

用一台服务器按照部署redis服务,专门用于日志缓存使用,用于web服务器产生大量日志的场景,例如下面的服务器内存即将被使用完毕,查看是因为redis服务保存了大量的数据没有被读取而占用了大量的内存空间。

整体架构:

1.部署redis

[root@linux-host2 ~]# cd /usr/local/src/
[root@linux-host2 src]#
[root@linux-host2 src]# tar xvf redis-3.2.8.tar.gz
[root@linux-host2 src]# ln -sv /usr/local/src/redis-3.2.8 /usr/local/redis
‘/usr/local/redis’ -> ‘/usr/local/src/redis-3.2.8’
[root@linux-host2 src]#cd /usr/local/redis/deps
[root@linux-host2 redis]# yum install gcc
[root@linux-host2 deps]# make geohash-int hiredis jemalloc linenoise lua
[root@linux-host2 deps]# cd ..
[root@linux-host2 redis]# make
[root@linux-host2 redis]# vim redis.conf
[root@linux-host2 redis]# grep "^[a-Z]" redis.conf #主要改动的地方
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
save ""
rdbcompression no #是否压缩
rdbchecksum no #是否校验
[root@linux-host2 redis]# ln -sv /usr/local/redis/src/redis-server /usr/bin/
‘/usr/bin/redis-server’ -> ‘/usr/local/redis/src/redis-server’
[root@linux-host2 redis]# ln -sv /usr/local/redis/src/redis-cli /usr/bin/
‘/usr/bin/redis-cli’ -> ‘/usr/local/redis/src/redis-cli’

2.设置redis访问密码

为安全考虑,生产环境必须设置reids连接密码:

[root@linux-host2 redis]# redis-cli
127.0.0.1:6379> config set requirepass 123456 #动态设置,重启后无效
OK
480 requirepass 123456 #redis.conf配置文件

3.启动并测试redis服务

[root@linux-host2 redis]# redis-server /usr/local/redis/redis.conf #启动服务
[root@linux-host2 redis]# redis-cli
127.0.0.1:6379> ping
PONG

4.配置logstash将日志写入至redis

将tomcat服务器的logstash收集之后的tomcat 访问日志写入到redis服务器,然后通过另外的logstash将redis服务器的数据取出在写入到elasticsearch服务器。

官方文档:https://www.elastic.co/guide/en/logstash/current/plugins-outputs-redis.html

[root@linux-host2 tomcat]# cat /etc/logstash/conf.d/tomcat_tcp.conf
input {file {path => "/usr/local/tomcat/logs/tomcat_access_log.*.log"type => "tomcat-accesslog-5612"start_position => "beginning"stat_interval => "2"}tcp {port => 7800mode => "server"type => "tcplog-5612"}
}output {if [type] == "tomcat-accesslog-5612" {redis {data_type => "list"key => "tomcat-accesslog-5612"host => "192.168.56.12"port => "6379"db => "0"password => "123456"}}if [type] == "tcplog-5612" {redis {data_type => "list"key => "tcplog-5612"host => "192.168.56.12"port => "6379"db => "1"password => "123456"
}}
}

5.测试logstash配置文件语法是否正确

[root@linux-host2 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/tomcat.conf

6.访问tomcat的web界面并生成系统日志

[root@linux-host1 ~]# echo "伪设备1" > /dev/tcp/192.168.56.12/7800

7.验证redis是否有数据

8.配置其他logstash服务器从redis读取数据

配置专门logstash服务器从redis读取指定的key的数据,并写入到elasticsearch。

[root@linux-host3 ~]# cat /etc/logstash/conf.d/redis-to-els.conf
[root@linux-host1 conf.d]# cat /etc/logstash/conf.d/redis-tomcat-es.conf
input {redis {data_type => "list"key => "tomcat-accesslog-5612"host => "192.168.56.12"port => "6379"db => "0"password => "123456"codec => "json"}redis {data_type => "list"key => "tcplog-5612"host => "192.168.56.12"port => "6379"db => "1"password => "123456"}
}output {if [type] == "tomcat-accesslog-5612" {elasticsearch {hosts => ["192.168.56.11:9200"]index => "logstash-tomcat5612-accesslog-%{+YYYY.MM.dd}"
}}if [type] == "tcplog-5612" {elasticsearch {hosts => ["192.168.56.11:9200"]index => "logstash-tcplog5612-%{+YYYY.MM.dd}"
}}
}

9.测试logstash

[root@linux-host1 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis-to-els.conf

10.验证redis的数据是否被取出

11.在head插件验证数据

12.kibana添加tomcat访问日志索引

14.kibana添加tcp日志索引

15.kibana验证tomcat访问日志

16.kibana验证tomcat访问日志

17.kibana 验证tcp日志

#注:测试没有问题之后,请将logstash使用服务的方式正常启动

二、使用filebeat替代logstash收集日志

Filebeat是轻量级单用途的日志收集工具,用于在没有安装java的服务器上专门收集日志,可以将日志转发到logstash、elasticsearch或redis等场景中进行下一步处理。

官网下载地址:https://www.elastic.co/downloads/beats/filebeat

官方文档:https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-configuration-details.html

1.确认日志格式为json格式

先访问web服务器,以产生一定的日志,然后确认是json格式,因为下面的课程中会使用到:

[root@linux-host2 ~]# ab -n100 -c100 http://192.168.56.16:8080/web

2.确认日志格式,后续会用日志做统计

[root@linux-host2 ~]# tail /usr/local/tomcat/logs/localhost_access_log.2017-04-28.txt
{"clientip":"192.168.56.15","ClientUser":"-","authenticated":"-","AccessTime":"[28/Apr/2017:21:16:46 +0800]","method":"GET /webdir/ HTTP/1.0","status":"200","SendBytes":"12","Query?string":"","partner":"-","AgentVersion":"ApacheBench/2.3"}
{"clientip":"192.168.56.15","ClientUser":"-","authenticated":"-","AccessTime":"[28/Apr/2017:21:16:46 +0800]","method":"GET /webdir/ HTTP/1.0","status":"200","SendBytes":"12","Query?string":"","partner":"-","AgentVersion":"ApacheBench/2.3"}

3.安装配置filebeat

[root@linux-host2 ~]# systemctl stop logstash #停止logstash服务(如果有安装)
[root@linux-host2 src]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.3.2-x86_64.rpm
[root@linux-host6 src]# yum install filebeat-5.3.2-x86_64.rpm -y

4.配置filebeat收集系统日志

[root@linux-host2 ~]# cd /etc/filebeat/
[root@linux-host2 filebeat]# cp filebeat.yml filebeat.yml.bak #备份源配置文件

4.1filebeat收集多个系统日志并输出到本地文件

[root@linux-host2 ~]# grep -v "#" /etc/filebeat/filebeat.yml | grep -v "^$"
grep -v "#" /etc/filebeat/filebeat.yml | grep -v "^$"
filebeat.prospectors:
- input_type: logpaths:- /var/log/messages- /var/log/*.logexclude_lines: ["^DBG","^$"] #不收取的#include_lines: ["^ERR", "^WARN"] #只收取的f #类型,会在每条日志中插入标记
output.file:path: "/tmp"filename: "filebeat.txt"

4.2启动filebeat服务并验证本地文件是否有数据

[root@linux-host2 filebeat]# systemctl  start filebeat

5.filebeat收集单个类型日志并写入redis

Filebeat支持将数据直接写入到redis服务器,本步骤为写入到redis当中的一个可以,另外filebeat还支持写入到elasticsearch、logstash等服务器。

5.1filebeat配置

[root@linux-host2 ~]# grep -v "#" /etc/filebeat/filebeat.yml | grep -v "^$"
filebeat.prospectors:
- input_type: logpaths:- /var/log/messages- /var/log/*.logexclude_lines: ["^DBG","^$"]document_type: system-log-5612output.redis:hosts: ["192.168.56.12:6379"]key: "system-log-5612" #为了后期日志处理,建议自定义key名称db: 1 #使用第几个库timeout: 5 #超时时间password: 123456 #redis密码

5.2验证redis是否有数据

5.3查看redis中的日志数据

注意选择的db是否和filebeat写入一致

 

5.4配置logstash从redis读取上面的日志

[root@linux-host1 ~]# cat /etc/logstash/conf.d/redis-systemlog-es.conf
input {redis {host => "192.168.56.12"port => "6379"db => "1"key => "system-log-5612"data_type => "list"}
}output {if [type] == "system-log-5612" {elasticsearch {hosts => ["192.168.56.11:9200"]index => "system-log-5612"
}}
}[root@linux-host1 ~]# systemctl restart logstash #重启logstash服务

5.5查看logstash服务日志

5.6查看redis中是否有数据

 

5.7在logstash的head插件验证索引是否创建

5.8kibana界面添加索引

5.9在kibana验证system日志

6.监控redis数据长度

实际环境当中,可能会出现reids当中堆积了大量的数据而logstash由于种种原因未能及时提取日志,此时会导致redis服务器的内存被大量使用,甚至出现如下内存即将被使用完毕的情景:

查看reids中的日志队列长度发现有大量的日志堆积在redis 当中:

6.1脚本内容

#!/usr/bin/env python
#coding:utf-8
#Author Zhang jie
import redis
def redis_conn():pool=redis.ConnectionPool(host="192.168.56.12",port=6379,db=0,password=123456)conn = redis.Redis(connection_pool=pool)data = conn.llen('tomcat-accesslog-5612')print(data)
redis_conn()

  

 

转:https://www.cnblogs.com/can-H/articles/7872052.html



推荐阅读
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 本文详细介绍了在Linux系统上编译安装MySQL 5.5源码的步骤。首先,通过Yum安装必要的依赖软件包,如GCC、GCC-C++等,确保编译环境的完备。接着,下载并解压MySQL 5.5的源码包,配置编译选项,进行编译和安装。最后,完成安装后,进行基本的配置和启动测试,确保MySQL服务正常运行。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 在JavaWeb项目架构中,NFS(网络文件系统)的实现与优化是关键环节。NFS允许不同主机系统通过局域网共享文件和目录,提高资源利用率和数据访问效率。本文详细探讨了NFS在JavaWeb项目中的应用,包括配置、性能优化及常见问题的解决方案,旨在为开发者提供实用的技术参考。 ... [详细]
  • 在CentOS上部署并使用FFmpeg多媒体处理工具
    最近在进行音频处理时需要用到FFmpeg,本文将详细介绍如何在CentOS系统上部署并使用这一强大的多媒体处理工具。首先,从官方网站下载FFmpeg的最新版本,然后通过Xftp工具将下载的压缩包(如ffmpeg-4.3.1.tar.xz)传输到服务器上。接下来,解压文件并按照官方文档进行编译安装。安装完成后,可以通过命令行工具验证FFmpeg是否成功安装,并开始进行多媒体文件的转换和处理。此外,文章还将介绍一些常用的FFmpeg命令和参数,帮助用户快速上手。 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
author-avatar
丫_龟shop
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有