概述
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/
设置安全访问
设置预置用户elastic、kibana_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方式)