文章目录
- 前言
- 理论部分
- 1_ELK日志分析系统概述
- 1.1_核心组件角色
- 2_Elasticsearch介绍
- 2.1_核心功能
- 2.2_架构与关键概念
- 2.3_使用场景
- 2.4_优缺点
- 3_Logstash介绍
- 3.1_三大处理阶段
- 3.2_使用场景
- 3.3_轻量级替代方案
- 4_Kibana介绍
- 4.1_核心功能
- 4.2_使用场景
- 4.3_工作原理
- 5_为何使用ELK进行数据可视化?
- 6_完整日志系统基本特征
- 7_ELK 的工作原理⭐
- 实验部分
- 1_ELK系统部署
- 1.1_环境准备
- 1.2_Elasticsearch集群部署
- 1.3_安装Elasticsearch-head
- 1.4_Logstash 部署
- ① 安装Logstash
- ② 测试Logstash
- ③ 配置系统日志采集
- 1.5_Kibana 部署
- 2_Filebeat+ELK部署
- 结语
前言
本文档系统梳理了ELK 企业级日志分析系统的核心组成、工作原理、部署流程及扩展架构(如 Filebeat + ELK)。内容涵盖 Elasticsearch、Logstash、Kibana 三大组件的功能特性、使用场景与配置细节,并提供完整的实验部署步骤,适用于日志集中化管理、实时监控、安全分析等企业级应用场景。
- ELK 概述与核心组件功能
- Elasticsearch 架构、特点与集群部署
- Logstash 数据采集、过滤与输出机制
- Kibana 可视化与交互式分析能力
- 完整 ELK 系统部署实验(含 Apache 日志接入)
- Filebeat 轻量级日志采集器集成(EFLK 架构)
理论部分
1_ELK日志分析系统概述
ELK 是一套开源的日志集中处理解决方案,由Elasticsearch、Logstash、Kibana三大组件构成,用于实现日志的收集、存储、搜索、分析与可视化。适用于分布式系统中多源日志的统一管理。
1.1_核心组件角色
| 组件 | 功能 | 技术特点 |
|---|---|---|
| Elasticsearch | 分布式搜索引擎,负责日志存储与全文检索 | 基于 Lucene,RESTful API,支持高可用集群 |
| Logstash | 数据采集与处理管道 | 支持 input → filter → output 流程,插件丰富 |
| Kibana | 数据可视化前端 | 提供图表、仪表盘、告警、机器学习等高级功能 |
适用场景:当企业拥有数十至上百台服务器,需集中分析系统/应用/安全日志时,传统
grep工具效率低下,ELK 可提供高效、可扩展的日志分析平台。
2_Elasticsearch介绍
Elasticsearch 是一个基于Lucene的分布式、实时、可扩展的搜索引擎,使用 Java 开发,通过RESTful API提供全文搜索与结构化查询能力。
https://blog.csdn.net/qq_17153885/article/details/135323449
2.1_核心功能
- 全文搜索:快速索引与检索文本数据
- 实时分析:数据写入后立即可查
- 分布式架构:支持横向扩展与高可用
- RESTful API:HTTP 接口便于集成
2.2_架构与关键概念
Cluster(集群) └── Node(节点):主节点 / 数据节点 └── Index(索引) ≈ 数据库表 ├── Shard(分片):数据分片,提升并发与容量 └── Replica(副本):冗余备份,提高容错性 └── Document(文档):JSON 格式最小数据单元① 集群健康状态
| 状态 | 含义 |
|---|---|
| green | 所有主分片与副本均正常 |
| yellow | 主分片正常,副本缺失(单节点常见) |
| red | 主分片丢失,数据不完整 |
2.3_使用场景
- 日志与事件流分析(配合 Logstash/Kibana)
- 电商商品搜索、社交内容检索
- 系统监控与告警
- 商业智能(BI)与趋势分析
2.4_优缺点
优点:高性能、易扩展、灵活查询、开源社区活跃
缺点:内存消耗大、DSL 学习曲线陡峭、大规模集群运维复杂
3_Logstash介绍
Logstash是用Ruby编写、运行于JVM的数据处理管道,支持从多源采集、过滤转换、实时输出到目标系统(如 ES)。充当“日志搬运工”的角色。
3.1_三大处理阶段
Logstash 配置文件由三个核心部分组成,定义了数据的输入 → 处理 → 输出流程:
| 部分 | 作用 | 常见用法 |
|---|---|---|
| input | 从数据源采集原始日志 | file(日志文件)beats(Filebeat)kafka、syslog等 |
| filter(可选) | 对数据清洗与增强 | 使用grok(正则解析)date(时间格式化)mutate(字段修改)等插件 |
| output | 将处理后的数据发送到目标系统 | elasticsearch(主输出)file、kafka、stdout(调试)等 |
数据清洗:数据处理,包括过滤和格式化、去重等
配置模板:③ 配置系统日志采集
input { ... } filter { ... } # 按需启用 output { ... }示例场景:
从Apache日志文件(input)提取客户端IP和状态码(filter),再写入Elasticsearch(output)。
3.2_使用场景
- 集中收集系统/应用日志
- 日志格式标准化(如解析 Nginx/Apache 日志)
- 多目的地分发(ES + S3 + HDFS)
3.3_轻量级替代方案
① Filebeat
- 轻量级日志 shipper,资源占用低
- 常用于EFLK 架构(Filebeat → Logstash → ES → Kibana)
- 优势:支持 ACK 机制、背压感知、本地缓冲
ACK机制:发送日志后需接收方确认,确保不丢失。
背压感知:下游处理慢时自动减速,防止崩溃。
本地缓冲:日志位置和未发数据暂存本地,保障可靠传输。
② Fluentd
- 更轻量、高效,常用于EFK 架构
- 在 Kubernetes 中通过 DaemonSet 部署,采集容器日志。
[!question] 为何引入消息队列?
在高并发场景下,使用Redis/Kafka/RabbitMQ作为缓冲层,可削峰填谷、解耦 Logstash 与数据源,防止日志丢失。
4_Kibana介绍
Kibana 是 Elasticsearch 的官方可视化工具,提供 Web 界面用于探索、分析、展示存储在 ES 中的数据。
4.1_核心功能
- Visualizations:数据可视化,折线图、饼图、地图等。
- Dashboards:仪表板,多图表聚合展示
- Log Management:日志管理
- Discover:原始日志搜索(支持 KQL / Lucene 语法)
- TSVB:时间序列分析(Time Series Analytics)
- Alerting:阈值告警
- Monitoring:监控
- Security:RBAC 权限控制,安全和访问控制(Security & Access Control)
- Machine Learning:机器学习,异常检测。(新技术:Ai智能运维、Aiops)
- Canvas & Reporting:自定义报告导出(PDF/CSV)
- Maps & Geospatial Visualization:地图和地理可视化
4.2_使用场景
- 运维日志排查
- 实时业务监控(如用户行为、交易流水)
- 安全威胁检测(结合 Elastic Security)
- 自动化异常预警
4.3_工作原理
Kibana不存储数据,仅作为 ES 的前端查询与展示层。
5_为何使用ELK进行数据可视化?
- 日志分散难查:传统
grep在多服务器环境下效率极低。 - 集中分析需求:ELK将日志统一收集、索引,支持快速全文检索与聚合统计。
- 直观洞察问题:Kibana 提供图表、仪表盘,将原始日志转化为趋势、异常、流量等可视化信息。
- 实时监控告警:可基于可视化数据设置阈值告警,及时响应故障或安全事件。
- 降低使用门槛:非技术人员也能通过图形界面探索数据,无需写复杂命令。
简言之:从“看日志”升级为“看懂日志”。
以下是针对第6、7部分的简明整理,格式与全文风格一致:
6_完整日志系统基本特征
一个企业级的完整日志系统应具备以下五大核心能力:
| 特征 | 说明 |
|---|---|
| 收集(Collect) | 支持从多源(服务器、应用、网络设备等)采集日志 |
| 传输(Transport) | 稳定、可靠地将日志解析、过滤并传至存储系统(支持缓冲/队列防丢失) |
| 存储(Store) | 高效存储海量日志,支持快速检索与长期归档 |
| 分析(Analyze) | 提供 UI 或查询语言,支持搜索、聚合、统计与关联分析 |
| 告警(Alert) | 可配置规则,对异常或关键事件自动触发通知(邮件、Webhook 等) |
ELK 正是围绕这五个特征构建的一站式解决方案。
7_ELK 的工作原理⭐
ELK 的数据流转遵循采集 → 处理 → 存储 → 展示的四步流程:
核心步骤说明:
- 采集:在各服务器部署Logstash或更轻量的Filebeat,实时读取日志文件。
- 处理:Logstash 对原始日志进行解析(如提取 IP、状态码)、格式化、添加字段等。
- 存储:处理后的结构化数据发送到Elasticsearch 集群,按索引(index)存储并建立全文索引。
- 展示:Kibana连接 Elasticsearch,用户通过 Web 界面创建可视化图表、仪表盘,实现交互式分析。
关键优势:端到端自动化、近实时(秒级延迟)、支持 PB 级日志规模、开放可扩展。
实验部分
| 节点 | IP 地址 | 角色 | 配置 |
|---|---|---|---|
| node1 | 192.168.100.1 | Elasticsearch + Kibana | 2核/4G |
| node2 | 192.168.100.2 | Elasticsearch | 2核/4G |
| node3 | 192.168.100.3 | Logstash + mysql和tomcat | - |
| node4 | 192.168.100.4 | Filebeat | - |
| 运行环境 |
- OS:Centos 7.9
- JDK:java-1.8.0-openjdk
- ELK:7.8.1(tar包)
ELK官方网站(中文) :
https://www.elastic.co/cn/downloads/
1_ELK系统部署
1.1_环境准备
所有节点
systemctl stop firewalld setenforce0关闭防火墙与 SELinux,避免网络和权限问题。
# 设置主机名(示例:node2)hostnamectl set-hostname apache# 配置hosts解析echo"192.168.100.1 node1">>/etc/hostsecho"192.168.100.2 node2">>/etc/hostsyum -yinstalljava-1.8.0-openjdk java -version确保 Java 环境(OpenJDK 1.8+)
1.2_Elasticsearch集群部署
node1 & node2
① 安装Elasticsearch
- 下载tar包
cd/opt/wgethttps://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.1-linux-x86_64.tar.gz- 校验下载文件完整性
wgethttps://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.1-linux-x86_64.tar.gz.sha512 shasum -a512-c elasticsearch-7.8.1-linux-x86_64.tar.gz.sha512- 解压到安装路径
tar-xzvf elasticsearch-7.8.1-linux-x86_64.tar.gz -C /usr/local/mv/usr/local/elasticsearch-7.8.1 /usr/local/elasticsearch- 权限相关配置
useradd-mU elasticsearchchown-R elasticsearch:elasticsearch /usr/local/elasticsearch*- rpm包安装(备选)
cd/optrpm-ivh elasticsearch-7.8.1.rpm systemctl daemon-reload systemctlenableelasticsearch.service② 配置 elasticsearch.yml
- 修改elasticsearch主配置文件
cd/usr/local/elasticsearchcpconfig/elasticsearch.yml config/elasticsearch.yml_bakvimconfig/elasticsearch.yml# 以下内容行取消注释cluster.name:my-elk-cluster# 17行,集群名字。node.name:node1# 23行,节点名字,node2上改为node2。node.master:true# 添加 设置该节点为主节点候选人node.data:true# 添加 设置该节点可以存储数据path.data:/data/elk_data# 33行,数据库存放路径path.logs:/var/log/elasticsearch/# 37行,日志存放路径。bootstrap.memory_lock:false# 43行,启动时不锁定内存。network.host:0.0.0.0# 55行,监听地址为所有地址。http.port:9200# 59行,默认监听端口为9200。# discovery.zen.ping.unicast.hosts: ["node1", "node2"] # 68行,6.8.1 集群通过单播实现,指定要发现的节点 node1、node2。discovery.seed_hosts:["192.168.100.1:9300","192.168.100.2:9300"]# 68行,7.8.1,发现节点。cluster.initial_master_nodes:["node1","node2"]#72行,7.8.1,候选主节点。grep-v"^#"config/elasticsearch.yml③ 创建数据目录并授权
- 数据源目录
mkdir-p /data/elk_datachown-R elasticsearch:elasticsearch /data/elk_data/- 日志目录
mkdir/var/log/elasticsearchchown-R elasticsearch:elasticsearch /var/log/elasticsearch④ 启动并验证1
# 交互运行测试看有没有报错su- elasticsearch /usr/local/elasticsearch/bin/elasticsearch# 测试没什么问题可以放后台运行sudo-u elasticsearchnohup/usr/local/elasticsearch/bin/elasticsearch -d -p /usr/local/elasticsearch/pid.txt&sudo-u elasticsearch ss -antp|grep9200访问
http://192.168.100.1:9200/_cluster/health?pretty应返回"status":"green"
1.3_安装Elasticsearch-head
可选,node1 && node2
① 安装Node.js
node.js安装包:
https://nodejs.org/en/download
tarzxvf node-v8.2.1.tar.gzcdnode-v8.2.1 ./configure&&make&&makeinstall② 安装PhantomJS
tarjxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/cp/usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/③ 安装head插件
tarzxvf elasticsearch-head.tar.gz -C /usr/local/src/cd/usr/local/src/elasticsearch-head/npminstall④ 修改ES配置支持跨域
# /etc/elasticsearch/elasticsearch.yml 末尾追加http.cors.enabled:truehttp.cors.allow-origin:"*"systemctl restart elasticsearch⑤ 启动head服务
cd/usr/local/src/elasticsearch-head/npmrun start&⑥ 通过 Elasticsearch-head查看Elasticsearch信息
监听端口9100,访问
http://192.168.100.1:9100可图形化管理集群。
- 连接ES集群
连接按钮前输入http://192.168.100.1:9200/→点击连接
| RESTful API的基本格式 | |
|---|---|
GET /index/doc_type/id | 用于创建新的文档 |
POST /index/doc_type/ | 用于获取指定ID的文档 |
PUT /index/doc_type/id | 用于更新指定ID的文档 |
DELETE /index/doc_type/id | 用于删除指定ID的文档 |
GET /index/doc_type/_search?q=field:value | 用于搜索包含特定字段和值的文档 |
⑦ 插入索引
- 往Elasticsearch插入一条测试数据
新版本(7.x ~ 8.x)
curl-X PUT'localhost:9200/index-demo1/_doc/1?pretty'\-H'Content-Type: application/json'\-d'{"user":"zhangsan","mesg":"hello world"}'| 部分 | 含义 |
|---|---|
curl | 命令行发 HTTP 请求 |
-X PUT | 创建或更新一条数据 |
localhost:9200 | Elasticsearch 地址 |
index-demo1 | 索引名(相当于数据库表) |
_doc | 类型(新版本不再支持自定义type) |
1 | 文档 ID(这条数据的唯一编号) |
?pretty | 让返回结果好看点(格式化输出) |
-H 'Content-Type...' | 声明发送的是 JSON 数据 |
-d '{...}' | 要存的数据内容 |
| RESTful API 格式 | 用途 |
|---|---|
PUT /index/_doc/id | 用于创建或全量替换指定 ID 的文档(推荐用_doc) |
POST /index/_doc/ | 用于创建新文档,系统自动生成ID |
GET /index/_doc/id | 用于获取指定ID的文档内容 |
DELETE /index/_doc/id | 用于删除指定ID的文档 |
GET /index/_doc/_search?q=field:value | 用于搜索包含特定字段和值的文档 |
- 插完后可以在elasticsearch-head里查看,确认连接和数据是否正常。
1.4_Logstash 部署
node3(apache)
Logstash一般部署在需要监控其日志的服务器。本案例部署在Apache服务器,用于收集Apache日志信息并发送到Elasticsearch。
① 安装Logstash
- 下载tar包
cd/opt/wgethttps://artifacts.elastic.co/downloads/logstash/logstash-7.8.1.tar.gz- 校验下载文件完整性
wgethttps://artifacts.elastic.co/downloads/logstash/logstash-7.8.1.tar.gz.sha512 shasum -a512-c logstash-7.8.1.tar.gz.sha512- 解压到安装路径
tar-xzvf logstash-7.8.1.tar.gz -C /usr/local/mv/usr/local/logstash-7.8.1 /usr/local/logstash- 权限相关配置
useradd-mU logstashchown-R logstash:logstash /usr/local/logstash*- 设置文件寻找路径
cpconfig/pipelines.yml config/pipelines.yml_bakvimconfig/pipelines.yml-pipeline.id:main#9行,启用一个叫main的管道。path.config:"config/conf.d/*.conf"#15行,从 config/conf.d/ 目录下加载所有 .conf 文件。- 设置所有IP都可以监听
cpconfig/logstash.yml config/logstash.yml_bakvimconfig/logstash.ymlhttp.host:0.0.0.0# 118行- rpm包安装(备选)
rpm-ivh logstash-7.8.1.rpmln-s /usr/share/logstash/bin/logstash /usr/local/bin/ systemctlenablelogstash② 测试Logstash
- 进入logstash软件工作目录
cd/usr/local/logstash- 输入采用标准输入,输出采用标准输出(类似管道)
bin/logstash -e'input { stdin{} } output { stdout{} }'- 使用rubydebug输出详细格式显示,codec为一种编解码器。
bin/logstash -e'input { stdin{} } output { stdout{ codec=>rubydebug } }'输入任意文本或域名,应输出带时间戳、host、message 的 JSON。
- 使用Logstash将信息写入Elasticsearch中。
bin/logstash -e'input { stdin{} } output { elasticsearch { hosts=>["192.168.100.1:9200"] } }'结果不在标准输出显示,而是发送至Elasticsearch中,可浏览器访问
http://192.168.100.1:9100/查看索引信息和数据浏览(需要安装head)。
③ 配置系统日志采集
3.1_三大处理阶段
- 编辑配置文件
mkdirconfig/conf.dvimconfig/conf.d/system.confinput { file { path => "/var/log/messages" type => "system" start_position => "beginning" } } output { elasticsearch { hosts => ["192.168.100.1:9200"] index => "system-%{+YYYY.MM.dd}" } }
path:指定要收集的日志的位置type:自定义日志类型标识start_position":从什么位置收集"beginning":开始位置elasticsearch {:输出到EShosts => ...:指定ES服务器的地址和端口index => ...:指定输出到ES的索引格式
- 给采集的信息源赋权
chmod+r /var/log/messages④ 启动并验证1
# 交互运行测试看有没有报错su- logstash /usr/local/logstash/bin/logstash --path.settings /usr/local/logstash/config# 测试没什么问题可以放后台运行sudo-u logstashnohup/usr/local/logstash/bin/logstash\--path.settings /usr/local/logstash/config\--daemon&# 查看启动日志tail-f logs/logstash-plain.log ss -tulnp|greplogstashtcp6 0 0 :::5044 :::* LISTEN 1234/java tcp6 0 0 :::9600 :::* LISTEN 1234/java1.5_Kibana 部署
官方网站 :
https://www.elastic.co/cn/downloads/kibana/
node1
① 安装与配置
- 下载tar包
wgethttps://artifacts.elastic.co/downloads/kibana/kibana-7.8.1-linux-x86_64.tar.gz- 校验下载文件完整性
wgethttps://artifacts.elastic.co/downloads/elasticsearch/kibana-7.8.1-linux-x86_64.tar.gz.sha512 shasum -a512-c kibana-linux-x86_64.tar.gz.sha512- 解压到安装路径
tar-xzvf kibana-7.8.1-linux-x86_64.tar.gz -C /usr/loca/- rpm包安装(备选)
rpm-ivh kibana-7.8.1-x86_64.rpm- 设置Kibana主配置文件
cp/etc/kibana/kibana.yml /etc/kibana/kibana.yml_bakvim/etc/kibana/kibana.ymlserver.port:5601server.host:"0.0.0.0"elasticsearch.hosts:["http://192.168.100.1:9200"]kibana.index:".kibana"
server.port::2行,监听端口。server.host::7行,监听地址。elasticsearch.hosts::28行,和ES建立连接的地址和端口kibana.index::37行,在ES中添加.kibana索引
② 启动服务
systemctl start kibana systemctlenablekibananetstat-antp|grep5601③ 验证与创建索引模式
- 浏览器访问
http://192.168.100.1:5601→Try our sample data - Management→Index Pattern
- Create index pattern→Index pattern:
system-*→Next step - Time Filter field name:
@timestamp→Create index pattern - 进入Discover查看日志
④添加Apache日志
- 将Apache的访问日志、错误日志,添加到Elasticsearch,并通过Kibana显示。
vim/etc/logstash/conf.d/apache_log.confinput { file { path => "/etc/httpd/logs/access_log" type => "access" start_position => "beginning" } file { path => "/etc/httpd/logs/error_log" type => "error" start_position => "beginning" } } output { if [type] == "access" { elasticsearch { hosts => ["192.168.100.1:9200"] index => "apache_access-%{+YYYY.MM.dd}" } } if [type] == "error" { elasticsearch { hosts => ["192.168.100.1:9200"] index => "apache_error-%{+YYYY.MM.dd}" } } }- 启动并加载logstash配置文件
logstash -f /etc/logstash/conf.d/apache_log.conf在Kibana中分别创建
apache_access-*和apache_error-*索引模式。
- 浏览器访问
http://192.168.100.1:5601 - Management→Index Pattern
- Create index pattern→Index pattern:
apache_access-*、apache_error-*→Next step
- Time Filter field name:
@timestamp→Create index pattern - Discover→Add a filter:
apache_error-*、apache_access-*→可以查看相应的图表及日志信息
2_Filebeat+ELK部署
官方网站(中文下载):
https://www.elastic.co/cn/downloads/beats/filebeat
node4(filebeat)
① 安装Filebeat
- 下载tar.gz包
wget-P /opt/ https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.1-linux-x86_64.tar.gz- 解压并安装
tar-zxvf filebeat-7.8.1-linux-x86_64.tar.gzmvfilebeat-7.8.1-linux-x86_64/ /usr/local/filebeat/- 或使用rpm包安装
rpm-ivh filebeat-6.6.1-x86_64.rpm② 配置filebeat
- 修改
filebeat.yml配置文件
if$(whichfilebeat);then#yum安装cd/etc/filebeat/else#源码安装cd/usr/local/filebeat/fimvfilebeat.yml filebeat.yml_bakvimfilebeat.ymlfilebeat.prospectors:-type:logenabled:truepaths:-/var/log/messages-/var/log/*.logfields:service_name:filebeatlog_type:logservice_id:192.168.100.4#--------------Elasticsearch output------------------#(ES方式这里不用,全部注释掉)#----------------Logstash output---------------------output.logstash:hosts:["192.168.100.3:5044"]
filebeat.prospectors::收集数据- type: log:指定log类型,从日志文件中读取消息。- /var/log/messages:指定监控的日志文件fields::可以设置一些参数字段添加到output中hosts::指定logstash的IP和端口
- 启动并加载filebeat配置文件
if$(whichfilebeat);thenfilebeat -e -c filebeat.ymlelse/usr/local/filebeat/filebeat -e -c filebeat.ymlfi③ Logstash配置接收Beats
node(logstash)
- 修改logstash配置文件
vim/etc/logstash/conf.d/filebeat.confinput { beats { port => 5044 } } output { elasticsearch { hosts => ["192.168.100.1:9200"] index => "%{[fields][service_name]}-%{+YYYY.MM.dd}" } stdout { codec => rubydebug } }- 启动并加载logstash配置文件
logstash -f /etc/logstash/conf.d/filebeat.conf④ Kibana创建索引
- Index Pattern:
filebeat-* - Time field:
@timestamp - Discover 中查看日志
结语
ELK 核心价值:解决分布式系统日志分散、检索困难、分析低效的问题,实现集中化、实时化、可视化的日志管理。
关键端口与路径:
- Elasticsearch:
9200(HTTP),配置/etc/elasticsearch/elasticsearch.yml - Logstash:
5044(Beats input),配置/etc/logstash/conf.d/*.conf - Kibana:
5601,配置/etc/kibana/kibana.yml - Filebeat: 配置
/etc/filebeat/filebeat.yml
[!question] 请问 ELK 中 Logstash 和 Filebeat 的定位有何不同?
Logstash功能强大但资源消耗高,适合复杂过滤与多源整合;Filebeat轻量高效,专注日志采集与可靠传输;
通常两者配合使用(Filebeat → Logstash → ES)。
[!question] 为什么 Elasticsearch 集群健康状态为 yellow 仍可正常使用?
yellow 表示主分片完整但副本缺失(如单节点集群),不影响读写,但缺乏高可用性。生产环境建议至少 3 节点以实现 green 状态。
[!question] Kibana 如何实现日志的时间范围筛选?
依赖日志中的@timestamp字段(由 Logstash/Filebeat 自动添加),在 Discover 或 Dashboard 中通过时间选择器动态过滤。
ERROR: [1] bootstrap checks failed [1]: max number of threads [3870] for user [elasticsearch] is too low, increase to at least [4096] ERROR: Elasticsearch did not exit normally - check the logs at /usr/local/elasticsearch/logs/my-elk-cluster.log原因:
Elasticsearch 启动时报错max number of threads [3870] for user [elasticsearch] is too low, increase to at least [4096],是由于系统对elasticsearch用户的进程/线程数限制低于要求值。
解决方法:
- 第一步:编辑
/etc/security/limits.conf,添加
elasticsearch soft nofile 65535 elasticsearch hard nofile 65535 elasticsearch soft nproc 4096 elasticsearch hard nproc 4096- 增加内存映射区域
echo"vm.max_map_count=262144"|sudotee-a /etc/sysctl.conf sysctl -p- 第二步:通过
sudo su - elasticsearch以登录 shell 切换用户 - 第三步:执行
ulimit -u验证输出为4096 - 第四步:在此会话中启动 Elasticsearch,即可通过检查
ulimit-u4096bash: ulimit: max user processes: 无法修改 limit 值: 不允许的操作原因:
手动运行ulimit -u 4096失败并提示“无法修改 limit 值”,是因为当前 shell 无权提升硬限制,且未从 PAM 加载配置。
解决方法:
- 第一步:确保
/etc/pam.d/common-session包含
session required pam_limits.so如果不包含:
echo"session required pam_limits.so"|tee-a /etc/pam.d/common-session- 第二步:必须通过登录 shell(如
su - elasticsearch)切换用户,才能加载limits.conf设置 - 第三步:在该会话中无需手动设置
ulimit,系统已自动应用配置
报错日志↩︎ ↩︎