ELK+Kafka+Beats实现海量日志收集平台(二)
目录
三、环境搭建
通过上一小节应用场景和实现原理的介绍,接下来实现所需环境搭建及说明架构图如下所示:
环境说明:
192.168.232.6 : 部署了demo项目(用于产生数据日志)
filebeat-6.6.0
192.168.232.3 : Kafka (单体)(Zookeeper:192.168.232.3~5)
192.168.232.4 : Kibana
192.168.232.7 : Logstash (单体)
ES集群:192.168.232.8~10
1、filebeat安装配置参考https://www.cnblogs.com/jhtian/p/13731230.html
2、Kafka安装配置参考https://www.cnblogs.com/jhtian/p/13708679.html
3、Logstash安装配置参考https://www.cnblogs.com/jhtian/p/13744753.html
4、ES集群搭建可参考https://www.cnblogs.com/jhtian/p/12703651.html
5、Kibana安装可参考https://www.cnblogs.com/jhtian/p/13785029.html
四、部署demo工程项目
项目结构图如下,分别调用项目的 /index、/error两个方法分别打印正常、错误日志(warn及以上级别日志)到logs文件夹中,作为filebeat读取数据的来源。
web访问类文件
indexAction.java
1 package com.tianjh.demo.web;
2
3 import com.tianjh.demo.util.SetMDC;
4 import lombok.extern.slf4j.Slf4j;
5 import org.springframework.web.bind.annotation.RequestMapping;
6 import org.springframework.web.bind.annotation.RestController;
7
8 @Slf4j
9 @RestController
10 public class indexAction {
11
12 @RequestMapping(value = "/index")
13 public String index() {
14 SetMDC.putMDC();
15 log.info("这是一条模拟error日志打印");
16 log.info("这是一条模拟warn日志打印");
17 log.info("这是一条模拟info日志打印");
18 return "hello word";
19 }
20
21 @RequestMapping(value = "/err")
22 public String error() {
23 SetMDC.putMDC();
24 try {
25 int a = 5/0;
26 } catch (Exception e) {
27 log.error("算术异常", e);
28 }
29 return "error";
30 }
31 }
工具类Utils
FastJsonConvertUtil.java
1 package com.tianjh.demo.util;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import com.alibaba.fastjson.JSON;
7 import com.alibaba.fastjson.JSONObject;
8 import com.alibaba.fastjson.serializer.SerializerFeature;
9
10 import lombok.extern.slf4j.Slf4j;
11
12 /**
13 * $FastJsonConvertUtil
14 * @author hezhuo.bai
15 * @since 2019年1月15日 下午4:53:28
16 */
17 @Slf4j
18 public class FastJsonConvertUtil {
19
20 private static final SerializerFeature[] featuresWithNullValue = { SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullBooleanAsFalse,
21 SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteNullStringAsEmpty };
22
23 /**
24 * <B>方法名称:</B>将JSON字符串转换为实体对象<BR>
25 * <B>概要说明:</B>将JSON字符串转换为实体对象<BR>
26 * @author hezhuo.bai
27 * @since 2019年1月15日 下午4:53:49
28 * @param data JSON字符串
29 * @param clzss 转换对象
30 * @return T
31 */
32 public static <T> T convertJSONToObject(String data, Class<T> clzss) {
33 try {
34 T t = JSON.parseObject(data, clzss);
35 return t;
36 } catch (Exception e) {
37 log.error("convertJSONToObject Exception", e);
38 return null;
39 }
40 }
41
42 /**
43 * <B>方法名称:</B>将JSONObject对象转换为实体对象<BR>
44 * <B>概要说明:</B>将JSONObject对象转换为实体对象<BR>
45 * @author hezhuo.bai
46 * @since 2019年1月15日 下午4:54:32
47 * @param data JSONObject对象
48 * @param clzss 转换对象
49 * @return T
50 */
51 public static <T> T convertJSONToObject(JSONObject data, Class<T> clzss) {
52 try {
53 T t = JSONObject.toJavaObject(data, clzss);
54 return t;
55 } catch (Exception e) {
56 log.error("convertJSONToObject Exception", e);
57 return null;
58 }
59 }
60
61 /**
62 * <B>方法名称:</B>将JSON字符串数组转为List集合对象<BR>
63 * <B>概要说明:</B>将JSON字符串数组转为List集合对象<BR>
64 * @author hezhuo.ba