当前位置: 首页 > news >正文

nginx+springboot+redis+mysql+elfk

文章目录

  • 设备管理平台部署全流程:从环境搭建到ELK日志集成(附避坑指南)
    • 一、先搞懂环境规划:这些“红线”不能碰
      • 【必看避坑点】
    • 二、核心服务部署:一步一验证,避免返工
      • 2.1 MySQL部署:从安装到数据导入(重点是密码和日志)
      • 2.2 Redis部署:关键是允许远程访问
        • 步骤1:上传并安装
        • 步骤2:修改配置(允许远程访问)
      • 2.3 Java节点:启动微服务(注意内存配置)
        • 步骤1:安装JDK
        • 步骤2:启动微服务
      • 2.4 Nginx部署:前端访问+反向代理(避坑重点)
        • 步骤1:安装依赖和Nginx
        • 步骤2:配置Nginx系统服务
        • 步骤3:部署前端文件
        • 步骤4:修改Nginx配置(反向代理到微服务)
        • 步骤5:测试访问
    • 三、ELK日志体系:从收集到可视化(最复杂但最有用)
      • 3.1 先明确ELK相关规划
        • 3.1.1 节点服务分工
        • 3.1.2 Filebeat端口规划(避免冲突)
      • 3.2 ELK节点(172.16.0.13):部署ES和Logstash
        • 3.2.1 安装ES(Elasticsearch)
        • 3.2.2 安装Logstash
      • 3.3 Nginx节点部署Kibana
      • 3.4 各节点配置Filebeat(收集日志)
      • 3.5 Logstash配置(处理日志并输出到ES)
      • 3.6 验证日志收集
    • 四、常见问题排查:3个实用技巧
      • 4.1 验证Filebeat是否能连Logstash
      • 4.2 校验Logstash配置语法
      • 4.3 查看Logstash管道日志
    • 五、部署总结

设备管理平台部署全流程:从环境搭建到ELK日志集成(附避坑指南)

最近刚完成一套设备管理平台的部署工作,用到了MySQL、Redis、Nginx、Java微服务和ELK日志体系,过程中踩了不少“雷”——比如文档里隐藏的IP限制、配置冗余、地址写错等问题。今天把完整流程和避坑要点整理出来,希望能帮到同样做运维或项目部署的朋友,少走弯路。

一、先搞懂环境规划:这些“红线”不能碰

部署前先明确节点分工,这是后续所有操作的基础。平台共涉及5个节点,每个节点的服务和核心限制如下:

节点名称IP地址运行服务核心说明
mysql172.16.0.100mysql + filebeatIP不可修改,存业务数据
nginx172.16.0.10nginx + filebeat + kibana前端访问入口+日志收集+可视化
java172.16.0.11openjdk + filebeat微服务运行节点
redis172.16.0.12redisIP不可修改,缓存服务
elk172.16.0.13ES + logstash日志存储和处理(资源要求高)

【必看避坑点】

  1. IP限制:MySQL(172.16.0.100)和Redis(172.16.0.12)的IP绝对不能改!微服务和前端配置里硬编码了这两个地址,改了会直接连接失败。
  2. 防火墙关闭:所有节点必须关闭防火墙和SELinux,命令参考 systemctl stop firewalld && systemctl disable firewalld,否则服务间通信会被拦截。
  3. 资源配置:所有节点最低1核2G,但ELK节点(ES+Logstash)建议给2核4G以上——ES对内存敏感,内存不够会频繁崩溃。
  4. Kibana位置:文档把Kibana装在Nginx节点,而非ELK节点,是因为ES+Logstash已占较多资源,避免单节点压力过大。

二、核心服务部署:一步一验证,避免返工

2.1 MySQL部署:从安装到数据导入(重点是密码和日志)

MySQL是业务核心,需确保数据能正常导入、密码符合微服务要求。

  1. 安装MySQL服务:MySQL编译安装

  2. 修改初始密码(先改强密码,再改微服务用的弱密码):

    # 微服务用的密码(123456,微服务配置里写死了这个密码)
    CREATE USER 'root'@'%' IDENTIFIED BY '123456';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
  3. 配置日志和密码策略,编辑 /etc/my.cnf,新增以下内容(开启慢查询日志):

    #[mysqld]下面添加
    log_error = /var/log/mysql/mysql_error.log  # 错误日志路径
    slow_query_log = ON           # 开启慢查询日志
    slow_query_log_file = /var/log/mysql/mysql_slow.log  # 慢查询日志路径
    long_query_time = 2           # 2秒以上算慢查询
    log_queries_not_using_indexes = ON  # 记录未用索引的查询
    ==================================================================================
    log_error = /usr/local/mysql/mysql_error.log  
    slow_query_log = ON         
    slow_query_log_file =/usr/local/mysql/mysql_slow.log  
    long_query_time = 2          
    log_queries_not_using_indexes = ON# 重启生效
    systemctl restart mysqld
    
  4. 导入业务SQL并验证

    # 导入SQL(确保yl_app.sql在/opt目录)
    mysql -uroot -p123 < /opt/yl_app.sql
    # 验证:登录后查看表是否存在
    mysql -uroot -p123 -e "use yl_app; show tables;"
    

