FlieBeat & Kafka & Clickhouse 替代ELK 系列一

替代ELK:ClickHouse+Kafka+FlieBeat,才是最佳选择? 整个部署的过程踩了不少坑,尤其是filebeat yml的参数设置。clickhouse 的配置说明我会再更新一篇跟大家同步一下过程中踩的坑。很久没有更新博客了,经常看到博客35岁以后怎么办的问题。说实话我自己也没想好以后怎么办,核心还是持续的学习&输出。不断的构建自己的护城河,不管是技术专家、业务专家、架构、管理等。个人建议如果能持续写代码就奋战在一线,管理彻底与公司绑定。除非你是有名的大厂,这另外看。如果所在的公司缺乏较大的行业影响力,个人感觉可以奋战在一线,未来选择新的工作。 阅读详情

背景

saas服务未来会面临数据安全、合规等问题。公司的业务需要沉淀一套私有化部署能力,帮助业务提升行业竞争力。为了完善平台系统能力、我们需要沉淀一套数据体系帮助运营分析活动效果、提升运营能力。然而在实际的开发过程中,如果直接部署一套大数据体系,对于使用者来说将是一笔比较大的服务器开销。为此我们选用折中方案完善数据分析能力。

elasticsearch vs clickhouse

ClickHouse是一款高性能列式分布式数据库管理系统,我们对ClickHouse进行了测试,发现有下列优势:

ClickHouse写入吞吐量大,单服务器日志写入量在50MB到200MB/s,每秒写入超过60w记录数,是ES的5倍以上。在ES中比较常见的写Rejected导致数据丢失、写入延迟等问题,在ClickHouse中不容易发生。

查询速度快,官方宣称数据在pagecache中,单服务器查询速率大约在2-30GB/s;没在pagecache的情况下,查询速度取决于磁盘的读取速率和数据的压缩率。经测试ClickHouse的查询速度比ES快5-30倍以上。

ClickHouse比ES服务器成本更低。一方面ClickHouse的数据压缩比比ES高,相同数据占用的磁盘空间只有ES的1/3到1/30,节省了磁盘空间的同时,也能有效的减少磁盘IO,这也是ClickHouse查询效率更高的原因之一;另一方面ClickHouse比ES占用更少的内存,消耗更少的CPU资源。我们预估用ClickHouse处理日志可以将服务器成本降低一半。

支持功能\开源项目ElasticSearchClickHouse
查询javac++
存储类型文档存储列式数据库
分布式支持分片和副本都支持分片和副本都支持
扩展性高低
写入速度慢快
CPU/内存占用高低
存储占用(54G日志数据导入)高 94G(174%)低 23G(42.6%)
精确匹配查询速度一般快
模糊匹配查询速度快慢
权限管理支持支持
查询难度低高
可视化支持高低
使用案例很多携程
维护难度低高

成本分析

备注:在没有任何折扣的情况下,基于aliyun分析

成本项标准费用说明总费用
zookeeper 集群2核4g 共享计算型 n4 50G SSD 云盘222/月3台高可用666/月
kafka 集群4核 8g 共享标准型 s650G SSD 云盘300G 数据盘590/月3台高可用1770/月
filebeat 部署混部相关的应用,会产生一定的内存以及磁盘开销,对应用的可用性会造成一定的影响。
clickhouse16核32g 共享计算型 n450G SSD 云盘1000G 数据盘2652/月2台高可用5304/月
总费用7740/月

环境部署

zookeeper 集群部署


yum install java-1.8.0-openjdk-devel.x86_64
/etc/profile 配置环境变量
更新系统时间
yum install  ntpdate
ntpdate asia.pool.ntp.org

mkdir zookeeper
mkdir ./zookeeper/data
mkdir ./zookeeper/logs

wget  --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz
tar -zvxf apache-zookeeper-3.7.1-bin.tar.gz -C /usr/zookeeper

export ZOOKEEPER_HOME=/usr/zookeeper/apache-zookeeper-3.7.1-bin
export PATH=$ZOOKEEPER_HOME/bin:$PATH

进入ZooKeeper配置目录
cd $ZOOKEEPER_HOME/conf

新建配置文件
vi zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/zookeeper/data
dataLogDir=/usr/zookeeper/logs
clientPort=2181
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888

