Elastic Stack部署(Docker方式)

301 阅读3分钟

概述

Elastic Stack 是指 Elastic 的一组产品的使用组成。
在Elastic Stack 中,Elasticsearch 是一个分布式搜索与分析引擎,是 Elastic Stack 的核心;Logstash 和 Beats 进行收集、转换数据,然后将这些数据存储到 Elasticsearch;Kibana 则提供交互式、可视化操作,以更好地分析数据,Kibana 也可以用于管理和监控 Elastic Stack。
本次 Elastic Stack 基于Docker 容器方式部署,其中包括:

  • Elasticsearch 7.17
  • Logstash 7.17
  • Kibana 7.17
  • Filebeat 7.17

网络配置

创建 Docker 网络,将用于 Elastic Stack 通信。

docker network create elastic

部署Elasticsearch

部署Elasticsearch

映射9200:9200端口,用于 Elasticsearch 的 RESTful 接口,使用HTTP协议
映射9300:9300端口,用于 Elasticsearch 集群内节点间通讯,使用TCP协议
指定discovery.type=single-node以单节点部署
指定xpack.security.enabled=true开启安全访问
指定ES_JAVA_OPTS,配置JVM参数
加入网络elastic

docker run -d \
  -p 9200:9200 \
  -p 9300:9300 \
  -e "discovery.type=single-node" \
  -e "xpack.security.enabled=true" \
  -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
  --net elastic \
  --name elasticsearch \
  elasticsearch:7.17.0

测试Elasticsearch

curl -X GET http://localhost:9200/

设置安全访问

设置预置用户elastickibana_system等等的访问密码。
用户elastic,一个预置的超级用户;
用户kibana_system用于 Kibana 向 Elasticsearch 服务连接认证与通信;
用户logstash_system用于 Logstash 向 Elasticsearch 存储监控信息;
用户beats_system用于 Beats 向 Elasticsearch 存储监控信息。
1.自动化生成预置用户密码

docker exec -it elasticsearch elasticsearch-setup-passwords auto

2.输出示例

Changed password for user apm_system
PASSWORD apm_system = rHaJ9AoJ0Z58zzKgXQz2

Changed password for user kibana_system
PASSWORD kibana_system = 91hXpP6lUoTRF9Kp2g4A

Changed password for user kibana
PASSWORD kibana = 91hXpP6lUoTRF9Kp2g4A

Changed password for user logstash_system
PASSWORD logstash_system = CGOexi6ZHy2kPLpdcnbM

Changed password for user beats_system
PASSWORD beats_system = qoCmNRj84MmPbyKXMQx7

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = v9u6fSH76Pm5Bk0Vq508

Changed password for user elastic
PASSWORD elastic = VXfErRmrhksPJfs8LzMa

部署Logstash

Pipeline配置

宿主机新建配置:~/data/elastic/logstash/pipeline/logstash.conf
使用input.beats从 Elastic Beat 接收事件,需预先配置好 Beat 端
指定output.elasticsearch.hosts将事件输出到 Elasticsearch

input {
  beats {
    port => 5044
    codec => "json"
  }
}

output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
  }
  stdout {
    codec => rubydebug
  }
}

部署Logstash

映射5044:5044端口,用于 pipeline 中的input
挂载pipeline配置目录,之中的所有文件会被作为 pipeline 配置
加入网络elastic

docker run -d \
  -p 5044:5044 \
  -v ~/data/elastic/logstash/pipeline:/usr/share/logstash/pipeline \
  --net elastic \
  --name logstash \
  logstash:7.17.0
  
# --restart=always --log-driver json-file \
# --log-opt max-size=100m --net elk --log-opt max-file=2

部署Kibana

部署Kibana

docker run -d \
  -p 5601:5601 \
  -e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200" \
  -e "ELASTICSEARCH_USERNAME=kibana_system" \
  --net elastic \
  --name kibana \
  kibana:7.17.0

访问Kibana

浏览器访问:http://localhost:5601

设置安全访问

### 创建keystore
docker exec kibana kibana-keystore create

### 设置kibana_system用户密码
docker exec -it kibana kibana-keystore add elasticsearch.password

### 重启kibana
docker restart kibana

部署Filebeat

Filebeat配置

下载官方示例配置filebeat.docker.yml

https://raw.githubusercontent.com/elastic/beats/7.17/deploy/docker/filebeat.docker.yml

示例配置内容如下:

filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

filebeat.autodiscover:
  providers:
    - type: docker
      hints.enabled: true

processors:
- add_cloud_metadata: ~

output.elasticsearch:
  hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
  username: '${ELASTICSEARCH_USERNAME:}'
  password: '${ELASTICSEARCH_PASSWORD:}'

修改配置如下:

filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

filebeat.autodiscover:
  providers:
    - type: docker
      hints.enabled: true

processors:
- add_cloud_metadata: ~

filebeat.inputs:
- type: log
  enabled: true
  paths:
  - /data/logs/*.log

output.logstash:
  hosts: logstash:5044

#output.elasticsearch:
#  hosts: ["elasticsearch:9200"]

部署Filebeat

指定--user=root以root用户运行
挂载配置文件filebeat.docker.yml
加入网络elastic
指定setup.dashboards.enabled=true启用 Filebeat dashboard
指定setup.kibana.host连接到Kibana服务

docker run -d \
  --name=filebeat \
  --user=root \
  --volume="/Users/wei/data/logs/:/data/logs" \
  --volume="/Users/wei/data/elastic/filebeat/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \
  --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
  --volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
  --net elastic \
  docker.elastic.co/beats/filebeat:7.17.0 \
  filebeat -e -strict.perms=false \
  -E setup.dashboards.enabled=true \
  -E setup.kibana.host=kibana:5601

参考

[1] Installation and Upgrade Guide [7.17]
[2] Elasticsearch安装及配置(Docker方式)
[3] Logstash安装及配置(Docker方式)
[4] Kibana安装及配置(Docker方式)
[5] Filebeat安装及配置(Docker方式)