集中式日志平台是运维核心工具,能解决 “日志分散、查询低效、问题定位难” 的痛点。ELK(Elasticsearch+Logstash+Kibana)是经典方案,适用于复杂日志处理;EFK(Elasticsearch+Filebeat+Kibana)用轻量采集器替代 Logstash,更适合资源有限场景。本文基于 CentOS 7/8 系统,详解单节点部署全流程,新手也能直接套用。

一、前期准备:部署前的 “3 大核心配置”

1. 系统环境要求(单节点最低配置)

  • 硬件:CPU≥2 核,内存≥4G(Elasticsearch 占用内存较高,建议 8G 以上),磁盘≥50G(日志存储需预留充足空间)。

  • 系统:CentOS 7.9/8.5(Ubuntu 20.04 也适用,命令稍作调整),关闭 SELinux,防火墙开放指定端口。

  • 依赖:JDK 1.8+(Elasticsearch 7.x 内置 JDK,可直接使用,无需额外安装)。

2. 系统环境配置(必做步骤)

(1)关闭 SELinux 与防火墙

\ 临时关闭SELinux(重启失效)

setenforce 0

\ 永久关闭SELinux(修改配置文件)

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

\ 开放所需端口(ELK核心端口)

firewall-cmd --permanent --add-port=9200/tcp   Elasticsearch

firewall-cmd --permanent --add-port=5601/tcp   Kibana

firewall-cmd --permanent --add-port=5044/tcp   Logstash

firewall-cmd --permanent --add-port=9000/tcp   Filebeat(EFK用)

firewall-cmd --reload   生效配置

(2)调整系统参数(避免 Elasticsearch 启动失败)

  • 调整文件描述符限制(Elasticsearch 要求≥65535):
echo "\* soft nofile 65535" >> /etc/security/limits.conf

echo "\* hard nofile 65535" >> /etc/security/limits.conf
  • 调整虚拟内存(避免内存不足报错):
echo "vm.max\_map\_count=262144" >> /etc/sysctl.conf

sysctl -p   生效配置

二、核心部署:ELK 栈(Elasticsearch+Logstash+Kibana)

1. 部署 Elasticsearch(日志存储与检索核心)

Elasticsearch 是分布式搜索引擎,负责存储日志数据并提供快速查询能力。

(1)解压与目录配置

\ 解压到/usr/local目录

tar -zxvf elasticsearch-7.17.10-linux-x86\_64.tar.gz -C /usr/local/

\ 重命名(简化操作)

mv /usr/local/elasticsearch-7.17.10 /usr/local/elasticsearch

\ 创建数据和日志目录(避免权限问题)

mkdir -p /usr/local/elasticsearch/data

mkdir -p /usr/local/elasticsearch/logs

(2)创建专用用户(Elasticsearch 禁止 root 启动)

useradd es   创建es用户

chown -R es:es /usr/local/elasticsearch/   授权目录权限

(3)修改核心配置文件

编辑/usr/local/elasticsearch/config/elasticsearch.yml,关键配置如下(其余默认):

\ 集群名称(自定义,同一集群需一致)

cluster.name: elk-cluster

\ 节点名称(自定义)

node.name: node-1

\ 数据存储目录(对应创建的目录)

path.data: /usr/local/elasticsearch/data

\ 日志存储目录

path.logs: /usr/local/elasticsearch/logs

\ 绑定地址(0.0.0.0允许外部访问)

network.host: 0.0.0.0

\ 端口(默认9200)

http.port: 9200

\ 初始化集群节点(单节点填自身)

cluster.initial\_master\_nodes: \["node-1"]

\ 允许跨域访问(Kibana连接需要)

http.cors.enabled: true

http.cors.allow-origin: "\*"

(4)启动与验证

\ 切换到es用户

su - es

\ 后台启动Elasticsearch

/usr/local/elasticsearch/bin/elasticsearch -d

\ 验证启动状态(等待30秒,确保服务启动完成)

curl http://localhost:9200
  • 成功标志:返回包含cluster_name“elk-cluster”、version等信息的 JSON 数据。

  • 常见问题:启动失败查看日志tail -f /usr/local/elasticsearch/logs/elk-cluster.log,多为内存不足(调整 JVM 参数)或权限问题。

(5)JVM 参数优化(可选,根据内存调整)

编辑/usr/local/elasticsearch/config/jvm.options,调整堆内存大小(建议为物理内存的 50%,最大不超过 32G):

-Xms2g   初始堆内存(2G,根据实际内存调整)

-Xmx2g   最大堆内存(与初始值一致,避免频繁扩容)

2. 部署 Kibana(日志可视化界面)

Kibana 是 ELK 的可视化工具,提供日志查询、仪表盘制作、告警配置等功能。

(1)解压与目录配置

\ 解压到/usr/local目录

tar -zxvf kibana-7.17.10-linux-x86\_64.tar.gz -C /usr/local/

\ 重命名

mv /usr/local/kibana-7.17.10 /usr/local/kibana

\ 授权给es用户(与Elasticsearch同用户)

chown -R es:es /usr/local/kibana/

(2)修改核心配置文件

编辑/usr/local/kibana/config/kibana.yml,关键配置如下:

