欢迎光临
我们一直在努力

Docker容器化高可用架构部署方案(十八)

17-EFK-Zabbix部署脚本

本文档包含EFK日志收集和Zabbix监控系统的完整部署脚本,作为13-快速部署.md的补充。


EFK部署脚本

在所有节点执行EFK部署脚本。

Node1 EFK部署

#!/bin/bash
# Node1 EFK部署脚本

set -e

echo "============================================"
echo "       Node1 EFK 部署脚本"
echo "============================================"

# 1. 创建目录
echo "[1/3] 创建配置目录…"
mkdir -p /opt/cluster-deploy/{config/fluentd,logs/elasticsearch}

# 2. 创建Fluentd配置
echo "[2/3] 创建Fluentd配置…"
cat > /opt/cluster-deploy/config/fluentd/fluentd-node1.conf << 'EOF'
<source>
@type tail
path /var/lib/docker/containers/*/*-json.log
pos_file /var/log/fluentd-containers.log.pos
tag docker.*
read_from_head true
<parse>
  @type json
  time_type float
  time_format %Y-%m-%dT%H:%M:%S.%NZ
</parse>
</source>

<filter docker.**>
@type record_transformer
<record>
  node_name Node1
</record>
</filter>

<match docker.**>
@type elasticsearch
host 172.20.5.21
port 9200
logstash_format true
logstash_prefix docker
logstash_dateformat %Y.%m.%d
flush_interval 10s
buffer_type file
buffer_path /var/log/fluentd-buffers/elasticsearch.buffer
buffer_chunk_limit 2M
buffer_queue_limit 256
</match>
EOF

# 3. 创建Docker Compose文件
echo "[3/3] 创建docker-compose-efk-node1.yml…"
cat > /opt/cluster-deploy/docker-compose-efk-node1.yml << 'EOF'
services:
fluentd:
  image: fluent/fluentd:v1.16-1
  container_name: fluentd
  networks:
    manage-net:
      ipv4_address: 172.20.5.11
  volumes:
     – ./config/fluentd/fluentd-node1.conf:/fluentd/etc/fluent.conf:ro
     – /var/lib/docker/containers:/var/lib/docker/containers:ro
     – fluentd-buffer:/var/log/fluentd-buffers
  environment:
     – FLUENTD_CONF=fluent.conf
   restart: unless-stopped
  logging:
    driver: none

networks:
manage-net:
  external: true

volumes:
fluentd-buffer:
EOF

# 4. 启动服务
echo ""
echo "启动Fluentd…"
cd /opt/cluster-deploy
docker compose -f docker-compose-efk-node1.yml up -d

echo ""
echo "Node1 EFK部署完成!"

Node2 EFK部署

#!/bin/bash
# Node2 EFK部署脚本

set -e

echo "============================================"
echo "       Node2 EFK 部署脚本"
echo "============================================"

# 1. 创建目录
mkdir -p /opt/cluster-deploy/{config/fluentd,logs/elasticsearch}

# 2. 创建Fluentd配置
cat > /opt/cluster-deploy/config/fluentd/fluentd-node2.conf << 'EOF'
<source>
@type tail
path /var/lib/docker/containers/*/*-json.log
pos_file /var/log/fluentd-containers.log.pos
tag docker.*
read_from_head true
<parse>
  @type json
  time_type float
  time_format %Y-%m-%dT%H:%M:%S.%NZ
</parse>
</source>

<filter docker.**>
@type record_transformer
<record>
  node_name Node2
</record>
</filter>

<match docker.**>
@type elasticsearch
host 172.20.5.21
port 9200
logstash_format true
logstash_prefix docker
logstash_dateformat %Y.%m.%d
flush_interval 10s
buffer_type file
buffer_path /var/log/fluentd-buffers/elasticsearch.buffer
buffer_chunk_limit 2M
buffer_queue_limit 256
</match>
EOF

# 3. 创建Docker Compose文件
cat > /opt/cluster-deploy/docker-compose-efk-node2.yml << 'EOF'
services:
fluentd:
  image: fluent/fluentd:v1.16-1
  container_name: fluentd
  networks:
    manage-net:
      ipv4_address: 172.20.5.12
  volumes:
     – ./config/fluentd/fluentd-node2.conf:/fluentd/etc/fluent.conf:ro
     – /var/lib/docker/containers:/var/lib/docker/containers:ro
     – fluentd-buffer:/var/log/fluentd-buffers
  environment:
     – FLUENTD_CONF=fluent.conf
   restart: unless-stopped
  logging:
    driver: none

