在linux下首先在目錄準備文件
首先說明,我的電腦宿主機的IP是192.168.1.5
為es準備文件
mkdir -p /opt/elk7/es
cd /opt/elk7/es
#創建對應的文件夾 數據 / 日志 / 配置
mkdir conf data logs
#授權
chmod 777 -R conf data logs
然后進入到/opt/elk7/es/conf下
vim elasticsearch.yml
以下是elasticsearch.yml 的內容
cluster.name: "docker-cluster"
network.host: 0.0.0.0
# 訪問ID限定,0.0.0.0為不限制,生產環境請設置為固定IP
transport.host: 0.0.0.0
# elasticsearch節點名稱
#node.name: node-1
# elasticsearch節點信息
#cluster.initial_master_nodes: ["node-1"]
# 下面的配置是關閉跨域驗證
http.cors.enabled: true
http.cors.allow-origin: "*"
?
為kibana準備宿主機文件
mkdir -p /opt/elk7/kibana
cd /opt/elk7/kibana
#創建對應的文件夾 數據 / 日志 / 配置
mkdir conf data logs
#授權
chmod 777 -R conf data logs
cd logs
#創建日志文件
touch kibana.log
#授權
chmod 777 kibana.log
然后進入到 /opt/elk7/kibana/conf
vim kibana.yml
以下是kibana.yml內容
elasticsearch.hosts: ['http://192.168.1.5:9200']
#發給es的查詢記錄 需要日志等級是verbose=true
elasticsearch.logQueries: true
##連接es的超時時間 單位毫秒
elasticsearch.pingTimeout: 30000
elasticsearch.requestTimeout: 30000
##是否只能使用server.host訪問服務
elasticsearch.preserveHost: true
##首頁對應的appid
kibana.defaultAppId: "home"
kibana.index: '.kibana'
##存儲日志的文件設置
logging.dest: /usr/share/kibana/logs/kibana.log
logging.json: true
##是否只輸出錯誤日志信息
logging.quiet: false
logging.rotate:enabled: true#日志文件最大大小everyBytes: 10485760#保留的日志文件個數keepFiles: 7
logging.timezone: UTC
logging.verbose: true
monitoring.kibana.collection.enabled: true
xpack.monitoring.collection.enabled: true
#存儲持久化數據的位置
path.data: /usr/share/kibana/data
#訪問kibana的地址和端口配置 一般使用可訪問的服務器地址即可
server.host: "0.0.0.0"
#端口默認5601
server.port: 5601
server.name: "kibana"
#配置頁面語言
i18n.locale: zh-CN
以下是Docker啟動命令
#es
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 --privileged=true --log-driver=journald -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xmx8g -Xms8g" -v /opt/elk7/es/data:/usr/share/elasticsearch/data -v /opt/elk7/es/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml --user=root --restart=on-failure -d elasticsearch:7.8.1#kibana
docker run -it --name kibana --link elasticsearch -p 5601:5601 \
--privileged=true \
-v /opt/elk7/kibana/logs/kibana.log:/usr/share/kibana/logs/kibana.log \
-v /opt/elk7/kibana/data:/usr/share/kibana/data \
-v /opt/elk7/kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml \
-d kibana:7.8.1
然后訪問地址:http://192.168.1.5:5601/
?
?
如果在訪問后發現了以下報錯server is not ready yet
?可以進入到docker內部利用curl判斷 在kibana下能否curl http://192.168.1.5:9200 返回內容,如果不能,設置下防火墻,設置方式如下
nmcli connection modify docker0 connection.zone trustedsystemctl stop NetworkManager.servicefirewall-cmd --permanent --zone=trusted --change-interface=docker0systemctl start NetworkManager.servicenmcli connection modify docker0 connection.zone trustedsystemctl restart docker.service
?
?
下面開始研究 logstash,由于直接從spring boot到logstash可能會造成瓶頸,所以一般采用kafka作為消息隊列來承接日志信息
安裝zookeeper
docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper
安裝kafka
docker run -d --name kafka -p 9092:9092 --link zookeeper -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.5:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka
–link 用于容器直接的互通。
-e KAFKA_BROKER_ID=0 一個 kafka節點 就是一個 broker。一個集群由多個 broker 組成。一個 broker可以容納多個 topic
-e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 配置zookeeper管理kafka的路徑
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.5:9092 把kafka的地址端口注冊給zookeeper,若遠程訪問要改成外網IP,千萬注意是外網IP,很多文章只說是宿主機IP, 演示例子上寫的是內網IP,很容易被誤導
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 配置kafka的監聽端口
-v /etc/localtime:/etc/localtime 容器時間同步虛擬機的時間?
?
測試
創建topic
進入kafka容器
docker exec -it kafka /bin/bash
?
進入目錄
?cd opt/kafka_2.12-2.4.0/
創建測試topic
./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 ?--zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic test-topic
生產者發布
./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test-topic
本地消費者訂閱
?
?./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 ?--topic test-topic
java程序遠程消費者客戶端訂閱
?
?