yum -y install epel-release
yum -y install python-pip
// 更新pip
pip install --upgrade pip
// 安裝docker-compoes,如已安裝,跳過
pip install docker-compose
// 下載elasticsearch,logstash,kibana, 自es5開始,一般三個軟件的版本都保持一致了。
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.1.1 && docker pull docker.elastic.co/logstash/logstash:7.1.1 && docker pull docker.elastic.co/kibana/kibana:7.1.1
配置
- 我們建立一個目錄,用來存放yml文件(docker-compose啟動一組編排過的容器時使用)
mkdir -p /root/elk
cd /root/elk
vim docker-compose.yml
- docker-compose.yml文件內容如下
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.1.1
container_name: elasticsearch7.1.1
environment:
- node.name=node-41 # 節點名稱,集群模式下每個節點名稱唯一
- network.publish_host=172.168.50.41 # 用於集群內各機器間通信,對外使用,其他機器訪問本機器的es服務,一般為本機宿主機IP
- network.host=0.0.0.0 # 設置綁定的ip地址,可以是ipv4或ipv6的,默認為0.0.0.0,即本機
- discovery.seed_hosts=172.168.50.40,172.168.50.240,172.168.50.41 # es7.0之后新增的寫法,寫入候選主節點的設備地址,在開啟服務后,如果master掛了,哪些可以被投票選為主節點
- cluster.initial_master_nodes=172.168.50.40,172.168.50.240,172.168.50.41 # es7.0之后新增的配置,初始化一個新的集群時需要此配置來選舉master
- cluster.name=es-cluster # 集群名稱,相同名稱為一個集群, 三個es節點須一致
# - http.cors.enabled=true # 是否支持跨域,是:true // 這里設置不起作用,但是可以將此文件映射到宿主機進行修改,然后重啟,解決跨域
# - http.cors.allow-origin="*" # 表示支持所有域名 // 這里設置不起作用,但是可以將此文件映射到宿主機進行修改,然后重啟,解決跨域
- bootstrap.memory_lock=true # 內存交換的選項,官網建議為true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 設置內存,如內存不足,可以嘗試調低點
#- discovery.type=single-node # 是否啟用單節點模式,如果啟用,上面這些環境配置,只保留兩個內存的選項即可。
ulimits: # 棧內存的上限
memlock:
soft: -1 # 不限制
hard: -1 # 不限制
volumes:
- esdata:/usr/share/elasticsearch/data
- /root/elk/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
hostname: elasticsearch
restart: always
ports:
- 9200:9200
- 9300:9300
kibana:
image: docker.elastic.co/kibana/kibana:7.1.1
container_name: kibana7.1.1
environment:
- elasticsearch.hosts=http://elasticsearch:9200
hostname: kibana
depends_on:
- elasticsearch
restart: always
ports:
- 5601:5601
logstash:
image: docker.elastic.co/logstash/logstash:7.1.1
container_name: logstash7.1.1
hostname: logstash
restart: always
depends_on:
- elasticsearch
ports:
- 9600:9600
- 5044:5044
volumes:
esdata:
driver: local
- 在當前目錄,啟動elk
docker-compose up -d
-
出現done表示成功,docker-compose logs 查看日志(分別輸出elk三個服務的日志)執行docker ps可以看到三個服務的運行狀態
-
在瀏覽器輸入http://IP:5601/
-
可以使用head監控es
// 拉取鏡像
docker pull mobz/elasticsearch-head:5
// 啟動
docker run -d --name es_admin -p 9100:9100 mobz/elasticsearch-head:5
-
在瀏覽器輸入http://IP:9100
-
注意,IP地址要使用你es所在服務器的地址,然后點擊連接,出現類似的顯示說明,沒問題,我這里是三個節點,你應該只有一個節點。
-
如果點擊連接沒有反應,F12查看network是403,或者200,但是console中提示跨域,那么你需要設置跨域,下面說兩個方法
方法1: 直接進入容器中,使用 docker exec -it 容器ID /bin/bash ,進入后修改/usr/share/elasticsearch/config/elasticsearch.yml文件,
加入以下兩行:
http.cors.enabled: true
http.cors.allow-origin: "*"
方法2:將容器中的es配置文件映射到宿主機,然后加入以上兩行配置重啟即可,映射文件就不說了,如果不會,參考 https://www.cnblogs.com/lz0925/p/12011026.html