ELK日志分析系统完整部署与应用指南

ELK日志分析系统完整部署与应用指南

ELK是一套开源的日志集中化管理解决方案,由Elasticsearch、Logstash、Kibana三大核心组件组成,可解决传统日志管理中分散存储、分析低效、可视化缺失等问题,适用于各类系统与业务日志的采集、处理、存储、分析及展示场景。

一、ELK系统背景与核心价值

1.1 传统日志管理痛点

  • 分散存储:日志分散在多台服务器,运维人员需逐一登录查看,操作繁琐。
  • 分析低效 :依赖wcgrepawk等命令,无法满足复杂场景(如多服务器日志合并统计、长周期数据查询)。
  • 可视化缺失:纯文本日志难以直观呈现数据趋势,无法快速定位业务或系统问题。

1.2 ELK核心价值

  • 集中化管理:将多服务器日志统一采集、存储,无需逐机操作。
  • 高效分析:支持复杂查询、多维度统计,快速筛选关键日志数据。
  • 可视化展示:通过图表(折线图、柱状图等)直观呈现日志趋势,如PV/UV、错误日志频次等。
  • 可扩展性:支持集群部署,应对日志数据量增长,保障系统稳定性。

二、ELK组件详解

2.1 核心组件功能

组件 核心功能 关键作用
Elasticsearch(ES) 分布式搜索引擎与文档数据库 存储日志数据,提供快速查询、聚合分析能力
Logstash 日志采集、过滤、转换 从多源采集日志(文件、数据库等),清洗后输出到ES
Kibana 日志可视化与仪表盘 通过Web界面展示ES中的日志数据,支持自定义报表
Filebeat 轻量级日志采集器 替代Logstash在终端节点的采集工作,资源占用低(适用于多终端场景)

2.2 组件协作流程

  1. 采集:Filebeat部署在各业务服务器,实时采集本地日志(如Nginx访问日志、系统messages日志)。
  2. 处理:Filebeat将日志发送至Logstash,Logstash对日志进行过滤(如提取IP、时间戳)、格式转换(如JSON标准化)。
  3. 存储:Logstash将处理后的日志输出到Elasticsearch集群,ES通过分片(Shard)和副本(Replica)实现数据分布式存储与高可用。
  4. 展示:Kibana连接ES集群,读取日志数据,生成可视化图表(如PV/UV趋势图、错误日志统计饼图),供用户查看与分析。

三、环境准备

3.1 服务器规划

建议使用4台CentOS 7/8服务器,配置如下(内存可根据日志量调整,ES节点建议≥1.5G):

服务器IP 主机名 部署组件 功能
192.168.100.10 vm1.cluster.com Kibana 日志可视化展示
192.168.100.20 vm2.cluster.com Elasticsearch ES集群节点(主节点)
192.168.100.30 vm3.cluster.com Logstash 日志采集与处理
192.168.100.40 vm4.cluster.com Filebeat 轻量级日志采集(终端节点)

3.2 基础环境配置(所有服务器执行)

1. 关闭防火墙与SELinux
bash 复制代码
# 停止并禁用防火墙
systemctl stop firewalld
systemctl disable firewalld
iptables -F

# 临时关闭SELinux(永久关闭需修改/etc/selinux/config,设SELINUX=disabled)
setenforce 0
2. 时间同步

确保所有节点时间一致,避免日志时间戳混乱:

bash 复制代码
# 安装ntp服务
yum install ntp -y
# 重启并设置开机自启
systemctl restart ntpd
systemctl enable ntpd
# 验证时间同步
ntpq -p
3. 配置主机名与Hosts绑定
bash 复制代码
# 以192.168.100.10为例,设置主机名
hostnamectl set-hostname vm1.cluster.com

