nginx + spring cloud + redis + mysql + ELFK 部署

一、环境规划

节点名称 IP 服务
mysql 172.16.0.100 mysql+filebeat
nginx 172.16.0.10 nginx+filebeat+kibana
java 172.16.0.11 openjdk+filebeat
redis 172.16.0.12 redis
elk 172.16.0.13 ES+logstash

注意:mysql 节点和 redis 节点 IP 不能变(jar包设置的ip),其它节点 IP 可变。

二、安装配置 mysql

2.1 上传 rpm 压缩包到 mysql 节点

mysql5720_rpms.tar.gzyl_app.sql上传到 mysql 节点(IP:172.16.0.100)。

2.2 解压安装 rpm 包

bash

复制代码
# 解压压缩包
tar zxvf mysql5720_rpms.tar.gz
# 切换到存放所有MySQL及依赖RPM包的文件夹
cd mysql5720_rpms
# yum自动识别当前目录下所有.rpm文件并处理依赖关系安装
yum localinstall -y *.rpm

2.3 配置 mysql

  1. 启动 mysql 服务

    bash

    复制代码
    systemctl start mysqld
  2. 修改初始密码

    bash

    复制代码
    mysql -uroot -p$(grep "password" /var/log/mysqld.log | awk '{print $NF}') --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'Admin@123';"
  3. 修改配置文件

    bash

    复制代码
    vim /etc/my.cnf

    [mysqld]模块下,保持原有配置(如 datadir、socket 等)不变,新增以下内容:

    ini

    复制代码
    # 降低密码强度策略(仅检查长度)
    validate_password_policy=LOW
    # 最小密码长度设为6位
    validate_password_length=6
    # 指定错误日志文件路径
    log_error = /var/log/mysql/mysql_error.log
    # 开启慢查询日志
    slow_query_log = 1
    # 慢查询日志文件路径
    slow_query_log_file = /var/log/mysql/mysql_slow.log
    # 超过2秒认为是慢查询(默认10s)
    long_query_time = 2
    # 记录未使用索引的查询(可选)
    log_queries_not_using_indexes = ON
  4. 创建日志目录并授权

    bash

    复制代码
    # 创建日志目录
    sudo mkdir -p /var/log/mysql
    # 设置目录所有者为mysql用户
    sudo chown -R mysql:mysql /var/log/mysql
  5. 重启 mysqld 服务

    bash

    复制代码
    systemctl restart mysqld

2.4 修改密码

微服务访问 Mysql 的用户为 root,密码设置为 123456:

bash

复制代码
mysql -uroot -pAdmin@123 -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';"

2.5 导入 sql 文件

bash

复制代码
mysql -uroot -p123456 < /opt/yl_app.sql
验证导入结果

bash

复制代码
# 登录mysql
mysql -uroot -p123456
# 查看数据库列表
show databases;
# 使用yl_app数据库
use yl_app;
# 查看数据表列表
show tables;

三、安装配置 redis

3.1 上传 redis 压缩包

将 redis 压缩包(如redis-5.0.7.tar.gz)上传到 redis 节点(IP:172.16.0.12)。

3.2 安装 redis

bash

