日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ELK+Kafka部署

發(fā)布時(shí)間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ELK+Kafka部署 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

1.背景

2.ELK的配置

2.1.下載

2.2.關(guān)閉防火墻

2.3.安裝elasticsearch

2.4.安裝Logstash

2.5.安裝Kibana

2.6.Java日志輸出到Logstash

2.7.OSS版本

3.Kafka的配置

3.1.zookeeper搭建

3.2.kafka搭建

4.整合


1.背景


高日志壓力情況下,為了避免Logstash直接向ElasticSearch寫入的壓力過大導(dǎo)致中間過程堆積,采用Logstash——Kafka——Logstash——ElasticSearch的方案,由Kafka緩沖一下數(shù)據(jù)壓力。

2.ELK的配置

參見《ELK搭建及Java程序接入》

2.1.下載


官網(wǎng)下載Elasticsearch、Logstash、Kibana

https://www.elastic.co/

https://www.elastic.co/cn/downloads/

我下載的都是7.1.1版本,最好統(tǒng)一版本

(注意,這幾個(gè)都是試用版,過一段時(shí)間會(huì)過期,如果需要長(zhǎng)期使用,得下載文末的oss版本)

?

2.2.關(guān)閉防火墻


systemctl stop firewalld

systemctl disable firewalld

?

2.3.安裝elasticsearch


在 Linux 環(huán)境中,elasticsearch 不允許以 root 權(quán)限來運(yùn)行。

如果以 root 身份運(yùn)行 elasticsearch,會(huì)提示這樣的錯(cuò)誤:

can not run elasticsearch as root

解決方法:使用非 root 權(quán)限賬號(hào)運(yùn)行 elasticsearch

# 創(chuàng)建用戶組

groupadd elk

# 創(chuàng)建新用戶,-g elk 設(shè)置其用戶組為 elk,-p elk 設(shè)置其密碼為 elk

useradd elk -g elk -p elk

# 更改 /opt 文件夾及內(nèi)部文件的所屬用戶及組為 elk:elk

chown -R elk:elk /opt # 假設(shè)你的 elasticsearch 安裝在 opt 目錄下

# 切換賬號(hào)

su elk

?

解壓elasticsearch

tar xzvf elasticsearch-7.1.1-linux-x86_64.tar.gz

運(yùn)行

cd elasticsearch-7.1.1

bin/elasticsearch

測(cè)試

curl http://localhost:9200

?

默認(rèn)只能用localhost訪問,如需開啟外部訪問,需修改配置

vi config/elasticsearch.yml

去掉network.host的注釋并修改為本機(jī)ip

network.host: 0.0.0.0

discovery.seed_hosts: ["127.0.0.1","[::1]"]

?

?

此時(shí)啟動(dòng)可能會(huì)報(bào)錯(cuò)

ERROR: [3] bootstrap checks failed

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

?

如果不配置discovery.seed_hosts會(huì)報(bào)錯(cuò)

[3]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

?

?

?

vm.max_map_count 不低于 262144

問題:vm.max_map_count?表示虛擬內(nèi)存大小,它是一個(gè)內(nèi)核參數(shù)。elasticsearch 默認(rèn)要求?vm.max_map_count?不低于 262144。

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解決方法:

你可以執(zhí)行以下命令,設(shè)置?vm.max_map_count?,但是重啟后又會(huì)恢復(fù)為原值。

sysctl -w vm.max_map_count=262144

持久性的做法是在?/etc/sysctl.conf?文件中修改?vm.max_map_count?參數(shù):

echo "vm.max_map_count=262144" > /etc/sysctl.conf sysctl -p

?

nofile 不低于 65536

問題:?nofile?表示進(jìn)程允許打開的最大文件數(shù)。elasticsearch 進(jìn)程要求可以打開的最大文件數(shù)不低于 65536。

解決方法:

echo "* soft nofile 65536" > /etc/security/limits.conf

echo "* hard nofile 131072" > /etc/security/limits.conf

?

reboot重啟后即可正常啟動(dòng)

?

后臺(tái)啟動(dòng)

nohup bin/elasticsearch > service.out&

?

跟蹤后臺(tái)啟動(dòng)的輸出

tail -f service.out

?

看進(jìn)程

[elk@localhost xx]$ ps -ef|grep opt

