logstash配合redis实例
来源:互联网 发布:单片机方案 编辑:程序博客网 时间:2024/05/16 18:55
解释术语:
- Shipper:日志收集者。负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来,输出到Redis暂存。
- Indexer:日志存储者。负责从Redis接收日志,写入到本地文件。
- Broker:日志Hub,用来连接多个Shipper和多个Indexer。
无论是Shipper还是Indexer,Logstash始终只做前面提到的3件事:
- Shipper从日志文件读取最新的行文本,经过处理(这里我们会改写部分元数据),输出到Redis,
- Indexer从Redis读取文本,经过处理(这里我们会format文本),输出到文件。
一个Logstash进程可以有多个输入源,所以一个Logstash进程可以同时读取一台服务器上的多个日志文件。Redis是Logstash官方推荐的Broker角色“人选”,支持订阅发布和队列两种数据传输模式,推荐使用。输入输出支持过滤,改写。Logstash支持多种输出源,可以配置多个输出实现数据的多份复制,也可以输出到Email,File,Tcp,或者作为其它程序的输入,又或者安装插件实现和其他系统的对接,比如搜索引擎Elasticsearch。
总结:Logstash概念简单,通过组合可以满足多种需求
1.官网https://www.elastic.co/products/logstash下载logstash包
一般也解压到
/usr/local/
下,形成/usr/local/logstash-2.4.0/bin
这种目录结构。2.在/usr/local/logstash-2.4.0/目录下创建conf文件夹作为配置文件的目录,在/conf目录下创建test.conf文件,配置文件的内容如下:
input {
file {
path => [
# 这里填写需要监控的文件
"/usr/local/logstash-2.4.0/data/test.log"
]
}
}
output {
# 输出到控制台
# stdout { }
# 输出到redis
redis {
host => localhost # redis主机地址
port => 6379 # redis端口号
#db => 8 # redis数据库编号
data_type => "channel" # 使用发布/订阅模式
key => "logstash_list_0" # 发布通道名称
}
}
3.运行logstash可以执行指定的配置文件./logstash -f ../conf/test.conf
4.启动redis ./redis-server& --protected-mode no(非保护模式,外网可以访问)
启动的三种方式详情请参照chrome浏览器标签redis
本实例采用第二种方式,通过指定配置文件启动
/opt/app/redis-3.2.0/redis.conf配置如下:
daemonize yes#是否在后台运行,是
port 6379#启动服务的端口号为6379
logfile "/var/log/sentinel_log.log"//日志存放的位置
protected-mode no//是否以保护模式(是否可以外网访问)启动
5.启动后,运行redis客户端,可以支持多个客户端,各客户端看到的日志信息都是一样的(因为使用了订阅模式channel)
./redis-cli
SUBSCRIBE logstash_list_0
就能实时读取日志信息
6.在java中实现:
Subscriber.java
package com.relax.www.cache.redis;
import com.alibaba.fastjson.JSON;
import com.hfjy.base.util.JSONUtil;
import redis.clients.jedis.JedisPubSub;
public class Subscriber extends JedisPubSub {
public Subscriber() {
}
public void onMessage(String channel, String message) {
System.out.println(String.format("receive redis published message, channel %s, message %s", channel, message));
System.out.println(JSON.toJSONString(JSONUtil.toJSONObject(message), true));
}
public void onSubscribe(String channel, int subscribedChannels) {
System.out.println(String.format("subscribe redis channel success, channel %s, subscribedChannels %d",
channel, subscribedChannels));
}
public void onUnsubscribe(String channel, int subscribedChannels) {
System.out.println(String.format("unsubscribe redis channel, channel %s, subscribedChannels %d",
channel, subscribedChannels));
}
}
public class RedisClient {
private static String IpAddress;
private static int IpPort;
private volatile static Jedis jedis;
private static final Logger logger = Logger.getLogger(RedisClient.class);
static {
IpAddress = "192.168.60.250";
IpPort = 6379;
jedis = RedisClient.getJedisInstance();
}
// 单例模式获取redis服务
public static Jedis getJedisInstance() {
if (jedis == null) {
synchronized (RedisClient.class) {
if (jedis == null) {
jedis = new Jedis(IpAddress, IpPort);
}
}
}
return jedis;
}
public static void main(String[] args) {
final Subscriber subscriber = new Subscriber();
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
jedis.subscribe(subscriber, "logstash_list_0");
}
}
}).start();
}
}
0 0
- logstash配合redis实例
- logstash 操作redis
- logstash 读取 Redis 数据
- elasticsearch配合logstash,在浏…
- Logstash 快速入门实例
- logstash grok 正则 实例
- logstash无法读取redis数据
- logstash+es+kibana+redis搭建
- logstash+es+kibana+redis搭建
- logstash读取redis中的数据
- Logstash配置总结和实例
- Redis与Spring配合使用
- 笔记: 试用Kibana+Logstash+Elasticsearch+Redis
- Logstash 实践之Redis日志解析
- logstash+es+kibana+redis搭建日志平台
- elasticsearch+logstash+redis+kibana+logback整合
- [logstash-input-redis]插件使用详解
- [logstash-input-redis]插件使用详解
- java.sql.SQLSyntaxErrorException: ORA-01722: invalid number
- OpenCV3.1-OpenCL的使用
- dispatch_soruce_t的简单使用事例
- CodeForces 732B Cormen — The Best Friend Of a Man(带着宠物轧马路)
- 探索 Android——Handler
- logstash配合redis实例
- FreeRTOS系列第13篇---FreeRTOS内核控制
- MoMoPlayer,纯java音乐播放器
- Lire使用实例:创建索引 搜索相似图片
- Gradle命令和配置
- Swift 代码添加约束
- Maximum SHMMAX values for Linux x86 and x86-64 (Doc ID 567506.1)
- 关于C#开发OCX组件的说明
- [深度学习论文笔记][Depth Estimation] Predicting Depth, Surface Normals and Semantic Labels with a Common M