一、Elasticsearch
1、介紹:
Elasticsearch 是一個開源的分布式搜索和分析引擎,Logstash 和 Beats 收集的數(shù)據(jù)可以存儲在 Elasticsearch 中進行搜索和分析。
Elasticsearch為所有類型的數(shù)據(jù)提供近乎實時的搜索和分析:一旦數(shù)據(jù)被索引,它就可以立即被搜索和分析,這種實時性使得用戶能夠即時獲取最新數(shù)據(jù)的搜索結果和分析信息。
2、概念:
① 文檔:文檔是 Elasticsearch中所有可搜索數(shù)據(jù)的最小的數(shù)據(jù)單元。它是以JSON 格式表示的一條數(shù)據(jù)記錄,每個文檔都有一個唯一的ID來標識,文檔可以包含各種字段,例如文本、數(shù)字、日期、嵌套對象等。
② 文檔元數(shù)據(jù):文檔除了包含實際的數(shù)據(jù)外,還有一些元數(shù)據(jù)信息。這些信息包括文檔的版本號、索引的時間戳、路由信息等。
③ 索引(Index):索引是一組具有相似特征的文檔的集合,每個索引都有一個唯一的名稱,用于標識和檢索其中的文檔。
二、ES 集群:
1、概念:
Elasticsearch(ES)集群是由一個或多個Elasticsearch節(jié)點組成的集合。這些節(jié)點協(xié)同工作,共同承載數(shù)據(jù)存儲、處理和搜索的負載。
(1) Master Node 和 Master-eligible Node:
① Master Node:主節(jié)點負責管理整個集群的狀態(tài)和拓撲結構;
② Master-eligible Node:有資格成為主節(jié)點的節(jié)點。
ES 集群每個節(jié)點啟動后,默認就是一個 Master eligible node,Master-eligible node 可以參加選主流程,成為 Master Node ;當?shù)谝粋€節(jié)點啟動時,它會將自己選舉成 Master Node,每個節(jié)點上都保存了集群的狀態(tài),只有 Master Node 才能修改集群的狀態(tài)信息。
(2) Date Node 和 Coordinating Node:
① Data Node:數(shù)據(jù)節(jié)點,這些節(jié)點負責存儲數(shù)據(jù)分片;
② Coordinating Node:協(xié)調節(jié)點,負責接收來自客戶端的請求,將請求轉發(fā)到適當?shù)臄?shù)據(jù)節(jié)點,并將數(shù)據(jù)節(jié)點的響應整合后返回給客戶端。
(3) 主分片與副本分片:
分片(Shards)是將數(shù)據(jù)水平分割和分布式存儲的機制,它允許將大量數(shù)據(jù)分散到集群中的多個節(jié)點上,以提高性能、擴展性和可用性。
① 主分片(Primary Shard):主分片是索引的原始數(shù)據(jù)分片,在創(chuàng)建索引時,可以指定主分片的數(shù)量,一旦創(chuàng)建后,主分片的數(shù)量將保持不變。
② 副本分片(Replica Shard):副本分片是主分片的復制品,用于提供數(shù)據(jù)的冗余備份和高可用性。副本分片數(shù)量可以隨時更改,通過增加或減少副本的數(shù)量,可以影響集群服務的可用性。
2、集群配置:
(1) 域名解析:
(2) 節(jié)點設置(以 ela1 為例):
vim /etc/elasticsearch/elasticsearch.yml
① cluster.name: elk 集群名稱,各節(jié)點的集群名稱相同
② node.name: ela1 節(jié)點名稱,各節(jié)點需要設置獨立的節(jié)點名稱
③ node.data: true 指示節(jié)點為數(shù)據(jù)節(jié)點
④ network.host: 0.0.0.0 ;http.port: 9200 節(jié)點所綁定的ip和提供服務的端口
⑤ discovery.seed_hosts 指定集群成員,用于主動發(fā)現(xiàn)他們
⑥ cluster.initial_master_nodes: ["ela1", "ela2", "ela3"] 指定集群初始化主節(jié)點
2號、3號節(jié)點的 yml 文件除了 node.name 需要修改,其他都與 ela1 保持一致
(3) 查集群:
systemctl start elasticsearch.service
● 查看集群健康狀態(tài):
curl -X GET "localhost:9200/_cat/health?v"
狀態(tài)含義:
綠色表示健康狀態(tài)良好,黃色表示有一些問題但仍在正常運行,紅色表示存在嚴重問題。
● 查看集群節(jié)點信息:
curl -X GET "localhost:9200/_cat/nodes?v"
3、集群測試
使用 Filebeat 搜集日志,輸出到 Logstash, 再由 Logstash 處理完數(shù)據(jù)后輸出到 Elasticsearch。
(1) Logstash配置:
(2) 啟動服務,查看輸出:
驗證Elasticsearch是否創(chuàng)建索引:
curl ‐X GET "192.168.19.20:9200/_cat/indices"
(3) 自定義索引:
用戶可自定義索引,例如把訪問日志 access.log 中的內(nèi)容單獨放到一個索引中。
三、Kibana
1、簡介:
Kibana是一個開源的數(shù)據(jù)可視化工具,它是Elastic Stack的一部分,Kibana主要用于對Elasticsearch中的數(shù)據(jù)進行可視化和分析。
2、Kibana 部署
(1) 編輯配置文件:
vim /usr/local/kibana/config/kibana.yml
① server.port: 5601 ;server.host: 0.0.0.0
② elasticsearch.hosts: ["http://192.168.198.128:9200"]
用于連接到 ES 集群的地址和端口
③ logging.dest: /var/log/kibana/kibana.log
配置日志文件路徑
④ i18n.locale: "zh-CN"
設置頁面字體為中文
(2) 創(chuàng)建用戶并修改屬主和屬組:
默認情況下 kibana 不以 root 用戶運行,需要創(chuàng)建應該普通用戶
useradd ela
mkdir /run/kibana /var/log/kibana/
chown -R ela.ela /run/kibana/
chown -R ela.ela /var/log/kibana/
chown -R ela.ela /usr/local/kibana/
(3) 切換到 ela 用戶運行:
su ‐ ela
/usr/local/kibana/bin/kibana
kibana web 界面:
① 創(chuàng)建索引模式:
Kibana 中創(chuàng)建索引模式時,你需要指定一個或多個索引模式名稱,這些名稱匹配 Elasticsearch中 的一個或多個索引。通過指定索引模式,可以在Kibana中執(zhí)行搜索、創(chuàng)建可視化圖表和構建儀表板。
② 查看日志:
四、Kafka 集群
1、簡介:
(1) 概念:
Kafka是一個分布式、支持分區(qū)的(partition)、多副本的(replica),基于zookeeper協(xié)調的分布式消息系統(tǒng),它可以實時的處理大量數(shù)據(jù)以滿足各種需求場景,提高了可擴展性。具有峰值處理能力,能夠使關鍵組件頂住突發(fā)的訪問壓力,不會因為超負荷的請求而完全崩潰。
(2) 特性:
高吞吐量:kafka每秒可以處理幾十萬條消息
可擴展性:kafka集群支持熱擴展- 持久性
可靠性:消息被持久化到本地磁盤,并且支持數(shù)據(jù)備份防止數(shù)據(jù)丟失
容錯性:允許集群中節(jié)點失敗(若副本數(shù)量為n,則允許n-1個節(jié)點失?。?/p>
高并發(fā):支持數(shù)千個客戶端同時讀寫
(3) 組件:
① 話題 (topic):特定類型的消息流,Kafka消息被發(fā)布到話題,消費者可以訂閱并從主題中讀取數(shù)據(jù)(kafka 是面向 topic的)
② 生產(chǎn)者 (Producer) :負責將數(shù)據(jù)發(fā)布到Kafka的話題中,生產(chǎn)者可以將消息發(fā)送到一個或多個話題。
③ 消費者 (Consumer):訂閱一個或多個話題,并處理從這些話題中接收到的消息。
④ 代理 (Broker):Kafka集群由多個服務器節(jié)點組成,每個節(jié)點稱為代理。它們負責存儲已發(fā)布消息記錄,并處理生產(chǎn)者和消費者之間的數(shù)據(jù)傳輸。
⑤ 分區(qū) (Partition):每個主題可以分為多個分區(qū),每個分區(qū)在多個服務器節(jié)點上進行副本備份,確保數(shù)據(jù)的可靠性和容錯性。
⑥ 復制 (Replication):Kafka使用復制機制來確保數(shù)據(jù)的可靠性和容錯性,復制允許將相同分區(qū)的數(shù)據(jù)副本保存在多個Broker上。
⑦ 領導者 (Leader):對于每個分區(qū),Kafka中有一個 Leader ,它負責處理所有的讀寫請求,所有的生產(chǎn)者和消費者都與 Leader 交互。
⑧ 跟隨者 (Follower):Follower 是 Leader 的復制品,F(xiàn)ollower 會從 Leader 中拉取數(shù)據(jù),并保持數(shù)據(jù)的同步,以便在 Leader 副本失敗時接管服務。
⑨ ZooKeeper:ZooKeeper是一個開源的分布式協(xié)調服務,用于管理和協(xié)調Kafka集群中的Broker節(jié)點。ZooKeeper負責維護Kafka集群中各個Broker的狀態(tài)信息,包括分區(qū)分配、Leader選舉等,確保Kafka集群的穩(wěn)定運行。
2、集群部署:
(1) 域名解析:
配置jdk8:yum install -y java-1.8.0-openjdk
(2) 配置 ZK(以 es01 為例):
vim /usr/local/kafka/config/zookeeper.properties
dataDir=/opt/data/zookeeper/data
dataLogDir=/opt/data/zookeeper/logs
clientPort=2181
tickTime=2000
initLimit=20
syncLimit=10
dataDir:指定 ZooKeeper 數(shù)據(jù)存儲的目錄;
dataLogDir:指定 ZooKeeper 日志文件存儲的目錄;
clientPort:ZooKeeper 客戶端連接到服務器的端口號;
tickTime:ZooKeeper 服務器之間的心跳時間以及超時時間 (ms);
initLimit:當 ZooKeeper 服務器啟動時,等待接收來自 Leader 的初始化連接的時間 (以 tickTime 的倍數(shù)為單位);
syncLimit:在 ZooKeeper 集合中的 Follower 節(jié)點同步到 Leader 節(jié)點的時間限制 (以 tickTime 的倍數(shù)為單位)。
server.1=192.168.198.128:2888:3888
server.2=192.168.198.129:2888:3888
server.3=192.168.198.130:2888:3888
kafka集群IP:Port
● 創(chuàng)建data、log目錄:
mkdir ‐p /opt/data/zookeeper/{data,logs}
● 創(chuàng)建myid文件:
指定該設備在集群中的編號
echo 1 > /opt/data/zookeeper/data/myid
es02、es03 的配置信息與 es01 相同
mkdir -p /opt/data/zookeeper/{data,logs}
echo 2 > /opt/data/zookeeper/data/myid
echo 3 > /opt/data/zookeeper/data/myid
(3) 配置 Kafka(以 es01 為例):
vim /usr/local/kafka/config/server.properties
broker.id=1
listeners=PLAINTEXT://192.168.198.128:9092
num.network.threads=3
num.io.threads=8
broker.id:配置了 Kafka broker(代理)的唯一標識符,每個 Kafka broker 通過 broker.id 來標識自己在集群中的位置;
listeners=PLAINTEXT://192.168.198.128:9092:配置了 Kafka broker 監(jiān)聽客戶端連接的網(wǎng)絡接口和地址(配置本機);
num.network.threads:這個參數(shù)設置了 Kafka broker 處理消息的最大線程數(shù)。
num.io.threads:這個參數(shù)定義了 Kafka broker 處理磁盤 I/O 操作的線程數(shù)。
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
socket.send.buffer.bytes:設置了 Kafka 發(fā)送數(shù)據(jù)時的緩存大??;
socket.receive.buffer.bytes:設置了 Kafka 接收數(shù)據(jù)時的緩存大??;
socket.request.max.bytes:設置了 Kafka 單個請求可以包含的最大字節(jié)量。
log.dirs=/opt/data/kafka/logs
num.partitions=6
num.recovery.threads.per.data.dir=1
log.dirs:Kafka 的日志存儲目錄配置;
num.partition:指定 Kafka 話題的分區(qū)數(shù)量;
num.recovery.threads.per.data.dir:配置每個數(shù)據(jù)目錄(data.dirs)下用于日志恢復的線程數(shù)。
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
offsets.topic.replication.factor:指定了存儲位置的復制方式,設置為 2 數(shù)據(jù)會被復制兩份;
transaction.state.log.replication.factor ;transaction.state.log.min.isr:設置了事務狀態(tài)日志數(shù)據(jù)備份數(shù)量為1份,只要有一個備份是活躍的就可以進行寫入操作。
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
log.retention.hours:日志的保留時間 168小時(7天);
log.segment.bytes:定義了日志段的大小(存儲消息的字節(jié)數(shù));
log.retention.check.interval.ms:定義了檢查日志保留策略的時間間隔,每300,000毫秒 (5分鐘) 檢查并清理過期的日志段。
zookeeper.connect=192.168.198.128:2181,192.168.198.129:2181,192.168.198.130:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
zookeeper.connect:指定了 Kafka 使用的 ZooKeeper 的連接信息;
zookeeper.connection.timeout.ms:定義了連接 ZooKeeper 的超時時間;
group.initial.rebalance.delay.ms:定義了消費者組的初始重新平衡(rebalance)的延遲時間,為 0 毫秒意味著當有新的消費者加入或退出消費者組時,Kafka 將立即開始重新平衡分配分區(qū)(partitions)給消費者。
mkdir -p /opt/data/kafka/logs
● 配置 es02 和 es03:
scp -r /usr/local/kafka/config/server.properties es02:/usr/local/kafka/config/
scp -r /usr/local/kafka/config/server.properties es03:/usr/local/kafka/config/
分別修改 broker.id 和 listeners。
mkdir -p /opt/data/kafka/logs
(4) 三臺機器啟動 zookeeper:
cd /usr/local/kafka
nohup bin/zookeeper‐server‐start.sh config/zookeeper.properties &
(5) 三臺集群啟動 kafka:
cd /usr/local/kafka
nohup bin/kafka‐server‐start.sh config/server.properties &
(6) 驗證效果:
① 在1號機(128)上創(chuàng)建topic:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testtopicBean
② 在其他機器上查看 topic:
bin/kafka-topics.sh --zookeeper 192.168.198.128:2181 --list
③ 模擬消息生產(chǎn)和消費 (128 發(fā)送消息,129接收):
128:bin/kafka-console-producer.sh --broker-list 192.168.198.129:9092 --topic testtopicBean
129:bin/kafka-console-consumer.sh --bootstrap-server 192.168.198.128:9092 --topic testtopicBean --from-beginning
文章來源:http://www.zghlxwxcb.cn/news/detail-763209.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-763209.html
到了這里,關于ElasticStack日志分析平臺-ES 集群、Kibana與Kafka的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!