# 编辑/etc/hosts,添加所有节点映射
cat >> /etc/hosts << EOF
192.168.100.10 vm1.cluster.com kibana
192.168.100.20 vm2.cluster.com elasticsearch
192.168.100.30 vm3.cluster.com logstash
192.168.100.40 vm4.cluster.com filebeat
EOF
4. 安装JDK(ES、Logstash依赖)

ELK组件依赖Java环境,建议安装OpenJDK 1.8:

bash 复制代码
yum install java-1.8.0-openjdk java-1.8.0-openjdk-headless -y
# 验证安装
java -version

四、Elasticsearch部署与配置

4.1 Elasticsearch简介

Elasticsearch(简称ES)是分布式、RESTful风格的搜索引擎,支持实时存储、检索海量数据,核心特性包括:

  • 分布式存储:通过分片(Shard)将数据分散到多节点,提高存储容量与查询效率。
  • 高可用:通过副本(Replica)实现数据冗余,某节点故障时,副本可替代提供服务。
  • 全文检索:支持复杂查询(如模糊匹配、范围查询),查询响应速度快。

4.2 单机ES部署(以192.168.100.20为例)

1. 下载并安装ES
bash 复制代码
# 下载ES 6.5.2(文档推荐版本,兼容性稳定)
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.2.rpm
# 安装
rpm -ivh elasticsearch-6.5.2.rpm
2. 配置ES核心参数

编辑配置文件/etc/elasticsearch/elasticsearch.yml(删除注释行后关键配置如下):

yaml 复制代码
# 集群名称(自定义,集群内所有节点需一致)
cluster.name: elk-cluster
# 数据存储路径(默认/var/lib/elasticsearch,建议挂载大容量磁盘)
path.data: /var/lib/elasticsearch
# 日志存储路径
path.logs: /var/log/elasticsearch
# 监听地址(0.0.0.0表示允许所有IP访问)
network.host: 0.0.0.0
# HTTP服务端口(默认9200,用于外部访问)
http.port: 9200
3. 启动并验证ES
bash 复制代码
# 启动ES服务并设置开机自启
systemctl start elasticsearchss
systemctl enable elasticsearch
# 等待1-2分钟(ES启动较慢),验证端口是否监听
netstat -ntlup | grep java
# 预期输出:tcp6  0  0 :::9200  :::*  LISTEN  [java](9200为HTTP端口,9300为集群通信端口)

# 验证ES服务状态(返回JSON格式,status为green表示正常)
curl http://192.168.100.20:9200/_cluster/health?pretty

4.3 ES集群部署(2节点示例:192.168.100.10与192.168.100.20)

1. 集群核心配置参数说明
  • discovery.zen.ping.unicast.hosts:指定集群中所有节点IP,用于节点发现。
  • discovery.zen.minimum_master_nodes:最小主节点投票数,避免"脑裂"(建议设为(N/2)+1,N为候选主节点数)。
  • node.master:是否为候选主节点(true/false)。
  • node.data:是否为数据节点(true/false,建议主节点与数据节点分离,减轻负载)。
2. 节点1配置(192.168.100.20,主节点)
yaml 复制代码
cluster.name: elk-cluster
node.name: 192.168.100.20  # 节点名称(建议用IP或主机名,唯一)
node.master: true     # 作为主节点    
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
# 集群节点列表
discovery.zen.ping.unicast.hosts: ["192.168.100.10", "192.168.100.20"]
3. 节点2配置(192.168.100.10,数据节点)
yaml 复制代码
cluster.name: elk-cluster
node.name: 192.168.100.10
node.master: false    # 不作为候选主节点
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.100.10", "192.168.100.20"]
4. 启动集群并验证
bash 复制代码
# 分别在两个节点启动ES
systemctl restart elasticsearch

# 验证集群状态(访问任意节点IP,number_of_nodes为2表示集群正常)
curl http://192.168.100.20:9200/_cluster/health?pretty
# 预期输出:"number_of_nodes": 2, "number_of_data_nodes": 2

4.4 ES核心概念与关系型数据库对比

