🧱 一、部署思路:
两个职场部署2套ELK系统,希望收集到的日志是一模一样,大致架构如下图。
🧱 二、具体实施步骤:
1、浦东职场的ELK之前已经部署完成,部署步骤可以参考:
2、浦西职场ELK部署步骤如下:
创建 ELK 项目结构步骤
✅ 1. 创建项目主目录
打开终端或命令行工具,运行:
mkdir -p elk-server
cd elk-server
✅ 2. 创建 docker-compose.yml
文件
在 elk-server/
目录下创建文件:
sudo touch docker-compose.yml
然后编辑它(使用你喜欢的编辑器,如 VS Code、vim、nano):
sudo vim docker-compose.yml
粘贴以下内容进去:
version: '3.7'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.4.3
container_name: elasticsearch
restart: unless-stopped
environment:
- node.name=elasticsearch
- discovery.type=single-node
- xpack.security.enabled=true
- ELASTIC_PASSWORD=修改为自己设置的密码
- bootstrap.memory_lock=true
- ES_JAVA_OPTS=-Xms1g -Xmx1g
ports:
- "9200:9200"
- "9300:9300"
volumes:
- esdata:/usr/share/elasticsearch/data
ulimits:
memlock:
soft: -1
hard: -1
networks:
- elk
kibana:
image: docker.elastic.co/kibana/kibana:8.4.3
container_name: kibana
restart: unless-stopped
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- ELASTICSEARCH_SERVICEACCOUNTTOKEN=修改为服务账号令牌
ports:
- "5601:5601"
depends_on:
- elasticsearch
networks:
- elk
volumes:
esdata:
networks:
elk:
driver: bridge
备注:Kibana 创建服务账号令牌可参考之前的ELK部署文档,此次省略
✅ 3.使用kibana里面的Dev Tools 创建了 logstash_user 用户和角色
注意:2套ELK系统共用的Logstash,所以此次浦西ELK创建的账号和密码和浦东ELK是一模一样的,你也可以单独创建一个不同的用户和角色
🛠️ 正确做法:使用自定义 Logstash 用户
你可以通过 Kibana Dev Tools 创建一个专用的低权限用户来供 Logstash 使用:
✅ 第一步:创建角色(logstash_writer)
POST /_security/role/logstash_writer
{
"cluster": ["monitor"],
"indices": [
{
"names": ["*"],
"privileges": ["write", "create_index"]
}
]
}
✅ 第二步:创建用户(logstash_user)
POST /_security/user/logstash_user
{
"password": "logstash_pass_999999",
"roles": ["logstash_writer"]
}
你可以把这个过程在 Kibana → Dev Tools 中直接复制粘贴执行,也可以通过 REST API 或 curl 发起。
✅ 4.修改浦东logstash.conf
在 OUTPUT 部分加入第二个 Elasticsearch 输出目标,实现日志复制写入两个 ELK 系统。
✅ 修改建议:双写输出到两个 Elasticsearch 实例
你只需要在每个 elasticsearch
输出块中复制一份配置,并将 hosts
改为第二个目标地址(例如 http://elasticsearch2:9200
),其他参数保持一致。
🧩 修改后的 OUTPUT 部分如下:
output {
# 群晖日志输出 → 写入两个 Elasticsearch
if [event.module] == "synology" {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "synology-new-logs-%{+YYYY.MM.dd}"
user => "logstash_user"
password => "logstash_pass_999999"
}
elasticsearch {
hosts => ["http://elasticsearch2:9200"]
index => "synology-new-logs-%{+YYYY.MM.dd}"
user => "logstash_user"
password => "logstash_pass_999999"
}
}
# Beats 日志输出 → 写入两个 Elasticsearch
else if [type] == "beats" {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "%{[@metadata][host]}-%{[@metadata][env]}-%{[event][module]}-logs-%{+YYYY.MM.dd}"
user => "logstash_user"
password => "logstash_pass_999999"
}
elasticsearch {
hosts => ["http://elasticsearch2:9200"]
index => "%{[@metadata][host]}-%{[@metadata][env]}-%{[event][module]}-logs-%{+YYYY.MM.dd}"
user => "logstash_user"
password => "logstash_pass_999999"
}
}
}
🚀5. 最后步骤
- 保存logstash.conf配置文件
- 重启 Logstash:
sudo systemctl restart logstash
- 验证两个 Elasticsearch 是否都收到日志:
curl http://elasticsearch:9200/_cat/indices
curl http://elasticsearch2:9200/_cat/indices