废话不多说,直接上干货,首先看下整体应用的大致结构。(整个过程我用到了两台虚拟机  应用和Shipper 部署在192.168.25.128 上 Redis和ELK 部署在192.168.25.129上)

Controller:

@RestController
@RequestMapping("/user")
public class UserController { private Logger logger = LoggerFactory.getLogger(UserController.class); @RequestMapping(value = "/addUser", method = RequestMethod.GET)
public Object addUser() {
String[] names = {"Jack", "Tom", "John", "Arnold", "Jim", "James", "Rock"};
String[] introduce = {"I like to collect rock albums", "I like to build cabinets",
"I like playing computer games", "I like climbing mountains", "I love running",
"I love eating", "I love drinking"};
for (int i = 0; i < 1000; i++) {
Random random = new Random();
int tempNum = random.nextInt(7);
User user = new User();
user.setId(i);
user.setAge(random.nextInt(20) + 20);
user.setIntroduce(introduce[tempNum]);
user.setName(names[tempNum] + i);
logger.info(JSON.toJSONString(user));
}
return new ResponseData(200, "Success");
} }

通过nohup方式启动我们的SpringBoot应用

nohup java -jar -Dserver.port= -Dlog.root=/var/log/springboot-elk/  /opt/springboot-elk/springboot-elk.jar >/dev/null >& &

LogStash shipper配置:

input {
file {
path => "/var/log/springboot-elk/*"
type => "springboot-elk"
}
} output { redis {
data_type => "list"
key => "springboot-elk-list"
host => "192.168.25.129"
port => 6379
}
}

保证指定的Redis实例开启后,运行LogStash:

bin/logstash -f config/logback-logstash-redis.conf

接下来我们访问应用来生成日志。

生成成功,观察我们的Redis,数据已经全部进入了队列中。

接下来我们配置LogStash 读取Redis数据放入ES中:

input {
redis {
data_type => "list"
key => "springboot-elk-list"
host => "192.168.25.129"
port => 6379
}
} output {
elasticsearch {
hosts => ["192.168.25.129:9200","192.168.25.129:9201"] #从 1.5.0开始,host 可以设置数组,它会从节点列表中选取不同的节点发送数据,达到 Round-Robin负载均衡的效果。单节点也可以写成数组形式。
index => "springboot-elk"
user => elastic #没装x-pack这边就不需要user和password了
password => changeme
}
}

运行LogStash后,它会自动从Redis指定的队列中读取数据放入ES。

bin/logstash -f config/redis-logstash-es.conf

启动Kibana,建立索引,观察数据是否进入了ES:

可以看到1000条数据已经进入了ES  \(^o^)/~ 。

最新文章

  1. WEB架构师成长系列索引
  2. ViewHolder的改进写法
  3. javascript 字符串总结
  4. 参加:白帽子活动-赠三星(SAMSUNG) PRO....
  5. Navicat for Mysql远程连接数据时报(1045错误)Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password yes);
  6. C++文件读写详解(ofstream,ifstream,fstream)
  7. 《MORE EFFECTIVE C++》条款20 条款21
  8. 分页写入文件,第二次分页前一定要关闭IO流啊。。否则文件写不全。。- -粗心
  9. xslt语法之---If Else
  10. 在同个工程中使用 Swift 和 Objective-C(Swift 2.0更新)-b
  11. POJ1850 组合数学
  12. 2015.4.8-C#入门基础(二)
  13. CVSS3.0打分学习
  14. uGUI使用代码动态添加Button.OnClick()事件(Unity3D开发之十二)
  15. JAVA 得到数组的长度
  16. HDU - 2043密码 水题
  17. 【转】Qt鼠标键盘事件
  18. PAT 乙级 1014 福尔摩斯的约会 (20) C++版
  19. 多线程学习笔记二之JUC组件
  20. Jenkins部署在Tomcat容器提示:反向代理设置有误

热门文章

  1. R︱mlr包帮你挑选最适合数据的机器学习模型(分类、回归)+机器学习python和R互查手册
  2. 5.4 TLP中与数据负载相关的参数
  3. Android JNI的Android.mk文件语法详解
  4. Linux下搭建SVN服务器遇到的问题及解决方法,
  5. Flex读取txt文件中的内容报错
  6. MyEclipse无法部署项目
  7. 关于TS流的解析
  8. mybatis快速入门(八)-spring-mybatis动态代理整合
  9. Emacs考场配置
  10. 【BZOJ3172】单词(AC自动机)