\ 绑定地址(允许外部访问)

server.host: "0.0.0.0"

\ 端口(默认5601)

server.port: 5601

\ 连接Elasticsearch的地址(填写Elasticsearch服务器IP)

elasticsearch.hosts: \["http://localhost:9200"]

\ 中文界面配置(默认英文,按需开启)

i18n.locale: "zh-CN"

(3)启动与验证

\ 切换到es用户

su - es

\ 后台启动Kibana(nohup方式避免会话断开停止)

nohup /usr/local/kibana/bin/kibana > /usr/local/kibana/logs/kibana.log 2>&1 &
  • 验证:浏览器访问http://服务器IP:5601,能打开 Kibana 登录界面(7.17.x 默认无密码,直接进入),说明部署成功。

  • 启动较慢:Kibana 首次启动需加载资源,耐心等待 1-2 分钟,失败查看日志tail -f /usr/local/kibana/logs/kibana.log

3. 部署 Logstash(日志采集与处理)

Logstash 是日志处理管道,负责从不同来源采集日志、过滤清洗、转换格式后,输出到 Elasticsearch。

(1)解压与目录配置

\ 解压到/usr/local目录

tar -zxvf logstash-7.17.10-linux-x86\_64.tar.gz -C /usr/local/

\ 重命名

mv /usr/local/logstash-7.17.10 /usr/local/logstash

(2)创建日志采集配置文件

Logstash 通过配置文件定义 “输入→过滤→输出” 流程,以采集 Nginx 日志为例,创建/usr/local/logstash/config/nginx-log.conf

\ 输入配置(从文件采集Nginx日志)

input {

  file {

    path => "/var/log/nginx/access.log"   Nginx访问日志路径

    start\_position => "beginning"   从日志开头开始采集

    sincedb\_path => "/dev/null"   每次重启都重新采集(测试用,生产环境注释)

  }

}

\ 过滤配置(解析Nginx日志格式,转换为结构化数据)

filter {

  grok {

    match => { "message" => '%{IPORHOST:client\_ip} %{USER:ident} %{USER:auth} \\\[%{HTTPDATE:timestamp}\\] "%{WORD:method} %{URIPATH:uri\_path}(?:%{URIPARAM:uri\_param})? %{HTTPVERSION:http\_version}" %{NUMBER:status} %{NUMBER:body\_bytes\_sent} "%{DATA:referrer}" "%{DATA:user\_agent}"' }

  }

   转换timestamp字段为日期类型(便于Kibana时间筛选)

  date {

    match => \[ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]

    target => "@timestamp"

  }

}

\ 输出配置(输出到Elasticsearch)

output {

  elasticsearch {

    hosts => \["http://localhost:9200"]   Elasticsearch地址

    index => "nginx-access-log-%{+YYYY.MM.dd}"   索引名(按日期拆分)

  }

   同时输出到控制台(测试用,生产环境注释)

  stdout { codec => rubydebug }

}

(3)启动与验证

\ 后台启动Logstash(指定配置文件)

nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/nginx-log.conf > /usr/local/logstash/logs/logstash.log 2>&1 &
  • 验证:查看 Logstash 日志tail -f /usr/local/logstash/logs/logstash.log,无报错则启动成功;同时访问 Nginx 生成日志,执行curl ``http://localhost,然后在 Elasticsearch 中查询索引curl ``http://localhost:9200/nginx-access-log-$``(date +%Y.%m.%d)/_search,能返回日志数据说明采集正常。

三、轻量方案:EFK 栈(Elasticsearch+Filebeat+Kibana)

Logstash 占用资源较高(CPU / 内存消耗大),中小规模场景推荐用 Filebeat 替代 Logstash,Filebeat 是轻量级采集器,资源占用低、部署简单。

1. 部署 Filebeat(日志采集)

(1)解压与目录配置

\ 解压到/usr/local目录

tar -zxvf filebeat-7.17.10-linux-x86\_64.tar.gz -C /usr/local/

\ 重命名

mv /usr/local/filebeat-7.17.10 /usr/local/filebeat

(2)修改核心配置文件

编辑/usr/local/filebeat/filebeat.yml,关键配置如下(采集 Nginx 日志为例):

\ 关闭默认的filebeat.inputs配置

filebeat.inputs:

\- type: filestream

  enabled: true

  paths:

    - /var/log/nginx/access.log   Nginx日志路径

\ 输出到Elasticsearch(直接输出,无需Logstash)

output.elasticsearch:

  hosts: \["http://localhost:9200"]   Elasticsearch地址

  index: "nginx-access-log-%{+YYYY.MM.dd}"   索引名

\ 启用内置模板(自动创建索引结构)

setup.template.enabled: true

setup.template.name: "nginx-log"

setup.template.pattern: "nginx-\*"

(3)启动与验证

\ 后台启动Filebeat

nohup /usr/local/filebeat/filebeat -e -c /usr/local/filebeat/filebeat.yml > /usr/local/filebeat/logs/filebeat.log 2>&1 &
  • 验证:访问 Nginx 生成日志,查询 Elasticsearch 索引,能返回数据说明采集正常;Filebeat 日志查看 `tail -f /usr/local/filebeat/log
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