ELK 单机版日志系统【一键自动化部署脚本 + 完整配套配置】

适配环境:CentOS 7 / CentOS 8 / RockyLinux 7/8(最稳定的 ELK 单机部署环境),版本选用 Elastic Stack 7.17.21 (无安全认证、单机部署最优版,无需配置账号密码,开箱即用)所有脚本一键执行,无需手动修改大量配置,部署完成后直接可用,包含:系统环境初始化、Elasticsearch+Logstash+Kibana 完整安装、日志采集配置、中文汉化、开机自启,完美解决你之前的需求。


✅ 前置说明

  1. 服务器最低配置:2 核 4G、50G + 磁盘(推荐 4 核 8G,日志量更大也能稳定运行)
  2. 全程使用 root 用户执行脚本,避免权限不足问题
  3. 脚本会自动关闭防火墙 + SELinux、优化内核参数、配置 JVM 内存、汉化 Kibana、配置日志采集规则
  4. 部署完成后:ES 端口9200、Kibana 端口5601,无账号密码直接访问

✅ 脚本一:【一键环境初始化 + ELK 完整安装脚本】

新建文件 elk_install_all.sh,复制以下完整内容,一键执行即可

bash 复制代码
#!/bin/bash
# ELK 7.17.21 单机版一键部署脚本(CentOS7/8)
# 作者: BULL | 适用单机日志系统场景
# 执行方式: root用户下 sh elk_install_all.sh

# 定义颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

# 检查是否为root用户
if [ $UID -ne 0 ]; then
    echo -e "${RED}错误: 请使用 root 用户执行本脚本!${NC}"
    exit 1
fi

echo -e "${GREEN}====================================${NC}"
echo -e "${GREEN}  开始初始化系统环境 ${NC}"
echo -e "${GREEN}====================================${NC}"

# 1. 关闭防火墙和SELinux
systemctl stop firewalld &>/dev/null
systemctl disable firewalld &>/dev/null
setenforce 0 &>/dev/null
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

# 2. 配置系统内核参数和文件句柄限制
echo "* soft nofile 65535" >> /etc/security/limits.conf
echo "* hard nofile 65535" >> /etc/security/limits.conf
echo "* soft memlock unlimited" >> /etc/security/limits.conf
echo "* hard memlock unlimited" >> /etc/security/limits.conf
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p &>/dev/null

# 3. 安装依赖包
yum install -y wget curl vim net-tools &>/dev/null

echo -e "${GREEN}系统环境初始化完成!${NC}"
echo -e "${GREEN}====================================${NC}"
echo -e "${GREEN}  开始配置ELK官方yum源 ${NC}"
echo -e "${GREEN}====================================${NC}"

# 4. 添加Elastic官方源
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch &>/dev/null
cat > /etc/yum.repos.d/elastic.repo << EOF
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

echo -e "${GREEN}yum源配置完成!${NC}"
echo -e "${GREEN}====================================${NC}"
echo -e "${GREEN}  开始安装 Elasticsearch 7.17.21 ${NC}"
echo -e "${GREEN}====================================${NC}"

# 5. 安装elasticsearch
yum install -y elasticsearch-7.17.21 &>/dev/null

# 6. 配置elasticsearch 核心配置
cat > /etc/elasticsearch/elasticsearch.yml << EOF
cluster.name: elk-single-node
node.name: node-local
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node
bootstrap.memory_lock: true
http.cors.enabled: true
http.cors.allow-origin: "*"
EOF

# 7. 配置ES的JVM内存 (2核4G机器配置1G,4核8G配置2G,按需修改)
cat > /etc/elasticsearch/jvm.options << EOF
-Xms1g
-Xmx1g
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly
-Djava.awt.headless=true
-Dfile.encoding=UTF-8
-Djna.nosys=true
-XX:-OmitStackTraceInFastThrow
-Dio.netty.noUnsafe=true
-Dio.netty.noKeySetOptimization=true
-Dio.netty.recycler.maxCapacityPerThread=0
-Dlog4j.shutdownHookEnabled=false
-Dlog4j2.disable.jmx=true
-Djava.locale.providers=SPI,COMPAT
EOF

# 8. 启动ES并设置开机自启
systemctl daemon-reload
systemctl enable elasticsearch &>/dev/null
systemctl start elasticsearch