ES的核心概念与传统关系型数据库(如MySQL)对应关系如下,便于理解:

关系型数据库(MySQL/Oracle) Elasticsearch 说明
Database(数据库) Index(索引) 存储一类相关日志数据的集合(如"nginx_access_log"索引存储Nginx访问日志)
Table(表) Type(类型) 索引内的逻辑分组(ES 7.x后已移除,建议一个索引对应一种数据类型)
Row(行) Document(文档) 索引中的单条日志数据,以JSON格式存储
Column(列) Field(字段) 文档中的单个属性(如日志的"ip""timestamp""message"字段)

4.5 ES基础API操作

ES通过RESTful API实现数据操作,格式为:

bash 复制代码
curl -X<HTTP方法> 'http://<ES节点IP>:9200/<路径>?<参数>' -d '<JSON请求体>'
1. 索引操作
bash 复制代码
# 1. 创建索引(如创建"nginx_access_log"索引)
curl -X PUT http://192.168.100.20:9200/nginx_access_log

# 2. 查看所有索引
curl http://192.168.100.20:9200/_cat/indices?v

# 3. 删除索引(谨慎操作,数据不可恢复)
curl -X DELETE http://192.168.100.20:9200/nginx_access_log
2. 数据查询(以官方示例数据"bank"为例)
bash 复制代码
# 1. 下载示例数据
wget https://raw.githubusercontent.com/elastic/elasticsearch/master/docs/src/test/resources/accounts.json

# 2. 导入数据到"bank"索引
curl -H "Content-Type: application/json" -XPOST "192.168.100.20:9200/bank/_doc/_bulk?pretty&refresh" --data-binary "@accounts.json"

# 3. 基础查询(查询所有数据,按account_number升序,返回10条)
 v

# 4. 条件查询(查询余额20000-30000的账户)
curl -X GET "192.168.100.20:9200/bank/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "bool": {
      "must": { "match_all": {} },
      "filter": {
        "range": {
          "balance": { "gte": 20000, "lte": 30000 }
        }
      }
    }
  }
}
'

五、Elasticsearch-Head部署(图形化管理工具)

Elasticsearch-Head是ES的开源图形化工具,支持集群监控、索引管理、数据浏览、查询可视化,需依赖Node.js运行。

5.1 安装Node.js(以192.168.100.20为例)

bash 复制代码
# 下载Node.js 10.15.0(适配ES-Head)
wget https://nodejs.org/dist/v10.15.0/node-v10.15.0-linux-x64.tar.xz

# 解压到/usr/local目录
tar -xJvf node-v10.15.0-linux-x64.tar.xz -C /usr/local/

# 重命名并创建软链接(便于全局调用)
mv /usr/local/node-v10.15.0-linux-x64/ /usr/local/nodejs
ln -s /usr/local/nodejs/bin/node /usr/bin/node
ln -s /usr/local/nodejs/bin/npm /usr/bin/npm

# 验证安装
node -v  # 预期输出v10.15.0
npm -v   # 预期输出6.4.1

5.2 安装与启动ES-Head

bash 复制代码
# 1. 安装Git(用于克隆ES-Head源码)
yum install git -y

# 2. 克隆ES-Head源码
git clone https://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head

# 3. 安装依赖(若下载缓慢,可切换淘宝镜像:npm config set registry https://registry.npm.taobao.org)
npm install -g grunt-cli  # 安装Grunt构建工具
npm install
#安装可能有很多错误,我这里出现了下面的错误(重点是注意红色的ERR!,黄色的WARN不用管)
npm install phantomjs-prebuilt@2.1.16 --ignore-script

# 4. 解决ES跨域问题(修改所有ES节点的elasticsearch.yml,添加跨域配置)
cat >> /etc/elasticsearch/elasticsearch.yml << EOF
http.cors.enabled: true    # 允许跨域访问
http.cors.allow-origin: "*"# 允许所有来源访问(生产环境建议限制IP)
EOF

