当前位置: 首页 > news >正文

filebeat,kafka,clickhouse,ClickVisual搭建轻量级日志平台

springboot集成链路追踪

  • springboot版本
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.3</version><relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>
  • 添加链路追踪sleuth依赖
    链路追踪有很多优秀的中间件,比如skywalking等,但是skywalking需要部署oap服务生成追踪id,为了减少架构复杂度,决定采用sleuth。
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId><version>3.1.1</version>
</dependency>

想进一步减少架构复杂度,也可以自定义生成traceId,可以参考之前的文章实现
https://blog.csdn.net/qq_41633199/article/details/127482748?spm=1001.2014.3001.5502

kafka2.7.1设置

  • windows下载kafka
    https://archive.apache.org/dist/kafka/2.7.1/kafka_2.13-2.7.1.tgz
  • zk设置
    • 修改数据存储路径
      在这里插入图片描述在这里插入图片描述
    • 启动zk
      kafka安装目录执行以下命令
bin\windows\zookeeper-server-start.bat config\zookeeper.properties
  • kafka设置
    • 配置数据存储
      在这里插入图片描述在这里插入图片描述
    • 配置zk连接
      在这里插入图片描述
    • 启动
## 启动kafka
bin\windows\kafka-server-start.bat config\server.properties
## 创建主题
bin\windows\kafka-topics.bat --zookeeper localhost:2181 --create --replication-factor 1 --partitions 1 --topic app_log
## 查看主题
bin\windows\kafka-topics.bat --list --zookeeper localhost:2181
# 生产消息
bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic app_log
# 消息消费
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic app_log --group app_log --from-beginning

应用日志logback配置

由于java异常日志输出堆栈的换行符会影响kafka engine日志解析(会当成多条日志分别解析导致报错),因此在FILE_FORMAT配置输出到日志文件的时候去除换行符。

<property name="CONSOLE_FORMAT" value="%highlight(%d{yyyy-MM-dd HH:mm:ss.SSS})|%highlight(%-5level{FATAL=Bright Red, ERROR=Bright Magenta, WARN=Bright Yellow, INFO=Bright Green, DEBUG=Bright Cyan, TRACE=Bright White})|%boldMagenta(%X{traceId})|%yellow(%thread)|%boldMagenta(%logger{36})|%green(%file#%method:%line)|%cyan(%msg%n)"/><property name="FILE_FORMAT" value="%d{yyyy-MM-dd HH:mm:ss.SSS}|%level|%X{traceId}|%thread|%logger{36}|%file#%method:%line|%msg %replace(%ex){'[\r\n]+', ''}%nopex%n"/><appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件输出的文件名 --><FileNamePattern>${LOG_HOME}/info/bill_log.%d{yyyy-MM-dd_HH}.log</FileNamePattern><!-- 日志文件保留个数 --><maxHistory>168</maxHistory><cleanHistoryOnStart>true</cleanHistoryOnStart></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>${FILE_FORMAT}</pattern></encoder></appender><!-- 开发环境 --><springProfile name="dev"><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${CONSOLE_FORMAT}</pattern></encoder></appender><root level="DEBUG"><appender-ref ref="CONSOLE"/><appender-ref ref="INFO_FILE"/></root></springProfile>

filebeat7.16.2收集应用日志推送kafka

  • 下载
https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.16.2-windows-x86_64.zip
  • 修改配置
    kafka配置官网参考地址
https://www.elastic.co/guide/en/beats/filebeat/7.16/kafka-output.html

在这里插入图片描述
在这里插入图片描述

设置传输kafka
在这里插入图片描述确保output只有一个

  • 启动filebeat
    在安装目录执行启动命令
filebeat -e -c filebeat.yml

访问应用查看kafka消费效果
在这里插入图片描述

在这里插入图片描述

clickhouse设置

  • 宿主机配置host
172.27.x.x host.docker.internal

由于clickhouse容器需访问本机kafka,需要解决通信问题

  • 启动
docker run -d --network=bridge -p 8123:8123 -p 9000:9000 -p 9009:9009 --name clickhouse-svr --add-host="host.docker.internal:172.27.xx.x" clickhouse/clickhouse-server:24.4.3.25
  • 进入容器,执行命令设置分隔符保存到users.xml配置文件,以便重启容器后也能生效
    这里的设置主要取决于日志格式,我的项目是|号作为字段分隔符
set format_csv_delimiter = '|';
  • 连接clickhouse,设置允许查询引擎表