正常会显示23张表(如mv_devices、sys_user、tbl_device_info等),说明MySQL部署成功。

2.2 Redis部署:关键是允许远程访问

Redis用于微服务缓存,默认只允许本地访问,需修改配置开启远程连接。

步骤1:上传并安装
# 上传redis-5.0.7.tar.gz到/opt,解压
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
# 编译安装(需先装gcc:yum install -y gcc)
make && make PREFIX=/usr/local/redis install
# 执行脚本配置服务(一路回车,最后手动改可执行路径)
cd /opt/redis-5.0.7/utils
./install_server.sh
# 提示“Enter the redis-server executable path”时,输入:/usr/local/redis/bin/redis-server
# 创建符号链接,方便调用
ln -s /usr/local/redis/bin/* /usr/local/bin/
步骤2:修改配置(允许远程访问)

编辑 /etc/redis/6379.conf(Redis默认配置文件):

# 第70行:绑定所有地址(默认只绑127.0.0.1)
bind 0.0.0.0
# 第89行:关闭保护模式(否则远程无法连接)
protected-mode no/etc/init.d/redis_6379 restart
netstat -antp|grep redis

2.3 Java节点:启动微服务(注意内存配置)

Java节点运行后端微服务Jar包,需先装JDK,再配置启动参数。
注意:必须先启动MySQL和redis,否则会报错

步骤1:安装JDK
# 用yum装openjdk(版本1.8以上即可)
yum install -y java-1.8.0-openjdk
# 验证:java -version 显示1.8.x即正常
步骤2:启动微服务
  1. yl_application-1.0-SNAPSHOT.jar 传到Java节点的 /opt 目录;
  2. 用nohup后台启动(设置内存:初始512M,最大2G):
    nohup java -Xms512m -Xmx2g -jar yl_application-1.0-SNAPSHOT.jar &
    java -jar yl_application-1.0-SNAPSHOT.jar    #便捷测试,执行情况输出到终端。
    
  3. 查看日志,确认启动成功:
    # 日志在/opt/logs目录,文件名如yulin-2025-09-30.0.log
    tail -f /opt/logs/yulin-2025-09-30.0.log
    
    看到“Started Application in XX seconds”说明微服务启动成功。

2.4 Nginx部署:前端访问+反向代理(避坑重点)

Nginx负责转发前端请求到Java微服务,还需要部署前端静态文件。

步骤1:安装依赖和Nginx
# 装编译依赖
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel unzip
# 创建nginx用户(无登录权限)
useradd -M -s /sbin/nologin nginx
# 上传nginx-1.20.2.tar.gz到/opt,解压编译
cd /opt
tar zxvf nginx-1.20.2.tar.gz -C /opt/
cd nginx-1.20.2/
# 配置编译参数(指定安装路径、用户、启用SSL和状态模块)
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module
# 编译安装
make && make install
# 创建符号链接,方便调用
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
步骤2:配置Nginx系统服务

创建 /lib/systemd/system/nginx.service 文件,方便用systemctl管理:

[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

设置权限并启动:

chmod 754 /lib/systemd/system/nginx.service
systemctl daemon-reload
systemctl start nginx.service
systemctl enable nginx.service  # 开机自启
步骤3:部署前端文件

把前端压缩包 dist.zip 传到Nginx节点的 /opt,解压到Nginx的html目录:

unzip /opt/dist.zip -d /usr/local/nginx/html
步骤4:修改Nginx配置(反向代理到微服务)

先备份原配置,再修改:

cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
vim /usr/local/nginx/conf/nginx.conf

找到 server 块,替换为以下内容(重点是 /ylApp 路径转发):

server {listen 80;server_name 172.16.0.10;  # Nginx节点IPcharset utf-8;index index.html index.htm;root /usr/local/nginx/html/dist;  # 前端文件路径# 反向代理到Java微服务(微服务端口8090)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;proxy_pass http://172.16.0.11:8090;  # Java节点IP+微服务端口(填写自己的微服务也就是jar包地址)proxy_redirect off;}# 错误页面error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}
}
步骤5:测试访问

重启Nginx:systemctl restart nginx,然后用浏览器访问 http://172.16.0.10,能看到登录页(默认账号可能是admin,密码123456,具体看业务配置),说明Nginx部署成功。

三、ELK日志体系:从收集到可视化(最复杂但最有用)

ELK负责收集MySQL、Nginx、Java的日志,方便问题排查。体系分工:

  • Filebeat:在各节点收集日志(MySQL、Nginx、Java节点);
  • Logstash:在ELK节点处理日志(过滤、格式化);
  • ES:存储日志数据;
  • Kibana:可视化查看日志。

3.1 先明确ELK相关规划

3.1.1 节点服务分工
节点名称IP地址日志相关服务
elk172.16.0.13ES(存储)+ Logstash(处理)
mysql172.16.0.100Filebeat(收集MySQL日志)
nginx172.16.0.10Filebeat(收集Nginx日志)+ Kibana(可视化)
java172.16.0.11Filebeat(收集Java日志)
3.1.2 Filebeat端口规划(避免冲突)
节点名称Filebeat输出端口对应Logstash输入端口
mysql60006000
nginx60016001
java60026002

3.2 ELK节点(172.16.0.13):部署ES和Logstash

3.2.1 安装ES(Elasticsearch)
  1. 装JDK(ES依赖Java):yum install -y java-1.8.0-openjdk
  2. 上传 elasticsearch-6.6.1.rpm/opt,安装:
    cd /opt
    rpm -ivh elasticsearch-6.6.1.rpm
    
  3. 修改ES配置(/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行:ES端口(默认9200)
    http.port: 9200
    
  4. 创建数据目录并授权:
    mkdir -p /data/elk_data
    chown elasticsearch:elasticsearch /data/elk_data/
    
  5. 启动ES并验证:
    systemctl enable elasticsearch.service
    systemctl start elasticsearch.service
    # ES启动较慢,等30秒后验证:
    curl http://172.16.0.13:9200
    

看到包含“name: node1”和“version”的JSON输出,说明ES启动成功。一般初次启动需要等待一段时间。

3.2.2 安装Logstash
  1. 上传 logstash-6.6.1.rpm/opt,安装:
    cd /opt
    rpm -ivh logstash-6.6.1.rpm
    systemctl enable logstash.service
    systemctl start logstash.service
    # 创建符号链接
    ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
    
  2. 测试Logstash是否正常:
    logstash -e 'input { stdin{} } output { stdout{} }'
    
    输入 www.baidu.com,能看到包含“message: www.baidu.com”的日志输出,说明Logstash正常。

3.3 Nginx节点部署Kibana

Kibana是ES的可视化工具,装在Nginx节点(172.16.0.10)。

  1. 上传 kibana-6.6.1-x86_64.rpm/opt,安装:
    cd /opt
    rpm -ivh kibana-6.6.1-x86_64.rpm
    
  2. 修改Kibana配置(/etc/kibana/kibana.yml):
    # 2行:Kibana端口(默认5601)
    server.port: 5601
    # 7行:监听所有地址
    server.host: "0.0.0.0"
    # 28行:连接ES的地址
    elasticsearch.hosts: ["http://172.16.0.13:9200"]
    # 37行:ES中的Kibana索引
    kibana.index: ".kibana"
    
  3. 启动Kibana并验证:
    systemctl enable kibana.service
    systemctl start kibana.service
    
    浏览器访问 http://172.16.0.10:5601,能看到Kibana首页,说明部署成功。

3.4 各节点配置Filebeat(收集日志)

Filebeat的作用是“抓日志”,每个节点的配置逻辑类似:指定日志路径→添加字段标识→输出到Logstash。

以MySQL节点(172.16.0.100)为例:

  1. 安装Filebeat:
    # 上传filebeat-6.6.1-x86_64.rpm到/opt
    cd /opt
    rpm -ivh filebeat-6.6.1-x86_64.rpm
    
  2. 修改Filebeat配置(/etc/filebeat/filebeat.yml):
    # 1. 配置日志输入(收集MySQL的错误日志和慢查询日志)
    filebeat.inputs:
    - type: logenabled: truepaths:- /usr/local/mysql/mysql_error.log  # MySQL错误日志路径fields:service_name: mysql_error_log    # 字段标识(用于ES索引名)log_type: mysql_errorfields_under_root: true  # 字段置顶,方便Logstash处理
    - type: logenabled: truepaths:- /usr/local/mysql/mysql_slow.log  # MySQL慢查询日志路径fields:service_name: mysql_slow_loglog_type: mysql_slowfields_under_root: true# 2. 注释掉Elasticsearch输出(不用直接连ES,走Logstash)
    # ------------------------------Elasticsearch output------------------------------
    # output.elasticsearch:
    #   hosts: ["localhost:9200"]# 3. 配置Logstash输出(指向ELK节点的6000端口)
    #------------------------------Logstash output------------------------------
    output.logstash:hosts: ["172.16.0.13:6000"]  # ELK节点IP+MySQL对应的端口
    
  3. 启动Filebeat并验证:
    # 前台启动(测试用,确认无报错)
    filebeat -e -c /etc/filebeat/filebeat.yml
    # 无报错后,后台启动:nohup filebeat -e -c /etc/filebeat/filebeat.yml &(可选)
    systemctl restart filebeat
    

Nginx节点和Java节点的Filebeat配置类似:

  • Nginx节点:收集 /usr/local/nginx/logs/access.logerror.log,fields标识为 nginx_access_log/nginx_error_log,输出到ELK节点的6001端口;
filebeat.inputs:
- type: logenabled: truepaths:- /usr/local/nginx/logs/access.logfields:service_name: nginx_access_log    # 字段标识(用于ES索引名)log_type: nginx_accessfields_under_root: true  # 字段置顶,方便Logstash处理
- type: logenabled: truepaths:- /usr/local/nginx/logs/error.logfields:service_name: nginx_error_loglog_type: nginx_errorfields_under_root: true# 3. 配置Logstash输出(指向ELK节点的6000端口)
#------------------------------Logstash output------------------------------
output.logstash:hosts: ["172.16.0.13:6001"]  # ELK节点IP+nginx对应的端口
  • Java节点:收集 /opt/logs/yulin-*.log(微服务日志),fields标识为 yulin_log,输出到ELK节点的6002端口。
filebeat.inputs:
- type: logenabled: truepaths:- /opt/logs/yulin-*.log     fields:service_name: yulin_log    # 字段标识(用于ES索引名)log_type: yulinfields_under_root: true# 3. 配置Logstash输出(指向ELK节点的6000端口)
#------------------------------Logstash output------------------------------
output.logstash:hosts: ["172.16.0.13:6002"]  # ELK节点IP+微服务对应的端口

3.5 Logstash配置(处理日志并输出到ES)

在ELK节点(172.16.0.13),为每个Filebeat创建对应的Logstash配置文件,实现“端口监听→日志处理→输出到ES”。

以MySQL日志为例(创建mysql_log.conf):

  1. 创建配置文件:
    cd /etc/logstash/conf.d
    vim mysql_log.conf
    vim nginx_log.conf
    vim java_log.conf
    
  2. 写入以下内容:
    # 输入:监听6000端口(对应MySQL的Filebeat)
    input {beats {port => "6000"}
    }# 输出:到ES,索引名包含服务名和日期(如mysql_error_log-2025.09.30)
    output {elasticsearch {hosts => ["http://172.16.0.13:9200"]  # ES节点地址index => "%{service_name}-%{+YYYY.MM.dd}"  # 索引名(用Filebeat的service_name字段)}
    }
    

同理,创建Nginx和Java的Logstash配置:

  • vim nginx_log.conf:监听6001端口,索引名 %{service_name}-%{+YYYY.MM.dd}
# 输入:监听6000端口(对应nginx的Filebeat)
input {beats {port => "6001"}
}# 输出:到ES。
output {elasticsearch {hosts => ["http://172.16.0.13:9200"]  # ES节点地址index => "%{service_name}-%{+YYYY.MM.dd}"  # 索引名(用Filebeat的service_name字段)}
}
  • vim java_log.conf:监听6002端口,索引名 %{service_name}-%{+YYYY.MM.dd}
# 输入:监听6000端口(对应微服务的Filebeat)
input {beats {port => "6002"}
}# 输出:到ES。
output {elasticsearch {hosts => ["http://172.16.0.13:9200"]  # ES节点地址index => "%{service_name}-%{+YYYY.MM.dd}"  # 索引名(用Filebeat的service_name字段)}
}

配置Logstash多管道(管理多个配置文件)
编辑 vim /etc/logstash/pipelines.yml,添加多管道配置(替换默认内容):

- pipeline.id: mysql_logpath.config: "/etc/logstash/conf.d/mysql_log.conf"
- pipeline.id: nginx_logpath.config: "/etc/logstash/conf.d/nginx_log.conf"
- pipeline.id: java_logpath.config: "/etc/logstash/conf.d/java_log.conf"

先启动所有服务器的filebeat和elasticsearch,再启动Logstash:systemctl restart logstash.service

3.6 验证日志收集

  1. 在各节点添加测试日志:(可选)
    # MySQL节点:添加测试日志到错误日志
    echo "=== MySQL Test Log $(date) ===" >> /var/log/mysql/mysql_error.log
    # Nginx节点:添加测试日志到访问日志
    echo "=== Nginx Test Log $(date) ===" >> /usr/local/nginx/logs/access.log
    # Java节点:添加测试日志到微服务日志
    echo "=== Java Test Log $(date) ===" >> /opt/logs/yulin-2025-09-30.0.log
    
  2. 到Kibana查看:
    • 访问 http://172.16.0.10:5601,进入「Index Management」;
    • 能看到 mysql_error_log-2025.09.30nginx_access_log-2025.09.30yulin_log-2025.09.30 等索引,说明日志收集成功。

四、常见问题排查:3个实用技巧

部署中遇到问题,别慌,用以下方法快速定位:

4.1 验证Filebeat是否能连Logstash

# 在Filebeat节点执行(测试输出连接)
filebeat test output -c /etc/filebeat/filebeat.yml

看到“talk to server… OK”说明连接正常,否则检查Logstash端口是否开放、IP是否写错。

4.2 校验Logstash配置语法

# 在ELK节点执行(检查配置文件语法)
logstash -t -f /etc/logstash/conf.d/mysql_log.conf

输出“Config Validation Result: OK”说明语法正确,否则根据报错修改(比如括号不匹配、字段写错)。

4.3 查看Logstash管道日志

多管道配置后,日志会包含管道ID,方便定位:

# 查看MySQL管道的日志
grep "\[mysql_log\]" /var/log/logstash/logstash-plain.log
# 查看Nginx管道的日志
grep "\[nginx_log\]" /var/log/logstash/logstash-plain.log

五、部署总结

这套设备管理平台的部署核心是“按节点分工,按步骤验证”,重点记住3点:

  1. IP和端口不能乱改:MySQL和Redis的IP、Filebeat与Logstash的端口对应,改了会断连;
  2. 配置必备份:修改MySQL、Nginx、ELK的配置前,先备份原文件,方便回滚;
  3. 每步必验证:安装完一个服务就验证(比如MySQL导入SQL后看表、ES访问9200端口),避免到最后才发现问题,排查难度大。
http://www.dtcms.com/a/462288.html

相关文章:

  • 基于springboot的在线商城系统设计与开发
  • Python自动化测试实战:深度解析Scripts脚本层结构!
  • 天津住房和城乡建设建造师网站与市场营销有关的网站
  • 系统移植篇之uboot-2:编译微观实验
  • 第一章 网络基础
  • 建筑网站起名东道设计公司logo
  • LC175 组合两个表
  • 个人怎么注册网站网站301跳转
  • MongoDB 集合更新后通过 Socket.IO 自动推送数据到前端 (FastAPI 实现)
  • 东胜网站建设医疗网站前置审批查询
  • windows如何设置mongodb的副本集
  • 物流网站有哪些网站被做301跳转了怎么办
  • shell脚本命令删除Zookeeper提供者服务中的指定IP节点
  • 六安网站制作公司价格龙口网络
  • Node.js使用Express框架解决中文乱码问题
  • 设计模式--桥接模式:解耦抽象与实现的灵活设计
  • 做竞价的网站怎么做网站数据库备份
  • 基于FireBeetle 2 ESP32-C5的智能植物光照系统——物联网农业实践
  • 天津住房与城乡建设厅网站首页包头学做网站
  • 【Frida Android】基础篇1:基础环境配置
  • YOLOv11安卓目标检测App完整开发指南
  • 鸿蒙NEXT实战:使用公共事件实现跨进程通信
  • npm升级提示error engine not compatible with your version of node/npm: npm@11.6.2
  • 我的网站为什么打不开怎么回事啊携程做旅游的网站
  • 网站推广的表现方式网站开发需要用到哪些设备
  • 缓存大杀器-redis
  • 网站建设管理方案网站开发与app开发的区别
  • 装修公司网站制作大数据营销成功案例
  • 【STM32】I2C通信—硬件外设
  • 脚手架学习