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部署操作手册,包含各组件的详细命令、配置文件模板、常见问题排查步骤,你需要吗?

相关推荐
小马哥编程15 小时前
【软考架构】架构风格:针对规则系统体系架构风格,举一个经典案例
1024程序员节
❀͜͡傀儡师15 小时前
Spring Boot 4.0.0-RC1 已经正式发布
1024程序员节·springboot4.0.0·framework7.0.0
fenglllle15 小时前
http trailer 与 http2
http·wireshark·1024程序员节
程序员三明治15 小时前
Spring AOP:注解配置与XML配置双实战
java·后端·spring·代理模式·aop·1024程序员节
王嘉俊92515 小时前
HarmonyOS 超级终端与服务卡片开发:打造无缝多设备交互体验
华为·架构·harmonyos·arkts·1024程序员节
红宝村村长15 小时前
【学习笔记】大模型
深度学习·1024程序员节
2501_9293826515 小时前
[Switch大气层]纯净版+特斯拉版 20.5.0大气层1.9.5心悦整合包 固件 工具 插件 前端等资源合集
前端·游戏·switch·1024程序员节·单机游戏
limingade15 小时前
手机摄像头如何识别体检的色盲检查图的数字和图案(下)
android·1024程序员节·色盲检查图·手机摄像头识别色盲图案·android识别色盲检测卡·色盲色弱检测卡