clickhouse-client --stream_like_engine_allow_direct_select 1
  • 选择数据库
use log;
  • 创建kafka引擎表
CREATE TABLE LOG_KAFKA
(time DateTime64(3, 'Asia/Shanghai'),level String,trace_id String,thread String,logger String,method String,msg String
)
ENGINE = Kafka()
SETTINGS kafka_broker_list = 'host.docker.internal:9092',kafka_topic_list = 'app_log',kafka_group_name = 'app_log',kafka_num_consumers = 1,kafka_format = 'CSV',format_csv_delimiter  = '|';
  • 创建分区日志表,存储日志消息
create table APP_LOG(time DateTime64(3, 'Asia/Shanghai'),level String,trace_id String,thread String,logger String,method String,msg String
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(time)
ORDER BY time;
## 创建Metrialized View 抓取数据到日志表
CREATE MATERIALIZED VIEW vw_app_log TO APP_LOG AS
SELECT time,level,trace_id,thread,logger,method,msg FROM LOG_KAFKA;
  • 访问应用生产日志消息并查看clickhouse日志
    在这里插入图片描述

配置ClickVisual

  • windows docker安装
    官方文档地址
    https://clickvisual.net/zh/clickvisual/02install/docker-installation.html
    拉取镜像
    https://hub.docker.com/r/clickvisual/clickvisual/tags

  • 下载配置文件到本地
    https://github.com/clickvisual/clickvisual/tree/master/data/all-in-one/clickvisual/config

  • 配置mysq数据库连接
    在这里插入图片描述在这里插入图片描述*允许mysql用户通过ip连接
    在这里插入图片描述

  • 指定数据卷创建容器

docker run --name clickvisual -e EGO_CONFIG_PATH=/clickvisual/config/docker.toml -e EGO_LOG_WRITER=stderr -p 19001:19001 -v D:\download\clickvisual\config:/clickvisual/config -d clickvisual/clickvisual:latest
  • 配置数据连接
    用初始账号与密码clickvisual/clickvisual登录管理台http://localhost:19001
    点击初始化数据库后进入日志库配置页
    在这里插入图片描述clickhouse数据源连接格式clickhouse://username:password@host1:9000,host2:9000/database?dial_timeout=200ms&max_execution_time=60,因为我未给clickhouse设置权限认证,因此username:password@可以省略
    在这里插入图片描述创建好实例后回到日志页面,选择刚创建的实例右键接入已有日志库,配置日志数据表
    在这里插入图片描述

查看效果

访问前面写的空指针异常接口,再刷新ClickVisual页面
在这里插入图片描述
通过链路id查询效果
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Spring Security】初识Spring Security
  • Web 3.0革新:社交金融与边玩边赚开启用户数据主权时代
  • Spring Data Jpa 原生SQL联表查询返回自定义DTO
  • 低空经济未来出行,evtol飞行器技术前景分析
  • 三字棋游戏(C语言详细解释)
  • layui 监听弹窗关闭并刷新父级table
  • 应用层——HTTP
  • 42、PHP 实现把二叉树打印成多行
  • 【补】【康复学习--LeetCode每日一题】1186. 删除一次得到子数组最大和
  • 企业级-PDF图片水印
  • 【React】事件绑定、React组件、useState、基础样式
  • 如何理解ref toRef和toRefs
  • 问题记录-Spring Security- bean httpSecurity not found
  • HarmonyOS Web组件(二)
  • 低代码与传统编程:快速高质量构建系统的比较与方法
  • 深入了解以太坊
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 「译」Node.js Streams 基础
  • Druid 在有赞的实践
  • exif信息对照
  • If…else
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JS题目及答案整理
  • QQ浏览器x5内核的兼容性问题
  • Spring框架之我见(三)——IOC、AOP
  • 第2章 网络文档
  • 和 || 运算
  • 聊聊flink的TableFactory
  • 前端工程化(Gulp、Webpack)-webpack
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • elasticsearch-head插件安装
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #{} 和 ${}区别
  • #DBA杂记1
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (6)添加vue-cookie
  • (7)STL算法之交换赋值
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • .NET BackgroundWorker
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core WebAPI中封装Swagger配置
  • .NET Core引入性能分析引导优化
  • .net FrameWork简介,数组,枚举
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .net 使用ajax控件后如何调用前端脚本
  • .net 怎么循环得到数组里的值_关于js数组
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET成年了,然后呢?
  • .NET中GET与SET的用法
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @Resource和@Autowired的区别