networks:
manage-net:
  external: true

volumes:
fluentd-buffer:
EOF

# 4. 启动服务
cd /opt/cluster-deploy
docker compose -f docker-compose-efk-node2.yml up -d

echo "Node2 EFK部署完成!"

Node3 EFK部署

#!/bin/bash
# Node3 EFK部署脚本

set -e

echo "============================================"
echo "       Node3 EFK 部署脚本"
echo "============================================"

# 1. 创建目录
mkdir -p /opt/cluster-deploy/{config/{elasticsearch,fluentd,kibana},logs/elasticsearch}

# 2. 创建Elasticsearch配置
cat > /opt/cluster-deploy/config/elasticsearch/elasticsearch.yml << 'EOF'
cluster.name: docker-cluster
node.name: elasticsearch-node1
discovery.type: single-node
network.host: 0.0.0.0
http.port: 9200
xpack.security.enabled: false
http.cors.enabled: true
http.cors.allow-origin: "*"
EOF

# 3. 创建Fluentd配置
cat > /opt/cluster-deploy/config/fluentd/fluentd-node3.conf << 'EOF'
<source>
@type tail
path /var/lib/docker/containers/*/*-json.log
pos_file /var/log/fluentd-containers.log.pos
tag docker.*
read_from_head true
<parse>
  @type json
  time_type float
  time_format %Y-%m-%dT%H:%M:%S.%NZ
</parse>
</source>

<filter docker.**>
@type record_transformer
<record>
  node_name Node3
</record>
</filter>

<match docker.**>
@type elasticsearch
host 172.20.5.21
port 9200
logstash_format true
logstash_prefix docker
logstash_dateformat %Y.%m.%d
flush_interval 10s
buffer_type file
buffer_path /var/log/fluentd-buffers/elasticsearch.buffer
buffer_chunk_limit 2M
buffer_queue_limit 256
</match>
EOF

# 4. 创建Docker Compose文件
cat > /opt/cluster-deploy/docker-compose-efk-node3.yml << 'EOF'
services:
fluentd:
  image: fluent/fluentd:v1.16-1
  container_name: fluentd
  networks:
    manage-net:
      ipv4_address: 172.20.5.22
  volumes:
     – ./config/fluentd/fluentd-node3.conf:/fluentd/etc/fluent.conf:ro
     – /var/lib/docker/containers:/var/lib/docker/containers:ro
     – fluentd-buffer:/var/log/fluentd-buffers
  environment:
     – FLUENTD_CONF=fluent.conf
   restart: unless-stopped
  logging:
    driver: none

elasticsearch:
  image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
  container_name: elasticsearch
  hostname: elasticsearch
  networks:
    manage-net:
      ipv4_address: 172.20.5.21
  environment:
     – discovery.type=single-node
     – ES_JAVA_OPTS=-Xms512m -Xmx512m
     – xpack.security.enabled=false
  volumes:
     – elasticsearch-data:/usr/share/elasticsearch/data
     – ./config/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
  ulimits:
    memlock:
      soft: -1
      hard: -1
   restart: unless-stopped

kibana:
  image: docker.elastic.co/kibana/kibana:8.11.0
  container_name: kibana
  networks:
    manage-net:
      ipv4_address: 172.20.5.23
  environment:
     – ELASTICSEARCH_HOSTS=http://172.20.5.21:9200
  ports:
     – "5601:5601"
  depends_on:
     – elasticsearch
   restart: unless-stopped

networks:
manage-net:
  external: true

volumes:
elasticsearch-data:
fluentd-buffer:
EOF

# 5. 启动服务
cd /opt/cluster-deploy
docker compose -f docker-compose-efk-node3.yml up -d

echo "Node3 EFK部署完成!"
echo "Kibana访问地址: http://192.168.64.130:5601"


Zabbix部署脚本

在所有节点执行Zabbix部署脚本。

Node1 Zabbix Agent部署

#!/bin/bash
# Node1 Zabbix Agent部署

set -e

echo "============================================"
echo "       Node1 Zabbix Agent 部署"
echo "============================================"

# 1. 创建目录
mkdir -p /opt/cluster-deploy/config/zabbix

# 2. 创建Agent配置
cat > /opt/cluster-deploy/config/zabbix/zabbix_agentd-node1.conf << 'EOF'
Server=172.20.5.31
ServerActive=172.20.5.31
Hostname=Node1-Agent
BufferSend=5
BufferSize=100
Timeout=10
LogType=console
EOF

# 3. 创建Docker Compose文件
cat > /opt/cluster-deploy/docker-compose-zabbix-node1.yml << 'EOF'
services:
zabbix-agent:
  image: zabbix/zabbix-agent2:alpine-7.0-latest
  container_name: zabbix-agent
  networks:
    manage-net:
      ipv4_address: 172.20.5.41
  volumes:
     – ./config/zabbix/zabbix_agentd-node1.conf:/etc/zabbix/zabbix_agent2.conf:ro
     – /var/run/docker.sock:/var/run/docker.sock:ro
  environment:
     – ZABBIX_SERVER_HOST=172.20.5.31
   restart: unless-stopped

networks:
manage-net:
  external: true
EOF

# 4. 启动服务
cd /opt/cluster-deploy
docker compose -f docker-compose-zabbix-node1.yml up -d

echo "Node1 Zabbix Agent部署完成!"

Node2 Zabbix Agent部署

#!/bin/bash
# Node2 Zabbix Agent部署

set -e

echo "============================================"
echo "       Node2 Zabbix Agent 部署"
echo "============================================"

# 1. 创建目录
mkdir -p /opt/cluster-deploy/config/zabbix

# 2. 创建Agent配置
cat > /opt/cluster-deploy/config/zabbix/zabbix_agentd-node2.conf << 'EOF'
Server=172.20.5.31
ServerActive=172.20.5.31
Hostname=Node2-Agent
BufferSend=5
BufferSize=100
Timeout=10
LogType=console
EOF

# 3. 创建Docker Compose文件
cat > /opt/cluster-deploy/docker-compose-zabbix-node2.yml << 'EOF'
services:
zabbix-agent:
  image: zabbix/zabbix-agent2:alpine-7.0-latest
  container_name: zabbix-agent
  networks:
    manage-net:
      ipv4_address: 172.20.5.42
  volumes:
     – ./config/zabbix/zabbix_agentd-node2.conf:/etc/zabbix/zabbix_agent2.conf:ro
     – /var/run/docker.sock:/var/run/docker.sock:ro
  environment:
     – ZABBIX_SERVER_HOST=172.20.5.31
   restart: unless-stopped

networks:
manage-net:
  external: true
EOF

# 4. 启动服务
cd /opt/cluster-deploy
docker compose -f docker-compose-zabbix-node2.yml up -d

echo "Node2 Zabbix Agent部署完成!"

Node3 Zabbix Server + Web + Agent部署

#!/bin/bash
# Node3 Zabbix Server + Web + Agent部署

set -e

echo "============================================"
echo "       Node3 Zabbix 部署脚本"
echo "============================================"

# 1. 创建目录
mkdir -p /opt/cluster-deploy/config/{zabbix,zabbix-mysql}

# 2. 创建Zabbix MySQL配置
cat > /opt/cluster-deploy/config/zabbix-mysql/my.cnf << 'EOF'
[mysqld]
server-id = 100
bind-address = 0.0.0.0
port = 3306
character-set-server = utf8mb4
max_connections = 200
innodb_buffer_pool_size = 256M
EOF

# 3. 创建Zabbix Server配置
cat > /opt/cluster-deploy/config/zabbix/zabbix_server.conf << 'EOF'
LogType=console
EOF

# 4. 创建Agent配置
cat > /opt/cluster-deploy/config/zabbix/zabbix_agentd-node3.conf << 'EOF'
Server=172.20.5.31
ServerActive=172.20.5.31
Hostname=Node3-Agent
BufferSend=5
BufferSize=100
Timeout=10
LogType=console
EOF

# 5. 创建Docker Compose文件
cat > /opt/cluster-deploy/docker-compose-zabbix-node3.yml << 'EOF'
services:
zabbix-agent:
  image: zabbix/zabbix-agent2:alpine-7.0-latest
  container_name: zabbix-agent
  networks:
    manage-net:
      ipv4_address: 172.20.5.43
  volumes:
     – ./config/zabbix/zabbix_agentd-node3.conf:/etc/zabbix/zabbix_agent2.conf:ro
     – /var/run/docker.sock:/var/run/docker.sock:ro
  environment:
     – ZABBIX_SERVER_HOST=172.20.5.31
   restart: unless-stopped

zabbix-mysql:
  image: mysql:8.0
  container_name: zabbix-mysql
  hostname: zabbix-mysql
  networks:
    manage-net:
      ipv4_address: 172.20.5.33
  volumes:
     – zabbix-mysql-data:/var/lib/mysql
     – ./config/zabbix-mysql/my.cnf:/etc/mysql/conf.d/my.cnf:ro
  environment:
     – MYSQL_ROOT_PASSWORD=RootStr0ng!Pass
     – MYSQL_DATABASE=zabbix
     – MYSQL_USER=zabbix
     – MYSQL_PASSWORD=ZabbixStr0ng!Pass
  command:
     – –default-authentication-plugin=mysql_native_password
   restart: unless-stopped

zabbix-server:
  image: zabbix/zabbix-server-mysql:alpine-7.0-latest
  container_name: zabbix-server
  hostname: zabbix-server
  networks:
    manage-net:
      ipv4_address: 172.20.5.31
  volumes:
     – zabbix-server-data:/var/lib/zabbix
  environment:
     – DB_SERVER_HOST=zabbix-mysql
     – MYSQL_DATABASE=zabbix
     – MYSQL_USER=zabbix
     – MYSQL_PASSWORD=ZabbixStr0ng!Pass
     – ZBX_CACHESIZE=128M
  ports:
     – "10051:10051"
  depends_on:
     – zabbix-mysql
   restart: unless-stopped

zabbix-web:
  image: zabbix/zabbix-web-apache-mysql:alpine-7.0-latest
  container_name: zabbix-web
  hostname: zabbix-web
  networks:
    manage-net:
      ipv4_address: 172.20.5.32
  volumes:
     – zabbix-web-data:/etc/zabbix/web
  environment:
     – DB_SERVER_HOST=zabbix-mysql
     – MYSQL_DATABASE=zabbix
     – MYSQL_USER=zabbix
     – MYSQL_PASSWORD=ZabbixStr0ng!Pass
     – ZBX_SERVER_HOST=172.20.5.31
     – PHP_TZ=Asia/Shanghai
  ports:
     – "8080:8080"
  depends_on:
     – zabbix-mysql
     – zabbix-server
   restart: unless-stopped

networks:
manage-net:
  external: true

volumes:
zabbix-mysql-data:
zabbix-server-data:
zabbix-web-data:
EOF

# 6. 启动服务
cd /opt/cluster-deploy
docker compose -f docker-compose-zabbix-node3.yml up -d

echo ""
echo "============================================"
echo "       Zabbix 部署完成!"
echo "============================================"
echo ""
echo "Zabbix Web访问地址: http://192.168.64.130:8080"
echo "默认用户名: Admin"
echo "默认密码: zabbix"
echo ""
echo "请在Web界面添加主机监控:"
echo " – Node1: 172.20.5.41"
echo " – Node2: 172.20.5.42"
echo " – Node3: 172.20.5.43"


一键部署完整脚本

将以下内容保存为 deploy-all.sh,在Node3上执行:

#!/bin/bash
# 完整集群部署脚本

set -e

echo "============================================"
echo "   Docker容器化集群 完整部署脚本"
echo "============================================"

# 等待用户确认
echo ""
read -p "是否开始部署?(y/n): " confirm
if [ "$confirm" != "y" ]; then
   echo "部署已取消"
   exit 0
fi

echo ""
echo "步骤1: 等待业务服务部署完成…"
echo "请确保已在各节点执行基础服务部署"
read -p "基础服务已部署完成?(y/n): " base_ready
if [ "$base_ready" != "y" ]; then
   echo "请先完成基础服务部署"
   exit 1
fi

echo ""
echo "步骤2: 部署EFK日志收集系统…"
echo " – 请在各节点执行 EFK 部署脚本"

echo ""
echo "步骤3: 部署Zabbix监控系统…"
echo " – 请在各节点执行 Zabbix 部署脚本"

echo ""
echo "============================================"
echo "   部署完成!访问地址汇总"
echo "============================================"
echo ""
echo "| 服务 | 地址 | 凭据 |"
echo "|——|——|——|"
echo "| Web应用 | http://172.20.1.100 | – |"
echo "| Kibana | http://192.168.64.130:5601 | – |"
echo "| Zabbix | http://192.168.64.130:8080 | Admin/zabbix |"
echo ""


赞(0)
未经允许不得转载:171主机测评 » Docker容器化高可用架构部署方案(十八)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址