利用docker-compose安装elk
以下是使用 Docker-Compose 部署 ELK(Elasticsearch、Logstash 和 Kibana)的 YAML 文件示例:
1、准备工作
docker-compose.yml
主要注意ELASTICSEARCH_URL和ELASTICSEARCH_HOSTS不要使用127.0.0.1或者localhost可能kibana访问不到,其中es和logstash需要挂载两个配置文件也在下方。需要kibana中文版的话配置
I18N_LOCALE: zh-CN,一般environment指代容器环境变量使用大写。
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.15.1
container_name: elasticsearch
environment:
- discovery.type=single-node
ports:
- 9200:9200
volumes:
- esdata:/usr/share/elasticsearch/data
- ./elasticsearch.yml://usr/share/elasticsearch/config/elasticsearch.yml
logstash:
image: docker.elastic.co/logstash/logstash:7.15.1
container_name: logstash
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
ports:
- 5044:5044
depends_on:
- elasticsearch
kibana:
image: docker.elastic.co/kibana/kibana:7.15.1
container_name: kibana
ports:
- 5601:5601
environment:
ELASTICSEARCH_URL: http://172.16.0.143:9200/
ELASTICSEARCH_HOSTS: http://172.16.0.143:9200/
I18N_LOCALE: zh-CN
volumes:
esdata:
driver: local
在上述 YAML 文件中,我们定义了三个服务:Elasticsearch、Logstash 和 Kibana。每个服务都有自己的镜像、容器名称、端口映射和环境变量等。
具体来说,我们使用 docker.elastic.co
中的官方镜像,版本号为 7.15.1
。我们将 Elasticsearch 的 discovery.type
设置为 single-node
,以便在单节点模式下运行。我们将 Elasticsearch 的 9200
端口映射到主机上,以便我们可以通过浏览器访问 Elasticsearch 的 API。
我们将 Logstash 的 ./logstash.conf
配置文件挂载到容器中,并将 Logstash 的 5044
端口映射到主机上,以便其他服务可以将数据发送到 Logstash 中进行处理。
我们将 Kibana 的 5601
端口映射到主机上,以便我们可以通过浏览器访问 Kibana 界面。我们还将 Kibana 的 ELASTICSEARCH_URL
和 ELASTICSEARCH_HOSTS
设置为 Elasticsearch 的地址和端口,以便 Kibana 可以连接到 Elasticsearch。
最后,我们定义了一个名为 esdata
的本地卷,用于存储 Elasticsearch 数据。
elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
xpack.security.http.ssl.enabled: false
logstash.conf
input {
stdin {}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "my_index"
}
}
2、运行容器
docker-compose up -d --build //启动服务
docker-compose stop //关闭服务
docker logs -f kibana //查看容器运行状态 排查问题
es:127.0.0.1:9200
kibana:127.0.0.1:5601
logstash:127.0.0.1:5044