在每台服务器上执行,给zookeeper创建myid
echo "1" > /usr/zookeeper/data/myid
echo "2" > /usr/zookeeper/data/myid
echo "3" > /usr/zookeeper/data/myid

进入ZooKeeper bin目录
cd $ZOOKEEPER_HOME/bin
sh zkServer.sh start

Kafka 集群部署

mkdir -p /usr/kafka
chmod 777 -R /usr/kafka
wget  --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/3.2.0/kafka_2.12-3.2.0.tgz
tar -zvxf kafka_2.12-3.2.0.tgz -C /usr/kafka

不同的broker Id 设置不一样,比如 1,2,3
broker.id=1
listeners=PLAINTEXT://ip:9092
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dir=/usr/kafka/logs
num.partitions=5
num.recovery.threads.per.data.dir=3
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
zookeeper.connection.timeout.ms=30000
group.initial.rebalance.delay.ms=0

后台常驻进程启动kafka
nohup /usr/kafka/kafka_2.12-3.2.0/bin/kafka-server-start.sh /usr/kafka/kafka_2.12-3.2.0/config/server.properties   >/usr/kafka/logs/kafka.log >&1 &

/usr/kafka/kafka_2.12-3.2.0/bin/kafka-server-stop.sh

$KAFKA_HOME/bin/kafka-topics.sh --list --bootstrap-server  ip:9092

$KAFKA_HOME/bin/kafka-console-consumer.sh --bootstrap-server ip:9092 --topic test --from-beginning

$KAFKA_HOME/bin/kafka-topics.sh  --create --bootstrap-server  ip:9092  --replication-factor 2 --partitions 3 --topic xxx_data

FileBeat 部署

sudo rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

Create a file with a .repo extension (for example, elastic.repo) in your /etc/yum.repos.d/ directory and add the following lines:
在/etc/yum.repos.d/ 目录下创建elastic.repo