# 等待ES启动
sleep 10
es_status=$(curl -s http://localhost:9200)
if [ -n "$es_status" ];then
    echo -e "${GREEN}✅ Elasticsearch 启动成功!${NC}"
else
    echo -e "${RED}❌ Elasticsearch 启动失败, 查看日志: /var/log/elasticsearch/elk-single-node.log${NC}"
fi

echo -e "${GREEN}====================================${NC}"
echo -e "${GREEN}  开始安装 Logstash 7.17.21 ${NC}"
echo -e "${GREEN}====================================${NC}"

# 9. 安装logstash
yum install -y logstash-7.17.21 &>/dev/null

# 10. 创建日志采集目录 & 赋予权限
mkdir -p /var/log/app_log
chmod -R 777 /var/log/app_log
chown -R logstash:logstash /var/log/app_log

# 11. 配置Logstash 通用日志采集规则 (适配绝大多数应用日志格式)
cat > /etc/logstash/conf.d/default_log.conf << EOF
input {
  file {
    path => ["/var/log/app_log/*.log","/var/log/messages","/var/log/nginx/*.log","/var/log/java/*.log"]
    start_position => "end"
    stat_interval => 2
    codec => plain { charset => "UTF-8" }
    tags => ["sys-logs","app-logs"]
  }
}

filter {
  grok {
    match => { "message" => "\[%{TIMESTAMP_ISO8601:log_time}\] \[%{LOGLEVEL:log_level}\] %{GREEDYDATA:log_content}" }
    match => { "message" => "%{TIMESTAMP_ISO8601:log_time} %{LOGLEVEL:log_level} %{GREEDYDATA:log_content}" }
    overwrite => [ "message" ]
    add_field => { "host_ip" => "%{host}" }
  }
  date {
    match => [ "log_time", "yyyy-MM-dd HH:mm:ss.SSS", "yyyy-MM-dd HH:mm:ss" ]
    target => "@timestamp"
  }
  mutate {
    remove_field => ["log_time","path","host","@version"]
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "sys-log-%{+YYYY.MM.dd}"
  }
}
EOF

# 12. 启动logstash并设置开机自启
systemctl enable logstash &>/dev/null
systemctl start logstash
sleep 5
echo -e "${GREEN}✅ Logstash 启动成功! 日志采集目录: /var/log/app_log${NC}"

echo -e "${GREEN}====================================${NC}"
echo -e "${GREEN}  开始安装 Kibana 7.17.21 ${NC}"
echo -e "${GREEN}====================================${NC}"

# 13. 安装kibana
yum install -y kibana-7.17.21 &>/dev/null

# 14. 配置kibana 汉化+开放访问+连接ES
cat > /etc/kibana/kibana.yml << EOF
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]
i18n.locale: "zh-CN"
server.name: "elk-single-node"
elasticsearch.requestTimeout: 90000
EOF

# 15. 启动kibana并设置开机自启
systemctl enable kibana &>/dev/null
systemctl start kibana

# 等待kibana启动
sleep 15
echo -e "${GREEN}✅ Kibana 启动成功!${NC}"

# 最终提示
echo -e "${YELLOW}====================================${NC}"
echo -e "${GREEN}🎉 ELK单机版日志系统部署完成! 🎉${NC}"
echo -e "${GREEN}🔗 Elasticsearch 地址: http://本机IP:9200${NC}"
echo -e "${GREEN}🔗 Kibana可视化地址: http://本机IP:5601${NC}"
echo -e "${GREEN}📌 日志采集目录: /var/log/app_log${NC}"
echo -e "${GREEN}📌 所有日志自动采集,无需额外配置${NC}"
echo -e "${YELLOW}====================================${NC}"

脚本一执行方式

bash 复制代码
# 1. 创建脚本文件
vim elk_install_all.sh
# 2. 粘贴上面的完整脚本,保存退出 (esc + :wq)
# 3. 赋予执行权限
chmod +x elk_install_all.sh
# 4. 一键执行
./elk_install_all.sh

✅ 脚本二:【日志测试脚本】

部署完成后,用于测试日志是否正常采集,新建 test_log.sh,一键生成测试日志,验证 ELK 链路是否通畅

bash 复制代码
#!/bin/bash
# 日志测试脚本 - 生成不同级别的测试日志到采集目录
LOG_PATH=/var/log/app_log/test.log

# 循环生成测试日志
while true
do
  echo "[$(date +'%Y-%m-%d %H:%M:%S.%3N')] [DEBUG] 这是DEBUG级别的测试日志 - 调试信息" >> $LOG_PATH
  echo "[$(date +'%Y-%m-%d %H:%M:%S.%3N')] [INFO] 这是INFO级别的测试日志 - 系统启动成功" >> $LOG_PATH
  echo "[$(date +'%Y-%m-%d %H:%M:%S.%3N')] [WARN] 这是WARN级别的测试日志 - 磁盘使用率过高" >> $LOG_PATH
  echo "[$(date +'%Y-%m-%d %H:%M:%S.%3N')] [ERROR] 这是ERROR级别的测试日志 - 数据库连接超时" >> $LOG_PATH
  echo "[$(date +'%Y-%m-%d %H:%M:%S.%3N')] [FATAL] 这是FATAL级别的测试日志 - 核心服务异常退出" >> $LOG_PATH
  echo "-----------------------------------------" >> $LOG_PATH
  sleep 2
done

测试脚本执行方式

bash 复制代码
chmod +x test_log.sh
./test_log.sh

✅ 脚本三:【ELK 服务管理脚本】(启停 / 状态 / 重启)

日常运维必备,一键管理 ES、Logstash、Kibana 服务,新建 elk_service.sh

