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.gz
和yl_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
- 启动 mysql 服务
bash
systemctl start mysqld
- 修改初始密码
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';"
- 修改配置文件
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
- 创建日志目录并授权
bash
# 创建日志目录 sudo mkdir -p /var/log/mysql # 设置目录所有者为mysql用户 sudo chown -R mysql:mysql /var/log/mysql
- 重启 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
- 安装依赖包
bash
yum install -y gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel unzip
- 创建运行用户和组
bash
useradd -M -s /sbin/nologin nginx
- 编译安装 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
- 配置系统命令和服务
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 配置文件
- 备份原有配置文件
bash
cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
- 修改配置文件
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;} }
- 重启 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)
- 安装 java 环境
bash
yum -y install java java -version
- 上传并安装 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
- 修改 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 服务默认监听端口)
- 第 23 行:
- 创建数据目录并授权
bash
mkdir -p /data/elk_data chown elasticsearch:elasticsearch /data/elk_data/
- 启动 ES 并验证
bash
# 启动ES服务(启动较慢,需等待片刻) systemctl start elasticsearch.service # 查看9200端口是否监听 netstat -antp | grep 9200 # 查看节点信息(浏览器访问或用curl命令) curl 172.16.0.13:9200
6.2.2 安装 logstash
- 上传并安装 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/
- 测试 logstash
bash
# 输入采用标准输入,输出采用标准输出(类似管道) logstash -e 'input { stdin{} } output { stdout{} }'
www.baidu.com
并回车,会输出包含host
、@timestamp
、message
等字段的日志信息,说明 logstash 测试正常。
6.3 nginx 节点安装 kibana
- 上传并安装 kibana rpm 包
bash
# 上传kibana-6.6.1-x86_64.rpm到/opt目录 cd /opt rpm -ivh kibana-6.6.1-x86_64.rpm
- 修改 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 索引)
- 第 2 行:
- 启动 kibana 并验证
bash
# 启动kibana服务并设置开机自启 systemctl start kibana.service systemctl enable kibana.service # 查看5601端口是否监听 netstat -natp | grep 5601 # 浏览器访问验证 http://172.16.0.10:5601
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: logenabled: truepaths:- /var/log/mysql/mysql_error.logfields:service_name: mysql_error_loglog_type: mysql_errorfields_under_root: true
- type: logenabled: truepaths:- /var/log/mysql/mysql_slow.logfields:service_name: mysql_slow_loglog_type: mysql_slowfields_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 对应管道
- 创建 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} }
- 修改 logstash 管道配置文件
bash
vim /etc/logstash/pipelines.yml
yaml
#- pipeline.id: main # path.config: "/etc/logstash/conf.d/*.conf" - pipeline.id: mysql_logpath.config: "/etc/logstash/conf.d/mysql_log.conf"
- 启动 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: logenabled: truepaths:- /usr/local/nginx/logs/access.logfields:service_name: nginx_access_loglog_type: nginx_accessfields_under_root: true
- type: logenabled: truepaths:- /usr/local/nginx/logs/error.logfields:service_name: nginx_error_loglog_type: nginx_errorfields_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 对应管道
- 创建 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} }
- 修改 logstash 管道配置文件
bash
vim /etc/logstash/pipelines.yml
yaml
- pipeline.id: mysql_logpath.config: "/etc/logstash/conf.d/mysql_log.conf" - pipeline.id: nginx_logpath.config: "/etc/logstash/conf.d/nginx_log.conf"
- 启动 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: logenabled: truepaths:- /opt/logs/yulin-*.logfields:service_name: yulin_loglog_type: java_businessfields_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 对应管道
- 创建 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} }
- 修改 logstash 管道配置文件
bash
vim /etc/logstash/pipelines.yml
yaml
- 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"
- 启动 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模块创建日志可视化图表。