[elastic-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

yum install filebeat
systemctl enable filebeat
chkconfig --add filebeat

FileBeat 配置文件说明,坑点1(需设置keys_under_root: true)。如果不设置kafka的消息字段如下:

文件目录: /etc/filebeat/filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /root/logs/xxx/inner/*.log
  json:  
如果不设置该索性,所有的数据都存储在message里面,这样设置以后数据会平铺。
       keys_under_root: true 
output.kafka:
  hosts: ["kafka1:9092", "kafka2:9092", "kafka3:9092"]
  topic: 'xxx_data_clickhouse'
  partition.round_robin:
            reachable_only: false
            required_acks: 1
            compression: gzip
processors: 
剔除filebeat 无效的字段数据
    - drop_fields:  
        fields: ["input", "agent", "ecs", "log", "metadata", "timestamp"]
        ignore_missing: false

nohup ./filebeat -e -c /etc/filebeat/filebeat.yml > /user/filebeat/filebeat.log & 
输出到filebeat.log文件中,方便排查

clickhouse 部署

检查当前CPU是否支持SSE 4.2,如果不支持,需要通过源代码编译构建
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
返回 "SSE 4.2 supported" 表示支持,返回 "SSE 4.2 not supported" 表示不支持

创建数据保存目录,将它创建到大容量磁盘挂载的路径
mkdir -p /data/clickhouse
修改/etc/hosts文件,添加clickhouse节点
举例:
10.190.85.92 bigdata-clickhouse-01
10.190.85.93 bigdata-clickhouse-02

服务器性能参数设置:
cpu频率调节,将CPU频率固定工作在其支持的最高运行频率上,而不动态调节,性能最好
echo 'performance' | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

内存调节,不要禁用 overcommit
echo 0 | tee /proc/sys/vm/overcommit_memory

始终禁用透明大页(transparent huge pages)。 它会干扰内存分配器,从而导致显着的性能下降
echo 'never' | tee /sys/kernel/mm/transparent_hugepage/enabled

首先,需要添加官方存储库:
yum install yum-utils
rpm --import <https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG>
yum-config-manager --add-repo <https://repo.clickhouse.tech/rpm/stable/x86_64>

查看clickhouse可安装的版本:
yum list | grep clickhouse
运行安装命令:
yum -y install clickhouse-server clickhouse-client

修改/etc/clickhouse-server/config.xml配置文件,修改日志级别为information,默认是trace
<level>information</level>
执行日志所在目录:

正常日志
/var/log/clickhouse-server/clickhouse-server.log
异常错误日志
/var/log/clickhouse-server/clickhouse-server.err.log

查看安装的clickhouse版本:
clickhouse-server --version
clickhouse-client --password

sudo clickhouse stop
sudo clickhouse tart
sudo clickhouse start

总结

整个部署的过程踩了不少坑,尤其是filebeat yml的参数设置。clickhouse 的配置说明我会再更新一篇跟大家同步一下过程中踩的坑。很久没有更新博客了,经常看到博客35岁以后怎么办的问题。说实话我自己也没想好以后怎么办,核心还是持续的学习&输出。不断的构建自己的护城河,不管是技术专家、业务专家、架构、管理等。个人建议如果能持续写代码就奋战在一线,管理彻底与公司绑定。除非你是有名的大厂,这另外看。如果所在的公司缺乏较大的行业影响力,个人感觉可以奋战在一线,未来选择新的工作。考量更多的还是行业影响、商业sense、技术架构能力。现在的我已35,从容的面对每一天。

graylog 后起之秀,可以替代elk的轻量化工具 Docker默认使用了json-file driver作为log driver,因此日志是存储在一个json.log的本地文件中的。而gelf则是本文需要使用的log driver。 当容器多了,或者是采用类似swarm集群部署Docker的时候,各种日志分散存在各个json.log文件中,当查找问题或者进行相关统计的时候,分散的日志对我们来说是非常不友好的。我们需要一个能够集中管理Docker日志的工具 立即下载

相关推荐

TwinCAT3新手必看:5分钟搞定EtherCAT从站PDO动态配置(附电流变量添加技巧)

本文为TwinCAT3新手提供了EtherCAT从站PDO动态配置的快速入门指南。文章详细解析了Process Data Object(PDO)在实时数据交换中的核心作用,并分步演示了在TwinCAT3工程中扫描从站、动态添加与映射PDO(包括接收PDO和发送PDO)的完整操作流程。重点分享了如何灵活添加并监控如电机实际电流等关键工艺变量的高级技巧,并针对不同品牌驱动器的兼容性问题提供了实用的调试心法和解决方案,帮助工程师快速上手并优化工业自动化系统。

xgboost6farmer的博客 453

ELK架构 --替代方案

最终方案 前言 前几篇我们介绍了项目中如何使用logback组件记录系统的日志情况;现在我们的系统都是分布式的,集群化的,那就代表着我们的应用会分布在很多服务器上面;那应用的日志文件就会分布在各个服务器上面。 问题 突然有一天我们系统出现了问题,我们第一时间想到的是先要判断到底哪个服务出现了问题;我们的技术人员就连接生产环境服务器,查看服务器上面的应用日志。 那么多的服务器,技术人员这个时候就会很抓狂,一个个的查看分析日志,是比较愚蠢的方法。那有什么好的方式呢?今天老顾给大家介绍常...

qq690452074的专栏 2094

避坑指南:锐浪报表PictureBox打印图像常见的5大问题及解决方案

本文深入剖析了锐浪报表(Grid++Report)中PictureBox控件打印图像时常见的五大难题,包括图像源加载机制、拉伸失真、动态加载失败、跨平台兼容性及性能优化。文章提供了从原理理解到实战解决方案的完整指南,帮助开发者有效规避图像打印中的常见陷阱,确保报表输出的稳定与高质量。

water的专栏 1148

替代ELK:ClickHouse+Kafka+FlieBeat

ClickHouse 是一款高性能列式分布式数据库管理系统

琅枫的博客 2625

遥感大模型的深度学习从CNN到Vision Transformer以及混合架构的演进之路

深度学习,特别是以卷积神经网络(CNN)和Transformer为代表的“大模型”技术,正以其强大的表征学习能力,深刻地重塑着遥感智能解译的整个技术栈与认知范式。本文将系统性地梳理遥感大模型从局部卷积的奠基,到全局注意力的革命,再到二者融合的混合架构演进这一波澜壮阔的历程。我们将深入剖析每个阶段的核心技术原理,结合遥感数据特性与实际应用案例,详细阐述其在分类、检测、分割等核心任务中的具体应用。

panshengwu的博客 1138

图像评价之计算PSNR、SSIM、MSE、LPIPS和NIQE评价指标

如果代码对你的研究有所帮助,请为该仓库点上小星星。

书山有路,学海无涯! 2646

EFK代替ELK方案7.17.3

最近发现,logstash日志收集器本身的内存占用和es相当,这也是logstash用java开发,其jvm本身就是内存消耗大户.为了降本增效,发现用go开发的beats可以替代logstash.ELK : 通常我们将服务器日志通过logback的http发送至logstash服务器统一处理,logstash采集处理后发送到elasticsearch服务器.filebeat应该和服务器代码一起,利用filebeat采集服务器存储的日志文件发送到es.以下是7.17.3到8.6的官方配置.只做增添.

欢迎来到烟火气知识小天地!这里记录生活、工作中的 “小麻烦”,从软件故障到生活难题,我会毫无保留分享解决思路与方法,愿成为你排忧解难时的温暖参考,伴你在解决问题路上稳步前行。 1299

手把手教你学SIMULINK模块库文件专栏-From Workspace 模块详解

模块是 Simulink 中的一个信号源模块,用于从 MATLAB 工作区加载数据作为输入信号。该模块允许用户将预先在 MATLAB 中生成的数据(如时间序列、矩阵或结构体)导入到 Simulink 模型中,从而实现更灵活的信号输入和仿真控制。通过深入了解其参数的影响及结合 MATLAB 脚本的应用,读者可以更加有效地利用这一模块进行仿真和研究。此外,通过实际应用场景的扩展以及常见问题解答部分的帮助,能够更好地掌握。模块是一个非常灵活的工具,适用于需要从 MATLAB 工作区加载数据的各种场景。

MHD0815的博客 633

FlieBeat & Kafka & Clickhouse 替代ELK 系列二

clickhouse kafka engine 表 大数据 elk fck clickhouse问题解决 clickhouse 集群部署

tangpengtao的专栏 2301

《FPGA接口与协议》专栏的说明与导航

《FPGA接口与协议》专栏的说明与导航(建议阅读)。

孤独的单刀 17万+

Xilinx FPGA ICAP原语实现多重配置

众所周知,常见的FPGA通常为SRAM结构,固件程序一般存放在外置的串行Flash中,比如SPI Flash,M25P16或N25Q128等。 FPGA启动时,一般先从SPI起始地址开始加载数据到内部的SRAM,加载完成、校验通过则会直接运行。 那么有没有可能在SPI Flash中存放两个或多个FPGA固件呢?

whik1194的博客 4612

替代ELK:ClickHouse+Kafka+FlieBeat才是最绝的

saas 服务未来会面临数据安全、合规等问题。公司的业务需要沉淀一套私有化部署能力,帮助业务提升行业竞争力。为了完善平台系统能力、我们需要沉淀一套数据体系帮助运营分析活动效果、提升运营能力。然而在实际的开发过程中,如果直接部署一套大数据体系,对于使用者来说将是一笔比较大的服务器开销。为此我们选用折中方案完善数据分析能力。

IT_1024的博客 1217

Codex、Claude Code、Opus、Trae、Cursor:一文讲懂 2026 AI 编程工具格局

2026年AI编程工具将形成三层体系:模型层(Opus/Codex)负责思考,执行层(Claude Code/Codex Agent)负责自动开发任务,工具层(Cursor/Trae)提供AI集成的开发环境。关键区别在于Agent路线强调AI主导自动化开发,而IDE路线保持人类主导。未来竞争力取决于能否将AI整合为生产力系统,掌握模型推理、Agent任务编排和AI IDE协同三大能力。核心转变是从&quot;写代码&quot;升级为&quot;指挥AI写代码&quot;,高级玩家通过组合不同层级工具构建自动

m0_51738372的博客 2692
上一篇: 性能吊打 Node.js 和 Deno 的新一代 javaScript 运行时-Bun.js
下一篇: SpringBoot+Minio搭建不再爆肝秃头的分布式文件服务器
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值