avatar

Wz Blog

运维学习・持续更新

  • 首页
  • 文章
  • 登录/注册
  • 管理后台
主页 ELK日志系统分析平台
文章

ELK日志系统分析平台

发表于 2026-10-11 更新于 2026-10- 11
作者 Administrator
20~26 分钟 阅读

先一句话总览:

**Elasticsearch是存数据+搜索的仓库;Filebeat是跑腿采集日志;Kibana是可视化看板。三者可以独立跑,但是搭ELK日志平台的时候,就是一套黄金搭档。**

1\. 每个rpm包是什么

① elasticsearch‑7.17.29‑x86_64.rpm

角色:数据库+搜索引擎(仓库)w

* 本质:一个特殊的数据库,专门擅长**快速搜索** 。

* 能干什么:接收日志、把日志存起来,你想查“昨天报错的日志”“某个IP访问记录”,它能秒搜出来。

* 就好比:**一个超大的、带快速检索功能的文件柜** 。

* 能不能独立运行:✅ **完全可以单独用** 。 很多业务只拿ES做搜索,比如网站商品搜索、APP全文检索,根本不用Filebeat、Kibana。

② filebeat‑7.17.29‑x86_64.rpm

角色:日志搬运工(采集客户端)

* 它**不存数据,也不能查数据** 。

* 任务:守在你的服务器上,盯着日志文件(nginx日志、java程序日志、系统日志),一有新日志就读取,然后发给 Elasticsearch(或者Logstash)。

* 大白话:**快递员,专门负责把日志包裹运送到仓库(ES)** 。

* 能不能独立运行:✅ 可以启动,但是单独跑它没有意义。 没有接收方,它采集了日志也无处可送。**它天生就是“采集端”,依附ES做目的地** 。

③ kibana‑7.17.29‑x86_64.rpm

角色:网页看板、操作控制台

* 它**本身不存任何日志数据** ,所有数据都来自 Elasticsearch。

* 给你一个浏览器网页界面:

* 搜日志、看报错;

* 画图表:请求量趋势、错误数量柱状图;

* 还能写DSL查询语句操作ES。

* 大白话:**仓库的前台显示屏,你透过屏幕查看柜子里的东西** 。

* 能不能独立运行:✅ 进程能启动,但是没任何数据。 一旦连不上Elasticsearch,Kibana就是一个空白页面,啥也干不了。

* * *


# 2\. 三者依赖关系(重点!)

谁依赖谁

1. **Filebeat → 必须发给 Elasticsearch** (采集→存储)

2. **Kibana → 必须连接 Elasticsearch** (看板读取ES的数据)

3. **Elasticsearch 谁都不靠,自己就能干活**

依赖链: Filebeat(搬运工) → Elasticsearch(仓库) ← Kibana(网页看板)

组合方案有好几种

1. **全套ELK方案(最常见):Filebeat + Elasticsearch + Kibana**

* Filebeat 在业务服务器上跑,捞日志;

* 送到ES存储;

* 你打开Kibana网页查看、搜索日志。

* 作用:**日志集中管理平台** ,所有服务器日志统一收集、检索、可视化。

2. **只装 Elasticsearch**

* 用来做搜索服务,业务程序直接读写ES,不需要日志采集、不需要看板。

3. **Elasticsearch + Kibana,不要Filebeat**

* 自己写程序把数据推送到ES,再用Kibana看数据。

4. **Filebeat单独装(很少这么用)**

* 只能采集,没有接收端,等于白跑。

* * *


# 3\. 实际能干出来什么效果(举运维场景例子)

比如你有3台web服务器:

* 每台服务器安装 **Filebeat** ,监控 Nginx、Java项目日志;

* 一台机器部署 **Elasticsearch** ,接收三台机器发来的所有日志;

* 同一台或另一台机器部署 **Kibana** ;

你打开浏览器访问Kibana网页:

1. 一下子看到三台服务器所有日志;

2. 一秒搜出包含 `Exception`、`error` 的报错日志;

3. 画出折线图看每分钟报错量;

4. 不用再一台台ssh登录服务器,挨个翻日志文件。

这就是大家常说的 **ELK / EFK 日志平台** 。

* * *


# 4\. 版本号7.17.29注意事项(大坑)

这三个包版本必须完全一模一样! Filebeat 7.17.29、ES 7.17.29、Kibana 7.17.29 版本不一致大概率连不上、报错。

* * *


# 极简总结表格

软件| 身份| 是否可独立运行| 核心作用

---|---|---|---

Elasticsearch| 日志仓库+搜索引擎| ✅ 独立| 存储、检索日志数据

Filebeat| 日志采集搬运工| ⚠️可启动但无意义| 读取服务器本地日志,推送给ES

