【问题标题】:Run Elasticsearch, Logstash and Kibana with 'docker-compose' command使用 'docker-compose' 命令运行 Elasticsearch、Logstash 和 Kibana
【发布时间】:2017-04-08 06:37:18
【问题描述】:

我将使用 docker-compose 命令运行 ELK,并使用以下 docker-compose.yml 文件:

---
version: '2'
services:
  kibana:
    image: docker.elastic.co/kibana/kibana
    links:
      - elasticsearch
    ports:
      - 5601:5601

  kibana:
    image: docker.elastic.co/logstash/logstash
    links:
      - elasticsearch
    ports:
      - 5044:5044

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch
    cap_add:
      - IPC_LOCK
    volumes:
      - esdata1:/usr/share/elasticsearch/data
    ports:
      - 9200:9200

volumes:
  esdata1:
    driver: local

但我有几个问题:

1) 我指定了links 参数来链接容器,但我还应该指定networks 参数吗?它是干什么用的?

2) 如何更改 Elasticsearch、Logstash 和 Kibana 的默认用户名和密码?

3) Elasticsearch 配置参数存储在elasticsearch.yml 文件中,但我在哪里可以找到该文件? 是否可以直接在docker-compose.yml文件中定义path.datapath.logscluster.namenode.name等Elasticsearch参数?

【问题讨论】:

标签: elasticsearch docker logstash docker-compose kibana


【解决方案1】:

1) links 参数允许通过其服务名称或别名访问链接容器。这对于两个服务都加入的任何 docker 网络都是可能的。

如果您未在服务的 networks 键下指定任何网络,则服务将加入 docker 默认网络(我认为是网桥)。

如果您希望您的服务加入(数量)特定的 docker 网络,您只需指定网络名称。然后,您可以再次在顶级 networks 键下定义(允许 docker-compose 创建网络)或在 docker compose 之外根据docker network create

进行准备

2) 您使用的图像是使用 X-Pack 构建的,此处描述了如何更改密码 X-Pack security 示例取自文档:

curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/elastic/_password' -H "Content-Type: application/json" -d '{
  "password" : "elasticpassword"
}'

curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/kibana/_password' -H "Content-Type: application/json" -d '{
  "password" : "kibanapassword"
}'

curl -XPUT -u elastic 'localhost:9200/_xpack/security/user/logstash_system/_password' -H "Content-Type: application/json" -d '{
  "password" : "logstashpassword"
}'

如果您不想将其作为手动后期设置步骤,则必须创建自己的派生 docker 映像。

3) 您将使用 elasticsearch.yml 配置的配置参数可以使用Elastic search docker documentation 中描述的环境变量进行设置。来自文档的示例:

...
services:
  elasticsearch1:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.3.0
    container_name: elasticsearch1
    environment:
      - cluster.name=docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
...

【讨论】:

  • 顺便说一句。我刚刚找到时间和心情来实际尝试该设置。我必须指定图像版本 5.3.0 才能提取图像。此外,我必须在我的机器上设置最大虚拟内存以满足弹性搜索服务。 sudo sysctl -w vm.max_map_count=262144。享受吧!
  • 感谢您的澄清。当您启动所有 3 个应用程序时,您是否能够通过 http://localhost:5601/ 访问 Kibana 界面?我正在使用相同的 docker-compose.yml 文件,但我无法访问 Kibana。我收到以下错误:kibana_1 | {"type":"log","@timestamp":"2017-04-08T20:05:12Z","tags":["warning","elasticsearch","admin"],"pid":7, "message":"没有生活联系"} kibana_1 | {"type":"log","@timestamp":"2017-04-08T20:05:12Z","tags":["warning","elasticsearch","admin"],"pid":7, "message":"无法恢复连接:elasticsearch:9200"}
  • 这是来自 Elasticsearch 日志:[2017-04-08T20:05:27,517][INFO][o.e.n.Node] [hJd3Yol] 开始 [2017-04-08T20:05:39,047][ERROR] [o.e.x.m.c.i.IndicesStatsCollector] [hJd3Yol] 收集器 [indices-stats-collector] 未能收集数据 org.elasticsearch.cluster.block.ClusterBlockException:被阻止:[SERVICE_UNAVAILABLE/1/状态未恢复/初始化];在 org.elasticsearch.cluster.block.ClusterBlocks.globalBlockedException(ClusterBlocks.java:165) ~[elasticsearch-5.3.0.jar:5.3.0]
  • 是的,我做到了。但是我必须在您的撰写文件中进行两项更正:第一,添加图像版本,例如docker.elastic.co/kibana/kibana:5.3.0(谢天谢地,这三个版本都相同)。第二,您将 kibanalogstash 服务都命名为“kibana”,因此我将 logstash 服务名称更改为“logstash”。然后我必须进行上面提到的虚拟内存设置。但是您的弹性搜索服务似乎是从您发布的日志中运行的,所以这对您来说可能不再是问题了。
  • 当我根据此处elastic.co/guide/en/x-pack/5.3/security-getting-started.html 的文档说明更改所有三个应用程序的密码时发生这种情况,在我将密码更改回默认值changeme 后,一切都开始正常工作。你知道为什么会这样吗?
猜你喜欢
  • 2022-10-24
  • 1970-01-01
  • 1970-01-01
  • 2022-09-05
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多