复制代码
# 解压压缩包到/opt目录
tar zxvf redis-5.0.7.tar.gz -C /opt/
# 切换到redis解压目录
cd /opt/redis-5.0.7/
# 编译安装到指定目录
make && make PREFIX=/usr/local/redis install
# 执行脚本设置Redis服务配置
cd /opt/redis-5.0.7/utils
./install_server.sh  # 执行过程中一直回车,需手动修改可执行文件路径为/usr/local/redis/bin/redis-server
# 创建符号链接,便于系统识别redis命令
ln -s /usr/local/redis/bin/* /usr/local/bin/

3.3 修改 redis 配置文件

bash

复制代码
vim /etc/redis/6379.conf

修改以下配置项:

  • 第 70 行:bind 0.0.0.0(允许所有地址访问)
  • 第 89 行:protected-mode no(关闭保护模式)

重启 redis 服务:

bash

复制代码
/etc/init.d/redis_6379 restart

四、配置 java 节点

4.1 配置 java 环境

bash

复制代码
# 安装openjdk
yum install -y java
# 验证java版本
java -version

4.2 上传 jar 包

将微服务 jar 包(yl_application-1.0-SNAPSHOT.jar)上传到 java 节点(IP:172.16.0.11)的 /opt 目录。

4.3 运行微服务

bash

复制代码
# 设置JVM内存参数(起始内存512MB,最大内存2GB),后台运行jar包
nohup java -Xms512m -Xmx2g -jar /opt/yl_application-1.0-SNAPSHOT.jar &
# 查看日志(日志会生成在当前目录的logs文件夹下)
tail -f /opt/logs/yulin-2025-09-30.0.log

五、配置 nginx 节点

5.1 上传压缩包

将 nginx 压缩包(nginx-1.20.2.tar.gz)和前端压缩包(dist.zip)上传到 nginx 节点(IP:172.16.0.10)的 /opt 目录。

5.2 安装 nginx

  1. 安装依赖包

    bash

    复制代码
    yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel unzip
  2. 创建运行用户和组

    bash

    复制代码
    useradd -M -s /sbin/nologin nginx
  3. 编译安装 nginx

    bash

    复制代码
    # 切换到/opt目录
    cd /opt
    # 解压nginx压缩包
    tar zxvf nginx-1.20.2.tar.gz -C /opt/
    # 切换到nginx解压目录
    cd nginx-1.20.2/
    # 配置编译参数
    ./configure \
    --prefix=/usr/local/nginx \
    --user=nginx \
    --group=nginx \
    --with-http_stub_status_module \
    --with-http_ssl_module
    # 编译安装
    make && make install
  4. 配置系统命令和服务

    bash

    复制代码
    # 创建符号链接,便于系统识别nginx命令
    ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
    # 添加nginx系统服务
    cat > /lib/systemd/system/nginx.service <<EOF
    [Unit]
    Description=nginx
    After=network.target
    
    [Service]
    Type=forking
    PIDFile=/usr/local/nginx/logs/nginx.pid
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    EOF
    # 设置服务文件权限
    chmod 754 /lib/systemd/system/nginx.service
    # 重载系统服务,启动nginx并设置开机自启
    systemctl daemon-reload
    systemctl start nginx.service
    systemctl enable nginx.service

5.3 部署前端项目

bash

复制代码
# 解压前端压缩包到nginx的html目录
unzip /opt/dist.zip -d /usr/local/nginx/html

5.4 修改 nginx 配置文件

  1. 备份原有配置文件

    bash

    复制代码
    cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
  2. 修改配置文件

    bash

    复制代码
    vim /usr/local/nginx/conf/nginx.conf

    修改server模块配置如下:

    nginx

    复制代码
    server {
        listen 80;
        server_name 172.16.0.10;
        charset utf-8;
        index index.html index.htm;
        root /usr/local/nginx/html/dist;
    
        location /ylApp {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;
            # 微服务端口为8090,代理到java节点
            proxy_pass http://172.16.0.11:8090;
            proxy_redirect off;
        }
    
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }
  3. 重启 nginx 服务

    bash

    复制代码
    systemctl restart nginx

5.5 测试项目部署成功

在浏览器中访问http://172.16.0.10,会跳转到设备管理平台登录页面(172.16.0.10/#/common/login/login),输入账号密码(如 admin/123456)可登录系统,查看首页、设备管理、用户管理等功能模块。

六、ELK 搭建

6.1 环境规划

6.1.1 节点信息
节点名称 IP 服务
elk 172.16.0.13 ES+logstash
mysql 172.16.0.100 mysql+filebeat
nginx 172.16.0.10 nginx+filebeat+kibana
java 172.16.0.11 openjdk+filebeat
6.1.2 filebeat 端口规划
节点名称 IP 端口
mysql 172.16.0.100 6000
nginx 172.16.0.10 6001
java 172.16.0.11 6002

6.2 在 elk 节点安装 ES 和 logstash

6.2.1 安装 ES(Elasticsearch)
  1. 安装 java 环境

    bash

    复制代码
    yum -y install java
    java -version
  2. 上传并安装 ES rpm 包

    bash

    复制代码
    # 上传elasticsearch-6.6.1.rpm到/opt目录
    cd /opt
    rpm -ivh elasticsearch-6.6.1.rpm
    # 加载系统服务并设置开机自启
    systemctl daemon-reload
    systemctl enable elasticsearch.service
  3. 修改 ES 主配置文件

    bash

    复制代码
    # 备份原有配置文件
    cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
    # 编辑配置文件
    vim /etc/elasticsearch/elasticsearch.yml

    修改以下配置项(取消注释并调整值):

    • 第 23 行:node.name: node1(指定节点名字)
    • 第 33 行:path.data: /data/elk_data(指定数据存放路径)
    • 第 37 行:path.logs: /var/log/elasticsearch(指定日志存放路径)
    • 第 43 行:bootstrap.memory_lock: false(启动时不锁定内存)
    • 第 55 行:network.host: 0.0.0.0(设置监听地址,允许所有地址访问)
    • 第 59 行:http.port: 9200(ES 服务默认监听端口)
  4. 创建数据目录并授权

    bash

    复制代码
    mkdir -p /data/elk_data
    chown elasticsearch:elasticsearch /data/elk_data/
  5. 启动 ES 并验证

    bash

    复制代码
    # 启动ES服务(启动较慢,需等待片刻)
    systemctl start elasticsearch.service
    # 查看9200端口是否监听
    netstat -antp | grep 9200
    # 查看节点信息(浏览器访问或用curl命令)
    curl 172.16.0.13:9200

    成功启动后,curl 命令会返回 ES 节点信息,包括节点名称、集群名称、版本等。

6.2.2 安装 logstash
  1. 上传并安装 logstash rpm 包

    bash

    复制代码
    # 上传logstash-6.6.1.rpm到/opt目录
    cd /opt
    rpm -ivh logstash-6.6.1.rpm
    # 启动logstash并设置开机自启
    systemctl start logstash.service
    systemctl enable logstash.service
    # 创建符号链接,便于系统识别logstash命令
    ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
  2. 测试 logstash

    bash

    复制代码
    # 输入采用标准输入,输出采用标准输出(类似管道)
    logstash -e 'input { stdin{} } output { stdout{} }'

    输入www.baidu.com并回车,会输出包含host@timestampmessage等字段的日志信息,说明 logstash 测试正常。

6.3 nginx 节点安装 kibana

  1. 上传并安装 kibana rpm 包

    bash

    复制代码
    # 上传kibana-6.6.1-x86_64.rpm到/opt目录
    cd /opt
    rpm -ivh kibana-6.6.1-x86_64.rpm
  2. 修改 kibana 配置文件

    bash

    复制代码
    vim /etc/kibana/kibana.yml

    修改以下配置项(取消注释并调整值):

    • 第 2 行:server.port: 5601(kibana 服务默认监听端口)
    • 第 7 行:server.host: "0.0.0.0"(设置监听地址,允许所有地址访问)
    • 第 28 行:elasticsearch.hosts: ["http://172.16.0.13:9200"](设置与 ES 连接的地址和端口)
    • 第 37 行:kibana.index: ".kibana"(在 ES 中添加.kibana 索引)
  3. 启动 kibana 并验证

    bash

    复制代码
    # 启动kibana服务并设置开机自启
    systemctl start kibana.service
    systemctl enable kibana.service
    # 查看5601端口是否监听
    netstat -natp | grep 5601
    # 浏览器访问验证
    http://172.16.0.10:5601

    成功启动后,浏览器会显示 kibana 的登录 / 首页界面。

6.4 mysql 节点配置 filebeat

mysql 节点需收集的日志:

  • 错误日志:/var/log/mysql/mysql_error.log
  • 慢查询日志:/var/log/mysql/mysql_slow.log
6.4.1 安装 filebeat

bash

复制代码
# 上传filebeat-6.6.1-x86_64.rpm到/opt目录
cd /opt
rpm -ivh filebeat-6.6.1-x86_64.rpm
6.4.2 修改 filebeat 配置文件

bash

复制代码
# 备份原有配置文件
cd /etc/filebeat
cp filebeat.yml filebeat.yml.bak
# 编辑配置文件
vim filebeat.yml

配置内容如下:

yaml

复制代码
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/mysql/mysql_error.log
  fields:
    service_name: mysql_error_log
    log_type: mysql_error
  fields_under_root: true
- type: log
  enabled: true
  paths:
    - /var/log/mysql/mysql_slow.log
  fields:
    service_name: mysql_slow_log
    log_type: mysql_slow
  fields_under_root: true

# 注释掉Elasticsearch output部分
#--------------Elasticsearch output-------------------
#output.elasticsearch:
#  hosts: ["localhost:9200"]

# 配置Logstash output
----------------Logstash output---------------------
output.logstash:
  hosts: ["172.16.0.13:6000"]
6.4.3 在 elk 节点配置 logstash 对应管道
  1. 创建 logstash 配置文件

    bash

    复制代码
    cd /etc/logstash/conf.d
    vim mysql_log.conf

    配置内容如下:

    ruby

    复制代码
    input {
      beats {
        port => "6000"
      }
    }
    
    output {
      elasticsearch {
        hosts => ["172.16.0.13:9200"]
        index => "%{service_name}-%{+YYYY.MM.dd}"
      }
      stdout {
        codec => rubydebug
      }
    }
  2. 修改 logstash 管道配置文件

    bash

    复制代码
    vim /etc/logstash/pipelines.yml

    注释默认配置,添加 mysql_log 管道:

    yaml

    复制代码
    #- pipeline.id: main 
    #  path.config: "/etc/logstash/conf.d/*.conf"
    - pipeline.id: mysql_log
      path.config: "/etc/logstash/conf.d/mysql_log.conf"
  3. 启动 logstash

    bash

    复制代码
    logstash -f /etc/logstash/conf.d/mysql_log.conf
6.4.4 启动 filebeat

bash

复制代码
filebeat -e -c /etc/filebeat/filebeat.yml

6.5 nginx 节点配置 filebeat

nginx 节点需收集的日志:

  • 访问日志:/usr/local/nginx/logs/access.log
  • 错误日志:/usr/local/nginx/logs/error.log
6.5.1 安装 filebeat

同 6.4.1 步骤(上传并安装filebeat-6.6.1-x86_64.rpm)。

6.5.2 修改 filebeat 配置文件

bash

复制代码
cd /etc/filebeat
cp filebeat.yml filebeat.yml.bak
vim filebeat.yml

配置内容如下:

yaml

复制代码
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/nginx/logs/access.log
  fields:
    service_name: nginx_access_log
    log_type: nginx_access
  fields_under_root: true
- type: log
  enabled: true
  paths:
    - /usr/local/nginx/logs/error.log
  fields:
    service_name: nginx_error_log
    log_type: nginx_error
  fields_under_root: true

# 注释Elasticsearch output部分
#--------------Elasticsearch output-------------------
#output.elasticsearch:
#  hosts: ["localhost:9200"]

# 配置Logstash output
----------------Logstash output---------------------
output.logstash:
  hosts: ["172.16.0.13:6001"]
6.5.3 在 elk 节点配置 logstash 对应管道
  1. 创建 logstash 配置文件

    bash

    复制代码
    cd /etc/logstash/conf.d
    vim nginx_log.conf

    配置内容如下:

    ruby

    复制代码
    input {
      beats {
        port => "6001"
      }
    }
    
    output {
      elasticsearch {
        hosts => ["172.16.0.13:9200"]
        index => "%{service_name}-%{+YYYY.MM.dd}"
      }
      stdout {
        codec => rubydebug
      }
    }
  2. 修改 logstash 管道配置文件

    bash

    复制代码
    vim /etc/logstash/pipelines.yml

    添加 nginx_log 管道:

    yaml

    复制代码
    - pipeline.id: mysql_log
      path.config: "/etc/logstash/conf.d/mysql_log.conf"
    - pipeline.id: nginx_log
      path.config: "/etc/logstash/conf.d/nginx_log.conf"
  3. 启动 logstash

    bash

    复制代码
    logstash -f /etc/logstash/conf.d/nginx_log.conf
6.5.4 启动 filebeat

bash

复制代码
filebeat -e -c /etc/filebeat/filebeat.yml

6.6 java 节点配置 filebeat

java 节点需收集的日志:/opt/logs/yulin-*.log(微服务日志)。

6.6.1 安装 filebeat

同 6.4.1 步骤(上传并安装filebeat-6.6.1-x86_64.rpm)。

6.6.2 修改 filebeat 配置文件

bash

复制代码
cd /etc/filebeat
cp filebeat.yml filebeat.yml.bak
vim filebeat.yml

配置内容如下:

yaml

复制代码
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /opt/logs/yulin-*.log
  fields:
    service_name: yulin_log
    log_type: java_business
  fields_under_root: true

# 注释Elasticsearch output部分
#--------------Elasticsearch output-------------------
#output.elasticsearch:
#  hosts: ["localhost:9200"]

# 配置Logstash output
----------------Logstash output---------------------
output.logstash:
  hosts: ["172.16.0.13:6002"]
6.6.3 在 elk 节点配置 logstash 对应管道
  1. 创建 logstash 配置文件

    bash

    复制代码
    cd /etc/logstash/conf.d
    vim java_log.conf

    配置内容如下:

    ruby

    复制代码
    input {
      beats {
        port => "6002"
      }
    }
    
    output {
      elasticsearch {
        hosts => ["172.16.0.13:9200"]
        index => "%{service_name}-%{+YYYY.MM.dd}"
      }
      stdout {
        codec => rubydebug
      }
    }
  2. 修改 logstash 管道配置文件

    bash

    复制代码
    vim /etc/logstash/pipelines.yml

    添加 java_log 管道:

    yaml

    复制代码
    - pipeline.id: mysql_log
      path.config: "/etc/logstash/conf.d/mysql_log.conf"
    - pipeline.id: nginx_log
      path.config: "/etc/logstash/conf.d/nginx_log.conf"
    - pipeline.id: java_log
      path.config: "/etc/logstash/conf.d/java_log.conf"
  3. 启动 logstash

    bash

    复制代码
    logstash -f /etc/logstash/conf.d/java_log.conf
6.6.4 启动 filebeat

bash

复制代码
filebeat -e -c /etc/filebeat/filebeat.yml

6.7 日志收集展示

在浏览器中访问http://172.16.0.10:5601进入 kibana 界面,通过Index Management可查看已收集的日志索引,包括:

  • mysql_error_log-2025.09.30(mysql 错误日志索引)
  • mysql_slow_log-2025.09.30(mysql 慢查询日志索引)
  • nginx_access_log-2025.09.30(nginx 访问日志索引)
  • nginx_error_log-2025.09.30(nginx 错误日志索引)
  • yulin_log-2025.09.30(java 微服务日志索引)

可通过 kibana 的Discover 模块查询具体日志内容,Dashboard模块创建日志可视化图表。

相关推荐
阿萨德528号5 小时前
Redis 分布式锁进阶:跨语言场景下的锁兼容性与一致性保障
数据库·redis·分布式
秋雨雁南飞8 小时前
c# 使用Memory实现Redis入队出队功能
redis·c#
星光一影9 小时前
悬赏任务平台/拉新地推系统源码
redis·mysql·小程序·php·uniapp·html5
-Xie-10 小时前
Redis(二)——数据类型二
数据库·redis·缓存
null_null99911 小时前
宝塔nginx http转https代理
nginx·http·https
User_芊芊君子12 小时前
【LeetCode 经典题解】:队列与栈的双向模拟——从原理到代码详解
linux·redis·leetcode
JH30731 天前
《Redis 经典应用场景(一):缓存、分布式锁与限流》
redis·分布式·缓存
苦学编程的谢1 天前
Redis_4_常见命令(完)+认识数据类型和编码方式
数据库·redis·缓存
小坏讲微服务1 天前
五分钟使用 Docker-compose搭建 Redis 8.0 中间件
运维·redis·docker·中间件·容器·kubernetes·k8s
JanelSirry1 天前
Redis服务器的的内存是多大
服务器·redis·github