在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/

docker 安装es 设置jvm大写和密码 docker elk7_kafka

 

 

如果在访问后发现了以下报错server is not ready yet

 可以进入到docker内部利用curl判断 在kibana下能否curl http://192.168.1.5:9200 返回内容,如果不能,设置下防火墙,设置方式如下

nmcli connection modify docker0 connection.zone trusted
 
systemctl stop NetworkManager.service
 
firewall-cmd --permanent --zone=trusted --change-interface=docker0
 
systemctl start NetworkManager.service
 
nmcli connection modify docker0 connection.zone trusted
 
systemctl 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程序远程消费者客户端订阅

 

docker 安装es 设置jvm大写和密码 docker elk7_elasticsearch_02