Kibana| Web可视化看板| ⚠️可启动但无数据| 网页查看、搜索、图表展示ES里的数据


# 配置过程

• 前期部署:

1.准备虚拟机:2核4G

2.关闭防火墙、selinux(getenforce查看,setenforce 0临时关闭)

3.配置三台主机免密(方便传输文件)

4.集群时间同步chronyc

• 集群部署ES:

1.修改默认打开文件限制数:


vim /etc/security/limits.conf

添加:

#soft:软限制,用户可以修改 hard:硬限制,用户修改不了

* soft nofile 65535 #打开的文件数量

* hard nofile 65535

* soft nproc 65535 #打开的进程数量

* hard nproc 65535

#查看当前系统的可打开文件数量:

ulimit -n

#查看当前系统的可打开进程数量:

ulimit -u

2.修改内核参数:


vim /etc/sysctl.conf

最后添加如下内容:

vm.max_map_count=262144

配置虚拟内存的内存映射区数量

tips:同步数据到三个节点

3.修改配置文件:


vim /etc/elasticsearch/elasticsearch.yml

cluster.name: elk #集群名称

node.name: es-01 #指定节点的名称

path.data: /var/lib/elasticsearch #数据路径

path.logs: /var/log/elasticsearch #日志路径

network.host: 0.0.0.0 #ES服务监听的IP地址

discovery.seed_hosts: ["es-01","es-02","es-03"] #主机列表

cluster.initial_master_nodes: ["es-01","es-02","es-03"]

**#第一次启动时,谁有资格选主,仅第一次生效**

4.三台主机启动服务:


systemctl start elasticsearch

5.检查集群状态信息:


curl localhost:9200
curl localhost:9200/_cat/nodes

显示内容类似:

192.168.1.15 11 72 46 1.56 0.49 0.17 cdfhilmrstw * es-03

192.168.1.9 11 71 48 1.29 0.39 0.14 cdfhilmrstw - es-01

192.168.1.14 13 72 45 0.72 0.23 0.08 cdfhilmrstw - es-02

各个含义:

ip,堆内存JVM使用率,物理内存使用率,cpu使用率

1min系统负载,5分钟系统负载,15min系统负载

6.部署失败了,需要清除数据,排查出错之后,重新启动:


