在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程序远程消费者客户端订阅