欢迎光临
我们一直在努力

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

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


✅ 前置说明

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

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

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

    #!/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}"

    脚本一执行方式

    # 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 链路是否通畅

     

    #!/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

    测试脚本执行方式

    chmod +x test_log.sh
    ./test_log.sh


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

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

    #!/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

    管理脚本执行方式

    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:创建索引模式(首次必做)

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

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

  • ✅ 常用运维命令(备查)

    # 查看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


    ✅ 常见问题排查

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

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

    赞(0)
    未经允许不得转载:171主机测评 » ELK 单机版日志系统【一键自动化部署脚本 + 完整配套配置】
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址