# 5. 重启ES服务
systemctl restart elasticsearch

# 6. 后台启动ES-Head
nohup npm run start &

5.3 访问与使用ES-Head

  1. 打开浏览器,输入http://192.168.100.20:9100(ES-Head默认端口9100)。
  2. 在页面顶部"Elasticsearch"输入框中,填写ES节点地址(如http://192.168.100.20:9200),点击"连接"。
  3. 连接成功后,可查看:
    • 集群概览:集群健康状态(green/yellow/red)、节点数量。
    • 索引管理:创建/删除索引、查看索引分片与副本。
    • 数据浏览:查看索引中的文档数据,支持条件筛选。
    • 基本查询:可视化构建查询语句,验证查询结果。

六、Logstash部署与日志采集

6.1 Logstash简介

Logstash是日志采集与处理工具,核心流程为"Input→Filter→Output":

  • Input:采集日志源(如文件、Redis、Beats)。
  • Filter:日志清洗与转换(如提取字段、过滤无用数据、格式标准化)。
  • Output:将处理后的日志输出到目标(如ES、文件、Kafka)。

6.2 Logstash部署(以192.168.100.30为例)

1. 安装Logstash
bash 复制代码
# 下载Logstash 6.5.2(与ES版本一致,避免兼容性问题)
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.5.2.rpm

# 安装
rpm -ivh logstash-6.5.2.rpm
2. 配置Logstash主配置文件

编辑/etc/logstash/logstash.yml,关键配置如下:

yaml 复制代码
# 数据存储路径
path.data: /var/lib/logstash
# 配置文件目录(Logstash会加载此目录下的.conf文件)
path.config: /etc/logstash/conf.d/
# 日志存储路径
path.logs: /var/log/logstash
# 绑定IP(用于监控,可选)
http.host: "192.168.100.30"
3. 测试Logstash基础功能

创建测试配置文件/etc/logstash/conf.d/test.conf,实现"标准输入→标准输出":

yaml 复制代码
input {
  stdin {}  # 从标准输入采集数据
}
filter {
  # 暂不处理
}
output {
  stdout { codec => rubydebug }  # 以JSON格式输出到标准输出
}

启动测试:

bash 复制代码
# 切换到Logstash二进制目录
cd /usr/share/logstash/bin

# 测试配置文件语法(返回"Config Validation Result: OK"表示正常)
./logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/test.conf -t

# 启动Logstash并加载测试配置
./logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/test.conf
#测试能启动成功后,出现Successfully started Logstash API endpoint {:port=>9600}
#则ctrl+c取消,则关闭了

# 测试:输入任意字符(如"hello elk"),会输出JSON格式的日志数据

6.3 日志采集实战

1. 采集系统messages日志(输出到ES)

创建配置文件/etc/logstash/conf.d/messages.conf

yaml 复制代码
input {
  file {
    path => "/var/log/messages"  # 日志文件路径
    start_position => "beginning"  # 从文件开头开始采集(默认从结尾)
    sincedb_path => "/dev/null"  # 禁用sincedb(避免记录采集位置,每次重启重新采集)
  }
}
filter {
  # 提取日志中的时间戳(匹配messages日志格式:Jan 22 17:39:01)
  grok {
    match => { "message" => "%{MONTH:month} %{MONTHDAY:day} %{TIME:time} %{HOSTNAME:hostname} %{WORD:process}:%{GREEDYDATA:content}" }
  }
  # 组合时间戳为标准格式
  mutate {
    add_field => { "timestamp" => "%{month} %{day} %{time} %{+YYYY}" }
  }
  date {
    match => [ "timestamp", "MMM dd HH:mm:ss yyyy" ]
    target => "@timestamp"  # 覆盖默认时间戳字段
  }
}
output {
  elasticsearch {
    hosts => ["192.168.100.10:9200", "192.168.100.20:9200"]  # ES集群节点
    index => "messages-%{+YYYY.MM.dd}"  # 索引名称(按日期分片)
  }
}

启动采集:

bash 复制代码
# 后台启动Logstash(-r参数支持动态加载配置,修改配置无需重启)
nohup /usr/share/logstash/bin/logstash --path.settings /etc/logstash -r -f /etc/logstash/conf.d/messages.conf &

# 验证:在ES-Head中查看"messages-当前日期"索引,是否有新数据
2. 采集多日志源(messages与yum.log,分别输出到ES不同索引)

创建配置文件/etc/logstash/conf.d/multi_logs.conf

yaml 复制代码
input {
  # 采集messages日志
  file {
    path => "/var/log/messages"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    type => "messages"  # 自定义类型,用于Output区分
  }
  # 采集yum.log
  file {
    path => "/var/log/yum.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    type => "yum"  # 自定义类型
  }
}
filter {
  # 根据日志类型分别处理
  if [type] == "messages" {
    grok {
      match => { "message" => "%{MONTH:month} %{MONTHDAY:day} %{TIME:time} %{HOSTNAME:hostname} %{WORD:process}:%{GREEDYDATA:content}" }
    }
    mutate { add_field => { "timestamp" => "%{month} %{day} %{time} %{+YYYY}" } }
    date { match => [ "timestamp", "MMM dd HH:mm:ss yyyy" ] target => "@timestamp" }
  }
  if [type] == "yum" {
    grok {
      match => { "message" => "%{DATE:date} %{TIME:time} %{WORD:action}:%{GREEDYDATA:package}" }
    }
    mutate { add_field => { "timestamp" => "%{date} %{time}" } }
    date { match => [ "timestamp", "yyyy-MM-dd HH:mm:ss" ] target => "@timestamp" }
  }
}
output {
  # 根据类型输出到不同ES索引
  if [type] == "messages" {
    elasticsearch {
      hosts => ["192.168.100.10:9200", "192.168.100.20:9200"]
      index => "messages-%{+YYYY.MM.dd}"
    }
  }
  if [type] == "yum" {
    elasticsearch {
      hosts => ["192.168.100.10:9200", "192.168.100.20:9200"]
      index => "yum-%{+YYYY.MM.dd}"
    }
  }
}

启动采集后,可在ES-Head中分别查看"messages-当前日期"和"yum-当前日期"索引的日志数据。

七、Kibana部署与日志可视化(补充文档缺失部分)

7.1 Kibana简介

Kibana是ELK的可视化组件,提供Web界面,支持:

  • 索引模式管理:关联ES中的索引,用于数据查询。
  • Discover(探索):实时查询与筛选ES中的日志数据。
  • Visualize(可视化):创建图表(折线图、柱状图、饼图等)。
  • Dashboard(仪表盘):组合多个可视化图表,形成完整报表(如"系统日志监控仪表盘""业务PV/UV仪表盘")。

7.2 Kibana部署(以192.168.100.10为例)

1. 安装Kibana
bash 复制代码
# 下载Kibana 6.5.2(与ES版本一致)
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.2-x86_64.rpm

# 安装
rpm -ivh kibana-6.5.2-x86_64.rpm
#扩展怎么查询已安装的rpm包和怎么删除rpma包
查询
rpm -qa | gerp +包名
删除 
rpm -e 
2. 配置Kibana

编辑/etc/kibana/kibana.yml,关键配置如下:

yaml 复制代码
# 绑定IP(允许外部访问)
server.host: "0.0.0.0"
# ES集群地址(Kibana需连接ES获取数据)
elasticsearch.url: "http://192.168.100.20:9200"
# Kibana日志存储路径
logging.dest: /var/log/kibana/kibana.log
# 索引模式(Kibana自身配置存储在ES的索引,默认.kibana)
kibana.index: ".kibana"
3. 启动Kibana
bash 复制代码
# 启动并设置开机自启
systemctl start kibana
systemctl enable kibana

# 验证端口(Kibana默认端口5601)
netstat -ntlup | grep 5601

7.3 Kibana基础使用

1. 访问Kibana

打开浏览器,输入http://192.168.100.10:5601,首次访问需创建"索引模式":

  1. 点击左侧"Management"→"Index Patterns"→"Create index pattern"。
  2. 输入索引名称(如"messages-*",匹配所有messages日志索引),点击"Next step"。
  3. 选择时间戳字段(如"@timestamp"),点击"Create index pattern"。
2. 探索日志数据(Discover)
  1. 点击左侧"Discover",在顶部时间范围选择器中设置时间(如"Last 24 hours")。
  2. 下方将展示ES中"messages-*"索引的日志数据,支持:
    • 关键词搜索(如搜索"sshd"查看SSH相关日志)。
    • 字段筛选(如只显示"hostname""content"字段)。
3. 创建可视化图表(Visualize)

以创建"messages日志按小时统计柱状图"为例:

  1. 点击左侧"Visualize"→"Create a visualization"→选择"Vertical Bar Chart"。
  2. 选择索引模式(如"messages-*"),进入图表配置页。
  3. 在"Buckets"→"X-Axis"中,选择"Date Histogram",字段选择"@timestamp",间隔设为"Hourly",点击"Apply changes"。
  4. 图表将展示每小时messages日志的数量,可点击"Save"保存图表。
4. 创建仪表盘(Dashboard)
  1. 点击左侧"Dashboard"→"Create a dashboard"→"Add"。
  2. 选择之前保存的可视化图表(如"messages日志按小时统计"),点击"Add"。
  3. 可调整图表位置与大小,点击"Save"保存仪表盘(如命名为"系统日志监控")。

八、Filebeat部署(轻量级采集补充)

8.1 Filebeat简介

Filebeat是Elastic推出的轻量级日志采集器,相比Logstash,具有资源占用低(内存≤100MB)、启动快、稳定性高的特点,适合部署在大量业务服务器上采集日志,再将日志发送至Logstash或ES。

8.2 Filebeat部署(以192.168.100.40为例)

1. 安装Filebeat
bash 复制代码
# 下载Filebeat 6.5.2(与ES版本一致)
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.2-x86_64.rpm

# 安装
rpm -ivh filebeat-6.5.2-x86_64.rpm
2. 配置Filebeat(采集Nginx访问日志,发送至Logstash)

编辑/etc/filebeat/filebeat.yml,关键配置如下:

yaml 复制代码
filebeat.inputs:
- type: log  # 日志类型
  enabled: true
  paths:
    - /usr/local/nginx/logs/access.log  # Nginx访问日志路径
  fields:
    log_type: nginx_access  # 自定义字段,用于区分日志类型

# 输出到Logstash(而非直接输出到ES,便于Logstash统一处理)
output.logstash:
  hosts: ["192.168.100.30:5044"]  # Logstash的Beats输入端口(需在Logstash配置中开启)

# 禁用Elasticsearch输出(默认开启,需关闭)
# output.elasticsearch:
#   hosts: ["localhost:9200"]
3. 配置Logstash接收Filebeat数据

在Logstash服务器(192.168.100.30)上创建配置文件/etc/logstash/conf.d/filebeat.conf

yaml 复制代码
input {
  beats {
    port => 5044  # 监听5044端口,接收Filebeat数据
  }
}
filter {
  # 提取Nginx访问日志字段(匹配格式:192.168.1.1 - - [22/Jan/2024:17:39:01 +0800] "GET / HTTP/1.1" 200 1234)
  grok {
    match => { "message" => "%{IPORHOST:client_ip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:status} %{NUMBER:body_bytes_sent}" }
  }
  date {
    match => [ "timestamp", "dd/MMM/yyyy:H:m:s Z" ]
    target => "@timestamp"
  }
}
output {
  elasticsearch {
    hosts => ["192.168.100.10:9200", "192.168.100.20:9200"]
    index => "nginx_access-%{+YYYY.MM.dd}"
  }
}
4. 启动Filebeat与Logstash
bash 复制代码
# 启动Filebeat
systemctl start filebeat
systemctl enable filebeat

# 重启Logstash(加载新配置)
pkill -f logstash
nohup /usr/share/logstash/bin/logstash --path.settings /etc/logstash -r -f /etc/logstash/conf.d/filebeat.conf &

# 验证:在Kibana中查看"nginx_access-当前日期"索引,是否有Nginx访问日志

九、常见问题与解决方案

9.1 ES启动失败

  • 问题1max virtual memory areas vm.max_map_count [65530] is too low

    解决方案:临时调整内核参数sysctl -w vm.max_map_count=262144,永久调整需编辑/etc/sysctl.conf,添加vm.max_map_count=262144,执行sysctl -p生效。

  • 问题2 :ES进程启动后很快退出,日志显示"insufficient memory"。

    解决方案:修改ES堆内存,编辑/etc/elasticsearch/jvm.options,调整-Xms1g-Xmx1g(建议设为系统内存的1/2,且不超过32GB)。

9.2 ES-Head无法连接ES

  • 问题 :ES-Head显示"未连接",控制台报跨域错误。
    解决方案:确认ES节点的elasticsearch.yml中已添加跨域配置(http.cors.enabled: truehttp.cors.allow-origin: "*"),并重启ES服务。

9.3 Logstash采集日志无数据

  • 问题 :Logstash启动正常,但ES中无日志数据。
    解决方案:
    1. 检查Logstash配置文件路径是否正确(path.config是否指向/etc/logstash/conf.d/)。
    2. 查看Logstash日志(/var/log/logstash/logstash-plain.log),排查是否有配置错误或权限问题(如日志文件无法读取)。
    3. 确认ES集群地址正确,且Logstash服务器能访问ES的9200端口。

十、总结与扩展建议

10.1 总结

ELK系统通过"采集(Logstash/Filebeat)→存储与分析(ES)→可视化(Kibana)"的流程,完美解决了传统日志管理的痛点,可实现:

  • 多服务器日志集中化存储。
  • 复杂查询与多维度统计(如按时间、IP、日志类型筛选)。
  • 直观的图表展示(如PV/UV趋势、错误日志统计)。

10.2 扩展建议

  1. 性能优化
    • ES集群:增加数据节点,调整分片数量(建议每个分片大小50-100GB),开启分片均衡。
    • Logstash:使用多管道(pipelines)处理不同日志源,避免单管道压力过大;启用持久化队列(Persistent Queues),防止日志丢失。
  2. 高可用
    • ES集群:确保副本数≥1,主节点数≥3,避免"脑裂"。
    • Kibana:使用Nginx反向代理实现多实例负载均衡。
  3. 日志归档
    • 对ES中过期的日志索引,通过Kibana或ES API定期删除,或使用Elasticsearch Curator工具自动管理索引生命周期。
  4. 安全加固
    • ES:开启HTTPS加密,配置用户认证(使用X-Pack插件)。
    • Kibana:配置访问控制,限制仅指定IP可访问。

为了方便你后续部署和维护ELK系统,我可以帮你整理一份ELK部署操作手册,包含各组件的详细命令、配置文件模板、常见问题排查步骤,你需要吗?

相关推荐
fangzhanpeng1685 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心8 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u01030552713 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u01030552714 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝15 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u01030552715 天前
Java图像处理实战指南
人工智能·1024程序员节
u01030552716 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u01030552718 天前
Java实用类应用精讲
人工智能·1024程序员节
u01030552719 天前
Java I/O核心操作实战
人工智能·1024程序员节
u01030552720 天前
ArrayList操作详解与实战应用
人工智能·1024程序员节