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 ""