rm -rf /var/{lib,log}/elasticsearch/*
rm -rf /tmp/*

注意:

elasticsearch相关目录的权限,权限不对也会失败。


# ES数据模型相关概念

• 文档

最小数据单元:

以JSON格式存储的一条数据记录(如一条日志、一个商品信息)

• 索引

逻辑数据容器:

类似数据库中的“表”,存储具有相同结构的文档集合

特点:

▪ 索引名必须小写

▪ 支持动态映射

• 映射(mapping)

字段定义规则:

描述文档中各个字段的类型(如text、keyword、date)和属性(如是否分词、是否索引)

示例:

{

"mappings": {

"properties": {

"message": { "type": "text" },

"timestamp" : { "type": "date" }

}

}

}

• 字段数据类型

类型| 用途

---|---

text| 全文搜索(分词)

keyword| 精确匹配(不分词,如 ID、状态)

date| 日期和时间

long/integer| 数值类型

boolean| 布尔值

nested| 嵌套对象


# 集群架构相关概念

• 节点

▪ 单个ES示例:一个物理或虚拟服务器

• 集群

多个节点的集合,共用一个集群名称

• 分片(Shard)

▪ 数据分块:索引被水平拆分为多个分片,分散到不同节点

▪ 类型:

Primary Shard:主分片,处理写请求

Replica Shard:副本分片,提供读高可用

**主分片索引创建时自动分配,数量在创建索引时指定,后续不可修改。推荐主分片数量为节点总数。副本节点可后续动态调整。**

• 健康状态

状态值:

green:所有主分片和副本分片正常

yellow:主分片正常,副本分片未完全分配

red:存在主分片不可用


# 下载IK分词器

1.网上下载对应版本IK分词器

2.创建目录/usr/share/elasticsearch/plugins/ik

3.解压到目录

4.设置权限:


chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/plugins/ik

5.重启elasticsearch,验证安装


curl -XGET http://localhost:9200/_cat/plugins?v

6.验证使用分词器


curl -XPOST "http://localhost:9200/_analyze" -H 'Content-Type: application/json' -d'
{
"analyzer": "ik_smart",

"text": "中华人民共和国"

}'


# 部署Kibana服务

1.本地安装kibana:

(1)下载对应版本的源码和rpm包

(2)安装kibana


yum -y install ./kibana-xxxx.rpm

2.修改配置文件


vim /etc/kibana/kibana.yml
server.host: "0.0.0.0"

server.name: "kibana-elk" #自己起名

elasticsearch.hosts: ["http://es-01:9200","http://es-02:9200",……] #集群

i18n.locale: "zh-CN" #中文

3.启动服务


systemctl start kibana

4.访问

http://IP:5601


# filebeat部署及基础使用

• 安装filebeat:


yum install -y filebeat-xxxx.rpm

• 修改filebeat的配置文件

1.标准输入:


vim /root/config/01.yml
filebeat.inputs:

- type: stdin #标准输入(用户终端输入)

output.console:

pretty: true #打印漂亮的格式

**运行filebeat示例:**

filebeat -e -c /root/config/01.yml

2.input的log类型:


vim /root/config/02.yml
filebeat.inputs:

- type: log #log类型,会监控指定路径的文件变化

paths:

- /tmp/test.log

output.console:

pretty: true

3.input通配符案例:


vim /root/config/03.yml
filebeat.inputs:
- type: log
paths:

- /tmp/*.txt #监控所有txt文件

- /tmp/*.log #监控所有log文件

output.console:

pretty: true

4.多input输入案例:


vim /root/config/04.yml
filebeat.inputs:
- type: log

enabled: true #是否启动当前的输入类型,默认是true

paths:

- /tmp/test.log

tags: ["linux-log"] #给当前的输入类型打上标签

**fields:**

pathID: "1001"

- type: log

enabled: false #代表当前的输入类型不启动,不监控

paths:

- /tmp/test.txt

tags: ["linux-txt"]

fields:

pathID: "1002"

**fields_under_root: true**

output.console:

pretty: true

**fields_under_root:**

**将定义字段的值放到顶级字段,默认值为false,会将数据放在一个叫 "fields"字段的下面**

**默认输出:**

**" fields": {**

**" pathID": "1001"**

**}**

![](/upload/Image-zhhi.png)

**配置后的输出:**

**" pathID" : "1001"**

![](/upload/Image%20%5B1%5D.png)

5.将捕获的数据写入ES:

output.elasticsearch:

hosts:

- http://es-01:9200

- http://es-02:9200

- http://es-03:9200

6.自定义分配和副本数量

indices: #动态索引路由列表,给日志走“分流”规则,不容标签的日志进入不同索引

- index: "index-linux-elk-%{+yyyy.MM.dd}" #第一条分流规则

when.contains:

tags: "linux80" #如果这条日志tags字段数组里面包含了linux80,就命中上面这条索引规则

- index: "index-linux-elk-%{+yyyy.MM.dd}" #第二条分流规则

when.contains:

tags: "python"

setup.ilm.enabled: false #禁用索引生命周期管理

setup.template.name: "index" #设置索引模板的名称

setup.template.pattern: "index-*" #设置索引模板匹配模式

setup.template.overwrite: true

#每次filebeat启动的时候,如果ES里面已经存在同名模板index,就强制覆盖更新模板配置

setup.template.settings: #索引模板的参数配置块

index.number_of_shards: 3 #主分片数量

index.number_of_replicas: 2 #副本分片数量

监控与日志
笔记 监控
许可协议:  CC BY 4.0
分享

相关文章

10月 13, 2026

ECS 实例反复冻结 —— 故障根因分析报告

实例:i-uf6****(已脱敏)(cn-shanghai) 主机名:my-ecs 系统:Rocky Linux 9.8 / 内核 5.14.0-687.47.1 规格:2 核 / 1.6GB 内存 / 40GB 系统盘 故障日期:2026-10-12 报告生成:2026-10-13 一、故障现象

10月 11, 2026

Prometheus部署yaml文件

1.node_exporter.yaml apiVersion: apps/v1 kind: DaemonSet metadata: name: node-exporter namespace: kube-mon labels: name: node-exporter spec: selector

10月 11, 2026

Prometheus

▶ 架构图 ![](/upload/Image-DQGI.png) ▶ 数据类型 数据类型| 能否增加和减少| 用途| 数据存储 ---|---|---|--- Counter(计数器)| 只能增加,重置为 0| 计数,例如请求总数、错误总数等| 累积总量 Gauge(测量值)| 可以增加和减少|

下一篇

Gitlab搭建

上一篇

Docker网络

最近更新

  • Kubernetes v1.28.2 双Master堆叠etcd + Haproxy/Keepalived 高可用部署 SOP(Docker + cri-dockerd)
  • 名词解释
  • ECS 实例反复冻结 —— 故障根因分析报告
  • 运维六大工作内容
  • 磁盘相关命令

热门标签

监控 Linux 数据库 Docker 笔记 CI/CD Kubernetes Nginx

目录

©2026 Wz Blog. 保留部分权利。

使用 Halo 主题 Chirpy