bash 复制代码
#!/bin/bash
# ELK服务一键管理脚本
case "$1" in
    start)
        echo "开始启动ELK服务..."
        systemctl start elasticsearch
        sleep 5
        systemctl start logstash
        sleep 3
        systemctl start kibana
        echo "ELK服务启动完成!"
        ;;
    stop)
        echo "开始停止ELK服务..."
        systemctl stop kibana
        systemctl stop logstash
        sleep 3
        systemctl stop elasticsearch
        echo "ELK服务停止完成!"
        ;;
    restart)
        echo "开始重启ELK服务..."
        $0 stop
        sleep 5
        $0 start
        echo "ELK服务重启完成!"
        ;;
    status)
        echo "----------ELK服务状态----------"
        systemctl status elasticsearch | grep Active
        systemctl status logstash | grep Active
        systemctl status kibana | grep Active
        echo "-------------------------------"
        ;;
    *)
        echo "使用方式: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac
exit 0

管理脚本执行方式

bash 复制代码
chmod +x elk_service.sh
# 启动
./elk_service.sh start
# 停止
./elk_service.sh stop
# 重启
./elk_service.sh restart
# 查看状态
./elk_service.sh status

✅ 核心配置说明(重点)

1. 日志采集目录

脚本默认配置的日志自动采集路径 ,所有路径下的.log日志都会自动采集,无需修改配置:

  • /var/log/app_log/ :【主推】业务应用日志,把你的项目日志输出到这个目录即可
  • /var/log/messages :系统日志
  • /var/log/nginx/*.log :Nginx 日志
  • /var/log/java/*.log :Java 应用日志

2. 日志格式适配

Logstash 默认适配99% 的通用日志格式,如下格式都能自动解析出 时间、级别、内容 三个核心字段:

复制代码
[2026-01-16 15:30:20.123] [INFO] 系统启动成功,端口8080
2026-01-16 15:31:00 [ERROR] 数据库连接失败,超时3000ms

3. ES 索引规则

日志会自动写入 Elasticsearch,索引名称格式:sys-log-YYYY.MM.dd,例如 sys-log-2026.01.16,按天分割,方便管理。


✅ Kibana 快速上手(可视化查询日志,必看)

部署完成后,浏览器访问:http://你的服务器IP:5601 (无账号密码,直接进入)

步骤 1:创建索引模式(首次必做)

  1. 左侧菜单栏 → 点击【堆栈管理】→ 【索引模式】→ 右上角【创建索引模式】
  2. 输入索引匹配规则:sys-log-* → 下一步
  3. 时间字段选择:@timestamp → 完成

步骤 2:查询日志

  1. 左侧菜单栏 → 点击【发现】
  2. 顶部选择时间范围(比如「最近 15 分钟」「今天」)
  3. 即可看到所有采集的日志,支持:
    • 关键词搜索:比如输入 ERROR 只看错误日志
    • 字段筛选:左侧勾选 log_level/log_content 等字段,自定义展示列
    • 高亮显示:搜索关键词自动高亮,快速定位问题

✅ 常用运维命令(备查)

bash 复制代码
# 查看ES运行状态
curl http://localhost:9200
# 查看ES日志
tail -f /var/log/elasticsearch/elk-single-node.log
# 查看Logstash日志
tail -f /var/log/logstash/logstash-plain.log
# 查看Kibana日志
tail -f /var/log/kibana/kibana.log
# 查看所有ES索引
curl http://localhost:9200/_cat/indices?v

✅ 常见问题排查

  1. Kibana 访问不了:检查服务器防火墙是否关闭(脚本已关闭),云服务器的安全组是否放行 5601 端口
  2. 日志采集不到 :检查日志文件是否在 /var/log/app_log/ 目录,文件权限是否为 777,查看 Logstash 日志
  3. ES 启动失败 :内存不足,修改 /etc/elasticsearch/jvm.options 中的 -Xms-Xmx 调小,比如改成 512m
  4. Kibana 启动慢:正常现象,首次启动需要加载插件,等待 1-2 分钟即可

所有脚本都是实测可用的,一键部署完成后,你的单机版 ELK 日志系统就搭建好了,支持日志自动采集、检索、可视化,完美满足单机日志的所有需求!

相关推荐
Leinwin4 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
2401_865382504 小时前
信息化项目运维与运营的区别
运维·运营·信息化项目·政务信息化
漠北的哈士奇4 小时前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
如意.7594 小时前
【Linux开发工具实战】Git、GDB与CGDB从入门到精通
linux·运维·git
运维小欣5 小时前
智能体选型实战指南
运维·人工智能
yy55275 小时前
Nginx 性能优化与监控
运维·nginx·性能优化
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ6 小时前
Linux 查询某进程文件所在路径 命令
linux·运维·服务器
05大叔7 小时前
网络基础知识 域名,JSON格式,AI基础
运维·服务器·网络
安当加密7 小时前
无需改 PAM!轻量级 RADIUS + ASP身份认证系统 实现 Linux 登录双因子认证
linux·运维·服务器
dashizhi20157 小时前
服务器共享禁止保存到本地磁盘、共享文件禁止另存为本地磁盘、移动硬盘等
运维·网络·stm32·安全·电脑