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

打印 上一主题 下一主题

主题 854|帖子 854|积分 2562

springboot集成链路追踪



  • springboot版本
  1. <parent>
  2.         <groupId>org.springframework.boot</groupId>
  3.         <artifactId>spring-boot-starter-parent</artifactId>
  4.         <version>2.6.3</version>
  5.         <relativePath/> <!-- lookup parent from repository -->
  6. </parent>
  7. <dependencies>
  8.         <dependency>
  9.                 <groupId>org.springframework.boot</groupId>
  10.                 <artifactId>spring-boot-starter-web</artifactId>
  11.         </dependency>
  12. </dependencies>
复制代码


  • 添加链路追踪sleuth依赖
    链路追踪有很多精良的中间件,好比skywalking等,但是skywalking需要部署oap服务生成追踪id,为了淘汰架构复杂度,决定采用sleuth。
  1. <dependency>
  2.         <groupId>org.springframework.cloud</groupId>
  3.         <artifactId>spring-cloud-starter-sleuth</artifactId>
  4.         <version>3.1.1</version>
  5. </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安装目录实验以下命令

  1. bin\windows\zookeeper-server-start.bat config\zookeeper.properties
复制代码


  • kafka设置

    • 配置数据存储

    • 配置zk连接

    • 启动

  1. ## 启动kafka
  2. bin\windows\kafka-server-start.bat config\server.properties
  3. ## 创建主题
  4. bin\windows\kafka-topics.bat --zookeeper localhost:2181 --create --replication-factor 1 --partitions 1 --topic app_log
  5. ## 查看主题
  6. bin\windows\kafka-topics.bat --list --zookeeper localhost:2181
  7. # 生产消息
  8. bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic app_log
  9. # 消息消费
  10. bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic app_log --group app_log --from-beginning
复制代码
应用日志logback配置

由于java异常日志输出堆栈的换行符会影响kafka engine日志解析(会当成多条日志分别解析导致报错),因此在FILE_FORMAT配置输出到日志文件的时间去除换行符。
  1. <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)"/>
  2.     <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"/>
  3.     <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  4.         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  5.             <level>INFO</level>
  6.         </filter>
  7.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  8.             <!-- 日志文件输出的文件名 -->
  9.             <FileNamePattern>${LOG_HOME}/info/bill_log.%d{yyyy-MM-dd_HH}.log</FileNamePattern>
  10.             <!-- 日志文件保留个数 -->
  11.             <maxHistory>168</maxHistory>
  12.             <cleanHistoryOnStart>true</cleanHistoryOnStart>
  13.         </rollingPolicy>
  14.         <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  15.             <pattern>${FILE_FORMAT}</pattern>
  16.         </encoder>
  17.     </appender>
  18.     <!-- 开发环境 -->
  19.     <springProfile name="dev">
  20.         <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
  21.             <encoder>
  22.                 <pattern>${CONSOLE_FORMAT}</pattern>
  23.             </encoder>
  24.         </appender>
  25.         <root level="DEBUG">
  26.             <appender-ref ref="CONSOLE"/>
  27.             <appender-ref ref="INFO_FILE"/>
  28.         </root>
  29.     </springProfile>
复制代码
filebeat7.16.2网络应用日志推送kafka



  • 下载
  1. https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.16.2-windows-x86_64.zip
复制代码


  • 修改配置
    kafka配置官网参考地址
  1. https://www.elastic.co/guide/en/beats/filebeat/7.16/kafka-output.html
复制代码


设置传输kafka
确保output只有一个


  • 启动filebeat
    在安装目录实验启动命令
  1. filebeat -e -c filebeat.yml
复制代码
访问应用查看kafka消费效果


clickhouse设置



  • 宿主机配置host
  1. 172.27.x.x host.docker.internal
复制代码
由于clickhouse容器需访问本机kafka,需要解决通信题目


  • 启动
  1. 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配置文件,以便重启容器后也能见效
    这里的设置重要取决于日志格式,我的项目是|号作为字段分隔符
  1. set format_csv_delimiter = '|';
复制代码


  • 连接clickhouse,设置答应查询引擎表
  1. clickhouse-client --stream_like_engine_allow_direct_select 1
复制代码


  • 选择数据库
  1. use log;
复制代码


  • 创建kafka引擎表
  1. CREATE TABLE LOG_KAFKA
  2. (
  3.     time DateTime64(3, 'Asia/Shanghai'),
  4.         level String,
  5.         trace_id String,
  6.         thread String,
  7.         logger String,
  8.         method String,
  9.         msg String
  10. )
  11. ENGINE = Kafka()
  12. SETTINGS kafka_broker_list = 'host.docker.internal:9092',
  13.         kafka_topic_list = 'app_log',
  14.         kafka_group_name = 'app_log',
  15.         kafka_num_consumers = 1,
  16.         kafka_format = 'CSV',
  17.         format_csv_delimiter  = '|';
复制代码


  • 创建分区日志表,存储日志消息
  1. create table APP_LOG(
  2.         time DateTime64(3, 'Asia/Shanghai'),
  3.         level String,
  4.         trace_id String,
  5.         thread String,
  6.         logger String,
  7.         method String,
  8.         msg String
  9. )
  10. ENGINE = MergeTree()
  11. PARTITION BY toYYYYMM(time)
  12. ORDER BY time;
  13. ## 创建Metrialized View 抓取数据到日志表
  14. CREATE MATERIALIZED VIEW vw_app_log TO APP_LOG AS
  15. 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连接

  • 指定数据卷创建容器
  1. 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查询效果


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

魏晓东

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表