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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ELK+Kafka部署

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ELK+Kafka部署 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1.背景

2.ELK的配置

2.1.下載

2.2.關閉防火墻

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寫入的壓力過大導致中間過程堆積,采用Logstash——Kafka——Logstash——ElasticSearch的方案,由Kafka緩沖一下數據壓力。

2.ELK的配置

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

2.1.下載


官網下載Elasticsearch、Logstash、Kibana

https://www.elastic.co/

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

我下載的都是7.1.1版本,最好統一版本

(注意,這幾個都是試用版,過一段時間會過期,如果需要長期使用,得下載文末的oss版本)

?

2.2.關閉防火墻


systemctl stop firewalld

systemctl disable firewalld

?

2.3.安裝elasticsearch


在 Linux 環境中,elasticsearch 不允許以 root 權限來運行。

如果以 root 身份運行 elasticsearch,會提示這樣的錯誤:

can not run elasticsearch as root

解決方法:使用非 root 權限賬號運行 elasticsearch

# 創建用戶組

groupadd elk

# 創建新用戶,-g elk 設置其用戶組為 elk,-p elk 設置其密碼為 elk

useradd elk -g elk -p elk

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

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

# 切換賬號

su elk

?

解壓elasticsearch

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

運行

cd elasticsearch-7.1.1

bin/elasticsearch

測試

curl http://localhost:9200

?

默認只能用localhost訪問,如需開啟外部訪問,需修改配置

vi config/elasticsearch.yml

去掉network.host的注釋并修改為本機ip

network.host: 0.0.0.0

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

?

?

此時啟動可能會報錯

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會報錯

[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?表示虛擬內存大小,它是一個內核參數。elasticsearch 默認要求?vm.max_map_count?不低于 262144。

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

解決方法:

你可以執行以下命令,設置?vm.max_map_count?,但是重啟后又會恢復為原值。

sysctl -w vm.max_map_count=262144

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

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

?

nofile 不低于 65536

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

解決方法:

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

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

?

reboot重啟后即可正常啟動

?

后臺啟動

nohup bin/elasticsearch > service.out&

?

跟蹤后臺啟動的輸出

tail -f service.out

?

看進程

[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

運行

cd logstash-7.1.1

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

或后臺啟動

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

?

如果沒有JAVA_HOME,需設置JAVA_HOME,注意使用root用戶

vi /etc/profile

添加如下內容

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

配置立即生效執行

source /etc/profile

?

看進程

$ 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" #需修改才能從其他機器訪問

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

?

運行

bin/kibana

或后臺啟動

nohup bin/kibana > service.out&

?

訪問地址

http://localhost:5601

?

看進程

[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

添加如下內容

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

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按需調整

<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
? ? <!--
? ? destination 是 logstash 服務的 host:port,
? ? 相當于和 logstash 建立了管道,將日志數據定向傳輸到 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>
此時啟動java程序,如果啟動成功,日志就進入es了

?

日志查看

進入kibana web頁面

點擊左側Discover按鈕,會自動進入創建索引,創建索引logstash-*

?

點擊下一步Next step

Time Filter field name選擇@timestamp,點擊Create index pattern按鈕等待創建索引成功

?

此時再次點擊左側Discover按鈕,進入熟悉的索引查詢頁面了

?

區分應用

實際應用過程中,多個app日志混在一起,需要增加額外入庫字段進行區分,此時修改java程序的logback.xml,添加customFields配置節即可。

<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
? ? <!--
? ? destination 是 logstash 服務的 host:port,
? ? 相當于和 logstash 建立了管道,將日志數據定向傳輸到 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>
?? ?<!-- 項目的appid -->
?? ?<property name="APP_ID" value="whqtest"/>
?? ?………………
?? ?<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
?? ? ? ?<!--
?? ? ? ?destination 是 logstash 服務的 host:port,
?? ? ? ?相當于和 logstash 建立了管道,將日志數據定向傳輸到 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版本


一段時間后啟動kibana報錯

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超時

vi es的目錄/config/jvm.options

增大-Xms和-Xmx到2g

?

增大es連接超時時間

vi config/kibana.yml

elasticsearch.requestTimeout: 90000

?

連接es返回錯誤:master_not_discovered_exception

es服務器修改

vi /etc/hostname 設置機器名為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"]
————————————————
版權聲明:本文為CSDN博主「洪岐」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/whq12789/article/details/92832436


3.Kafka的配置

3.1.zookeeper搭建

參見《centos7 zookeeper3.5.6單點部署》

官網下載

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
源碼包(下載這個比較麻煩,需要安裝maven,然后mvn package進行編譯)
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
#該目錄為數據保存目錄
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

連接測試

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

3.2.kafka搭建

參見《centos7 kafka2.3.1單點部署》

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,否則非本機連接調用第二次會異常
log.dirs=/data/kafka-logs

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

停止服務
bin/kafka-server-stop.sh?

測試

啟動生產者
bin/kafka-console-producer.sh --broker-list 192.168.81.145:9092 --topic test
然后隨便輸入幾行消息

啟動消費者
bin/kafka-console-consumer.sh --bootstrap-server 192.168.81.145:9092 --topic test --from-beginning
消費者會獲取到生產者輸入的幾行消息
————————————————
版權聲明:本文為CSDN博主「洪岐」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/whq12789/article/details/103123372

?

4.整合

接下來,將logstash拷貝出一份改名logstash2
logstash目錄的配置修改為:
vi config/logstash.conf
input {
? tcp {
? ? # 這里其實把logstash作為服務,開啟9250端口接收logback發出的消息
? ? 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 集群主機
? ? ? ? ? topic_id => "web-log" ? ? ? ? # 主題名稱,會自動創建
? ? ? ? ? #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 集群主機
? ? ? ? ?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,然后兩個目錄下分別執行
nohup bin/logstash -f config/logstash.conf > service.out&
啟動兩個logstash服務

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

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

?

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。