🧱 一、部署思路:

两个职场部署2套ELK系统,希望收集到的日志是一模一样,大致架构如下图。

🧱 二、具体实施步骤:

1、浦东职场的ELK之前已经部署完成,部署步骤可以参考:

https://yan-jian.com/%E9%83%A8%E7%BD%B2ELK%E6%97%A5%E5%BF%97%E7%B3%BB%E7%BB%9F-%E5%AF%86%E7%A0%81%E8%AE%BF%E9%97%AE.html

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. 最后步骤

  1. 保存logstash.conf配置文件
  2. 重启 Logstash:
sudo systemctl restart logstash
  1. 验证两个 Elasticsearch 是否都收到日志:
curl http://elasticsearch:9200/_cat/indices
curl http://elasticsearch2:9200/_cat/indices
Copyright © https://yan-jian.com 2023 all right reserved更新时间: 2025-08-22 17:19:01

results matching ""

    No results matching ""