FlieBeat&Kafka&ClickhouseがELKシリーズ1に取って代わります

バックグラウンド

SaaSサービスは、将来、データのセキュリティ、コンプライアンス、およびその他の問題に直面するでしょう。同社のビジネスは、ビジネスが業界の競争力を向上させるのに役立つ一連の民営化展開機能を蓄積する必要があります。プラットフォームシステムの機能を向上させるには、運用の効果を分析し、運用機能を向上させるためのデータシステムのセットを蓄積する必要があります。ただし、実際の開発プロセスでは、ビッグデータシステムを直接展開すると、ユーザーにとってサーバーのオーバーヘッドが比較的大きくなります。この目的のために、データ分析機能を改善するための妥協案を選択します。

Elasticsearchとクリックハウス

ClickHouseは、高性能の列型分散データベース管理システムです。ClickHouseをテストしたところ、次の利点があることがわかりました。

ClickHouseは書き込みスループットが高く、1台のサーバーのログ書き込み量は50MBから200MB / sの範囲で、1秒あたりの書き込みレコード数はESの5倍以上の60Wを超えています。ESで拒否されるより一般的な書き込みは、データの損失、書き込みの遅延、およびClickHouseでは発生しにくいその他の問題を引き起こします。

クエリ速度は高速です。データはページキャッシュにあり、単一サーバーのクエリ速度は約2〜30GB /秒であると公式に主張されています。ページキャッシュがない場合、クエリ速度はディスクの読み取り速度に依存します。データの圧縮率。テスト後、ClickHouseのクエリ速度はESの5〜30倍以上高速です。

ClickHouseのコストはESサーバーよりも低くなっています。一方、ClickHouseのデータ圧縮率はESよりも高く、同じデータが占めるディスク容量はESの1/3から1/30に過ぎないため、ディスク容量を節約し、ディスクIOを効果的に削減します。 、これはClickHouseクエリでもより効率的です。理由の1つは、一方、ClickHouseは、ESよりも少ないメモリと少ないCPUリソースを消費します。ClickHouseを使用してログを処理すると、サーバーのコストを半分に削減できると見積もっています。

image.png

サポート機能\オープンソースプロジェクト ElasticSearch ClickHouse
お問い合わせ java c ++
ストレージタイプ ドキュメントストレージ 列指向データベース
分散サポート シャーディングとレプリカの両方がサポートされています シャーディングとレプリカの両方がサポートされています
拡張性 高い 低い
書き込み速度 スロー 素早い
CPU/メモリ使用量 高い 低い
ストレージの占有(54Gログデータのインポート) 高94G(174%) 低23G(42.6%)
完全一致クエリ速度 一般的 素早い
あいまい一致クエリ速度 素早い スロー
権限管理 サポート サポート
クエリの難しさ 低い 高い
視覚化のサポート 高い 低い
ユースケース たくさんの Ctrip
メンテナンスの難しさ 低い 高い

コスト分析

注:割引がない場合は、aliyun分析に基づきます

原価項目 標準 料金 説明する 総費用
zookeeperクラスター 2コア4g共有コンピューティングn450GSSDクラウドディスク 222/月  3高可用性 666/月
kafkaクラスター 4コア8g共有標準s650GSSDクラウドディスク300Gデータディスク 590/月 3高可用性 1770/月
filebeatデプロイメント コロケーション関連のアプリケーションは、一定量のメモリとディスクオーバーヘッドを生成します。これは、アプリケーションの可用性に一定の影響を及ぼします。
クリックハウス  16コア32g共有コンピューティングn450GSSDクラウドディスク1000Gデータディスク 2652/月 2高可用性 5304/月
総費用 7740/月

環境展開

zookeeperクラスターのデプロイ

test2.png


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のメッセージフィールドを次のように設定しない場合:

test.png

文件目录: /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文件中,方便排查

クリックハウスの展開

test3.png

检查当前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

test5.png

要約する

デプロイプロセス全体、特にfilebeatymlのパラメーター設定には多くの落とし穴があります。クリックハウスの構成は、プロセスで踏んだピットを同期するために別の記事を更新することを示しています。私は長い間ブログを更新していません、そしてブログが35歳になった後に何をすべきかという質問をよく目にします。正直なところ、私自身は将来何をすべきか考えていません。コアは継続的な学習とアウトプットです。それが技術専門家、ビジネス専門家、建築、管理などであるかどうかにかかわらず、あなた自身の堀を作り続けてください。個人的には、コードを書き続けることができれば、最前線で戦うべきであり、経営陣は会社と完全に結びついていることをお勧めします。あなたが有名な大きな工場でない限り、これは別の見方です。私が働いている会社が業界の大きな影響力を欠いている場合、私は最前線で戦い、将来新しい仕事を選ぶことができると感じています。さらに考慮すべきことは、業界の影響力、ビジネスセンス、および技術アーキテクチャの機能です。今私は35歳で、毎日落ち着いて顔をしています。

おすすめ

転載: juejin.im/post/7120880190003085320