日志流式转换为关系型数据库表

本文借助Filebeat、Kafka、CLickHouse将日志流式转换为关系型数据库表。
环境:Ubuntu 18.04 (WSL)

1. 安装kafka-2.8.0单机版

1.1 环境搭建

版本要求:jdk至少在1.8.0以上。本机安装版本为jdk-11。
下载方式:压缩包及解压缩,本机安装在/usr/local目录下
国内镜像:https://mirrors.huaweicloud.com/java/jdk/
配置文件:

  1. sudo vim /etc/profile 或者在root权限下 vim /etc/profile
  2. 配置profile
export JAVA_HOME=/usr/local/jdk-11
export PATH=$PATH:$JAVA_HOME/bin
  1. jdk-11没有jre包,无需额外配置
  2. source /etc/profile 配置完成后刷新,每次切换用户都需刷新
  3. java – version检查安装是否成功

1.2 安装kafka

下载方式:压缩包及解压缩。本机安装在/app目录下。

tar zxvf kafka_2.13-2.8.0.tgz #解压
mv kafka_2.13-2.8.0 kafka_2.8.0 #改名
pwd #检查路径

1.3 启动kafka

无需启动zookeeper直接运行kafka

  1. 随机生成id
 cd /app/kafka_2.8.0  #进入解压后的kafka所在目录
./bin/kafka-storage.sh random-uuid

返回 xtzWWN4bTjitpL3kfd9s5g
2. 用返回的字符串替换uuid

./bin/kafka-storage.sh format -t <uuid> -c ./config/kraft/server.properties

返回 Formatting /tmp/kraft-combined-logs
3. 启动kafka

./bin/kafka-server-start.sh ./config/kraft/server.properties

没有报错则启动成功
4. 关闭kafka
jps查看kafka的进程号,kill -9 <kafka 进程号>

1.4 创建topic

  1. 创建topic
./bin/kafka-topics.sh --create --topic foo --bootstrap-server localhost:9092

返回 created topic foo. 则说明创建成功。
2. 生产者产生消息

./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic foo

可以在>后输入需要的消息,如下
在这里插入图片描述
在这里插入图片描述
3. 消费者消费消息

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic foo --from-beginning

返回消息如下
在这里插入图片描述

2. Filebeat安装

下载方式:压缩包及解压缩。本机安装在/app目录下。

2.1 修改filebeat.yml文件配置

进入filebeat目录下

  1. input配置调整 vim filebeat.yml
    在这里插入图片描述
    修改input的输入路径,其中
enabled: true
paths: 
  /app/logs/test.log
#在app目录下创建文件夹logs,并生成test.log测试

2.output配置
在这里插入图片描述
同时注释其他几种输出形式,如elasticsearch。

output.kafka:
  enable: true
  hosts: ["localhost:9092"]
  topic: foo

其中topic:需要和kafka中建立的topic保持一致。

2.2 启动filebeat

./filebeat -e -c filebeat.yml

没有报错即启动成功,filebeat实时滚动。

3 安装clickhouse

本机已下载clickhouse软件。可参考
https://clickhouse.tech/docs/zh/getting-started/install/

2.1 启动clickhouse

切换成sudo su用户或者

sudo service clickhouse-server start
clickhouse-client

2.2 创建消费表

CREATE TABLE datarest_kafka (
CONTENT String
) ENGINE = Kafka SETTINGS kafka_broker_list = 'localhost:9092',
kafka_topic_list = 'foo',
kafka_group_name = 'test-consumer-group',
kafka_format = 'TabSeparated',
kafka_num_consumers = 1;

注:表引擎采用kafka
kafka_broker_list:kafka 的连接地址和端口。
kafka_topic_list:kafka 的 topic 名。
kafka_group_name:kafka 的组名。
kafka_format:表示用于解析消息的数据格式,消息发送端必须按此格式发送消息。
kafka_num_consumers = 1; 消费者数量
结果:查一次消费表,则消费一次内容,消费表中的内容消失。数据被存储到存储表中。

2.3 创建存储表

CREATE TABLE datarest (
timestamp String,
message String,
id String
) ENGINE = MergeTree ORDER BY xxHash64(id) SAMPLE BY xxHash64(id);

具体的sql查询语句根据读取的日志内容修改。

2.4 创建视图

CREATE MATERIALIZED VIEW datarest_view TO datarest
AS SELECT JSONExtractString(CONTENT,'@timestamp') as timestamp,JSONExtractString(CONTENT,'message') as message, JSONExtractString(JSONExtractRaw(CONTENT,'host'),'id') as id
FROM datarest_kafka;

具体的sql查询语句根据读取的日志内容修改。
结果:在test.log输入内容,最后可以在clickhouse中查询到格式化的json形式。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值