elk 2095 1750 11 13:42 pts/0 00:02:51 /opt/elasticsearch-7.1.1/jdk/bin/java -Xms1g -Xmx1g -XX:+UseConc……/opt/elasticsearch-7.1.1/lib/* org.elasticsearch.bootstrap.Elasticsearch

elk 2183 2095 0 13:42 pts/0 00:00:00 /opt/elasticsearch-7.1.1/modules/x-pack-ml/platform/linux-x86_64/bin/controller

?

?

2.4.安裝Logstash


解壓

tar xzvf logstash-7.1.1.tar.gz

運(yùn)行

cd logstash-7.1.1

bin/logstash -f config/logstash-sample.conf

或后臺(tái)啟動(dòng)

nohup bin/logstash -f config/logstash-sample.conf > service.out&

?

如果沒有JAVA_HOME,需設(shè)置JAVA_HOME,注意使用root用戶

vi /etc/profile

添加如下內(nèi)容

export JAVA_HOME=/opt/elasticsearch-7.1.1/jdk

export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin

配置立即生效執(zhí)行

source /etc/profile

?

看進(jìn)程

$ ps -ef|grep opt

elk 2460 2317 68 14:01 pts/1 00:03:37 /opt/elasticsearch-7.1.1/jdk/bin/java ……/opt/logstash-7.1.1/logstash-core/lib/jars/slf4j-api-1.7.25.jar org.logstash.Logstash -f config/logstash-sample.conf

?

?

2.5.安裝Kibana


解壓

tar xzvf kibana-7.1.1-linux-x86_64.tar.gz

?

cd kibana-7.1.1-linux-x86_64

需要修改elasticsearch的ip端口則改一下配置

vi config/kibana.yml

去掉這兩行的注釋并修改

server.host: "192.168.91.149" #需修改才能從其他機(jī)器訪問

elasticsearch.hosts: ["http://localhost:9200"]

?

運(yùn)行

bin/kibana

或后臺(tái)啟動(dòng)

nohup bin/kibana > service.out&

?

訪問地址

http://localhost:5601

?

看進(jìn)程

[elk@localhost kibana-7.1.1-linux-x86_64]$ ps -ef |grep node

elk 2658 1750 99 14:09 pts/0 00:00:12 bin/../node/bin/node --no-warnings --max-http-header-size=65536 bin/../src/cli

?

2.6.Java日志輸出到Logstash
?

cd logstash-7.1.1

vi config/logstash.conf

添加如下內(nèi)容

input {
? beats {
? ? port => 5044
? }
? tcp {
? ? # host:port就是上面appender中的 destination,
? ? # 這里其實(shí)把logstash作為服務(wù),開啟9250端口接收logback發(fā)出的消息
? ? host => "0.0.0.0" port => 9250 mode => "server" tags => ["tags"] codec => json_lines
? }
}
?
output {
? elasticsearch {
? ? hosts => ["http://localhost:9200"]
? }
}
kill掉原來的logstash后啟動(dòng)

nohup bin/logstash -f config/logstash.conf > service.out&

?

Java代碼修改

pom.xml增加依賴

<dependency>
? ? <groupId>net.logstash.logback</groupId>
? ? <artifactId>logstash-logback-encoder</artifactId>
? ? <version>6.1</version>
</dependency>
logback.xml按需調(diào)整

<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
? ? <!--
? ? destination 是 logstash 服務(wù)的 host:port,
? ? 相當(dāng)于和 logstash 建立了管道,將日志數(shù)據(jù)定向傳輸?shù)?logstash
? ? -->
? ? <destination>192.168.91.149:9250</destination>
? ? <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="INFO">
? ? <!-- appender referenced after it is defined -->
? ? <appender-ref ref="STDOUT"/>
? ? <appender-ref ref="LOGSTASH" />
</root>
此時(shí)啟動(dòng)java程序,如果啟動(dòng)成功,日志就進(jìn)入es了

?

日志查看

進(jìn)入kibana web頁(yè)面

點(diǎn)擊左側(cè)Discover按鈕,會(huì)自動(dòng)進(jìn)入創(chuàng)建索引,創(chuàng)建索引logstash-*

?

點(diǎn)擊下一步Next step

Time Filter field name選擇@timestamp,點(diǎn)擊Create index pattern按鈕等待創(chuàng)建索引成功

?

此時(shí)再次點(diǎn)擊左側(cè)Discover按鈕,進(jìn)入熟悉的索引查詢頁(yè)面了

?

區(qū)分應(yīng)用

實(shí)際應(yīng)用過程中,多個(gè)app日志混在一起,需要增加額外入庫(kù)字段進(jìn)行區(qū)分,此時(shí)修改java程序的logback.xml,添加customFields配置節(jié)即可。

<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
? ? <!--
? ? destination 是 logstash 服務(wù)的 host:port,
? ? 相當(dāng)于和 logstash 建立了管道,將日志數(shù)據(jù)定向傳輸?shù)?logstash
? ? -->
? ? <destination>192.168.91.149:9250</destination>
? ? <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
? ? ? ? <customFields>{"appname":"whqtest"}</customFields>
? ? </encoder>
</appender>
?

logback.xml也可以采用變量的寫法

<configuration>
?? ?<!-- 項(xiàng)目的appid -->
?? ?<property name="APP_ID" value="whqtest"/>
?? ?………………
?? ?<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
?? ? ? ?<!--
?? ? ? ?destination 是 logstash 服務(wù)的 host:port,
?? ? ? ?相當(dāng)于和 logstash 建立了管道,將日志數(shù)據(jù)定向傳輸?shù)?logstash
?? ? ? ?-->
?? ? ? ?<destination>192.168.91.149:9250</destination>
?? ? ? ?<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
?? ? ? ? ? ?<customFields>{"appname":"${APP_ID}"}</customFields>
?? ? ? ?</encoder>
?? ?</appender>
?? ?………………
</configuration>


2.7.OSS版本


一段時(shí)間后啟動(dòng)kibana報(bào)錯(cuò)

Elasticsearch cluster did not respond with license information.

需要下載oss版本
https://www.elastic.co/cn/downloads/elasticsearch-oss

https://www.elastic.co/cn/downloads/logstash-oss

https://www.elastic.co/cn/downloads/kibana-oss

?

?

OSS版部署問題
如果連接es超時(shí)

vi es的目錄/config/jvm.options

增大-Xms和-Xmx到2g

?

增大es連接超時(shí)時(shí)間

vi config/kibana.yml

elasticsearch.requestTimeout: 90000

?

連接es返回錯(cuò)誤:master_not_discovered_exception

es服務(wù)器修改

vi /etc/hostname 設(shè)置機(jī)器名為node1

node1

vi /etc/hosts

127.0.0.1 node1

vi es目錄/config/elasticsearch.yml

node.name: node1

discovery.seed_hosts: ["127.0.0.1"]

cluster.initial_master_nodes: ["node1"]
————————————————
版權(quán)聲明:本文為CSDN博主「洪岐」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/whq12789/article/details/92832436


3.Kafka的配置

3.1.zookeeper搭建

參見《centos7 zookeeper3.5.6單點(diǎn)部署》

官網(wǎng)下載

https://zookeeper.apache.org/
下載
https://zookeeper.apache.org/releases.html
直接部署的包
https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/current/apache-zookeeper-3.5.6-bin.tar.gz
源碼包(下載這個(gè)比較麻煩,需要安裝maven,然后mvn package進(jìn)行編譯)
https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/current/apache-zookeeper-3.5.6.tar.gz

部署
#安裝jdk1.8
?yum install -y java-1.8.0-openjdk

#部署zookeeper
tar xvzf apache-zookeeper-3.5.6-bin.tar.gz
mv apache-zookeeper-3.5.6-bin /opt
cd /opt/apache-zookeeper-3.5.6-bin/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
修改
dataDir=/data/zookeeper
#該目錄為數(shù)據(jù)保存目錄
mkdir -p /data/zookeeper

cd /opt/apache-zookeeper-3.5.6-bin/
bin/zkServer.sh start
輸出如下,STARTED表示成功。

ZooKeeper JMX enabled by default
Using config: /opt/apache-zookeeper-3.5.6-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

連接測(cè)試

bin/zkCli.sh -server 127.0.0.1:2181
出現(xiàn)如下命令輸入框則表示連接成功
WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181(CONNECTING) 0]
此時(shí)輸入
ls /
可以查看zookeeper根目錄有一個(gè)zookeeper文件:
[zk: 127.0.0.1:2181(CONNECTED) 2] ls /
[zookeeper]
————————————————
版權(quán)聲明:本文為CSDN博主「洪岐」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/whq12789/article/details/103122786

3.2.kafka搭建

參見《centos7 kafka2.3.1單點(diǎn)部署》

kafka下載

http://kafka.apache.org/downloads
http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.3.1/kafka_2.12-2.3.1.tgz

部署

tar xvzf kafka_2.12-2.3.1.tgz
mv kafka_2.12-2.3.1 /opt/
cd /opt/kafka_2.12-2.3.1/
vi config/server.properties
修改

listeners=PLAINTEXT://192.168.81.145:9092 ???#注意,這里一定要有客戶端可訪問的ip,否則非本機(jī)連接調(diào)用第二次會(huì)異常
log.dirs=/data/kafka-logs

啟動(dòng)
bin/kafka-server-start.sh config/server.properties &
如果輸出出現(xiàn)
[2019-11-18 15:17:08,052] INFO [KafkaServer id=0] started (kafka.server.KafkaServer)
表示成功啟動(dòng)

停止服務(wù)
bin/kafka-server-stop.sh?

測(cè)試

啟動(dòng)生產(chǎn)者
bin/kafka-console-producer.sh --broker-list 192.168.81.145:9092 --topic test
然后隨便輸入幾行消息

啟動(dòng)消費(fèi)者
bin/kafka-console-consumer.sh --bootstrap-server 192.168.81.145:9092 --topic test --from-beginning
消費(fèi)者會(huì)獲取到生產(chǎn)者輸入的幾行消息
————————————————
版權(quán)聲明:本文為CSDN博主「洪岐」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/whq12789/article/details/103123372

?

4.整合

接下來,將logstash拷貝出一份改名logstash2
logstash目錄的配置修改為:
vi config/logstash.conf
input {
? tcp {
? ? # 這里其實(shí)把logstash作為服務(wù),開啟9250端口接收logback發(fā)出的消息
? ? host => "0.0.0.0" port => 9250 mode => "server" tags => ["tags"] codec => json_lines
? }
}

output {
? kafka {
? ? ? ? ? bootstrap_servers => "192.168.81.145:9092,192.168.81.145:9093,192.168.81.145:9094" ? ?# kafka 集群主機(jī)
? ? ? ? ? topic_id => "web-log" ? ? ? ? # 主題名稱,會(huì)自動(dòng)創(chuàng)建
? ? ? ? ? #compression_type => "snappy" ?# 壓縮方式
? ? ? ? ? codec => json ?#注意這里向kafka輸出日志為json格式
? ? ? ? }
}

logstash2目錄的配置修改:
vi config/logstash.conf
? ? input {
? ? ? ?kafka {
? ? ? ? ?bootstrap_servers => "192.168.81.145:9092,192.168.81.145:9093,192.168.81.145:9094" ? ?# kafka 集群主機(jī)
? ? ? ? ?topics_pattern => "web-log"
? ? ? ? ?consumer_threads => 5
? ? ? ? ?decorate_events => true
? ? ? ? ?auto_offset_reset => "latest"
? ? ? ? ?group_id => "logstash"
? ? ? ? ?codec => json ? #從kafka中直接取json格式日志
? ? ? ? }
? ? }

? ? output {
? ? ? ? elasticsearch {
? ? ? ? ? ?hosts => ["192.168.81.145:9200"]
? ? ? ? ? ?index => "sc-%{+YYYY.MM.dd}"
? ? ? ? }
? ? }

接下來kill掉logstash,然后兩個(gè)目錄下分別執(zhí)行
nohup bin/logstash -f config/logstash.conf > service.out&
啟動(dòng)兩個(gè)logstash服務(wù)

啟動(dòng)測(cè)試的java程序后
bin/kafka-console-consumer.sh --bootstrap-server 192.168.81.145:9092 --topic web-log
這個(gè)就能接收到第一個(gè)logstash輸入的json日志

kibana中也可以看到elasticsearch中“sc-日期”的索引數(shù)據(jù)了。

?

配置過程中參見了
https://www.elastic.co/guide/en/logstash/current/index.html
展開Input plugins和Output plugins有相應(yīng)的配置說明。

總結(jié)

以上是生活随笔為你收集整理的ELK+Kafka部署的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。