告别命令行查日志!CentOS 安装 ELK 实现可视化监控

ELK 介绍

ELK 是 Elasticsearch、Logstash、Kibana 三款开源工具的合称,是一套成熟的日志收集、存储、分析与可视化 解决方案,广泛用于日志管理、运维监控、安全审计等场景。后来 Beats 加入,技术栈也被称为 ELK StackElastic Stack

一、ELK 核心组件及功能

1. Elasticsearch(核心存储与搜索引擎)

  • 定位 :分布式、RESTful 风格的全文搜索引擎,同时也是 NoSQL 数据库,负责存储日志数据并提供高效的查询、聚合分析能力。
  • 核心特性
    • 分布式架构:支持水平扩展,通过分片(Shard)和副本(Replica)保证数据高可用和查询性能。
    • 全文检索:基于 Lucene 实现,支持模糊查询、精准匹配、范围查询等多种检索方式。
    • 实时分析:内置聚合函数(如统计、分组、排序),可快速对海量日志进行指标计算。
    • REST API:通过 HTTP 请求即可完成数据的增删改查,支持多种编程语言客户端。

2. Logstash(数据采集与预处理管道)

  • 定位 :开源的数据采集引擎,负责从多源收集日志数据,对数据进行过滤、转换、清洗后,输出到 Elasticsearch 等目标。
  • 核心架构(三段式 Pipeline)
    • Input(输入):支持从文件、TCP/UDP 端口、Kafka、Redis、数据库等多种来源采集数据。
    • Filter(过滤) :对采集的数据进行加工,例如:
      • 解析非结构化日志(如 Nginx 日志、Syslog 日志)为结构化 JSON 格式。
      • 过滤无用字段、添加自定义标签、数据格式转换(如时间格式统一)。
      • 常用过滤器:grok(正则解析)、mutate(字段修改)、date(时间解析)。
    • Output(输出):将处理后的结构化数据发送到 Elasticsearch,也可输出到 Kafka、文件、邮件等。
  • 缺点:资源消耗较高,适合在服务器端处理海量数据。

3. Kibana(数据可视化与交互平台)

  • 定位 :基于浏览器的可视化工具,与 Elasticsearch 深度集成,负责将存储的数据转化为直观的图表、仪表盘。
  • 核心功能
    • Discover(探索):交互式查询日志,支持按字段筛选、高亮匹配结果,实时查看原始数据。
    • Visualize(可视化):支持创建折线图、柱状图、饼图、热力图、地图等多种图表,展示日志的趋势、分布。
    • Dashboard(仪表盘):将多个可视化图表组合成仪表盘,实时监控系统状态(如服务器 CPU 使用率、接口请求量、错误日志数)。
    • Dev Tools:提供 Elasticsearch 的 REST API 调试界面,可直接编写 DSL(领域特定语言)查询语句。
    • Alerting(告警):配置告警规则,当数据满足阈值时(如错误日志数超过 100),触发邮件、钉钉等通知。

4. Beats(轻量级数据采集器,补充组件)

Beats 是 Elastic 推出的轻量级、单一用途的数据采集器,相比 Logstash 更轻量,资源占用低,适合部署在采集端服务器。

  • 常用 Beats 类型
    • Filebeat:采集日志文件(如 Nginx、Tomcat 日志),替代 Logstash 作为轻量级日志采集工具。
    • Metricbeat:采集系统和服务的监控指标(如 CPU、内存、磁盘、MySQL 性能指标)。
    • Packetbeat:采集网络流量数据,分析 TCP/UDP 通信。
    • Heartbeat:监控服务可用性,定期检查 HTTP/TCP/ICMP 端口是否存活。
  • 作用:Beats 采集数据后,可直接发送到 Elasticsearch,也可先发送到 Logstash 进行复杂处理,降低 Logstash 的节点压力。

二、ELK 典型工作流程

  1. 数据采集:Filebeat 部署在业务服务器上,实时采集应用日志、系统日志。
  2. 数据预处理:Filebeat 将日志发送到 Logstash,Logstash 通过 grok 解析非结构化日志为结构化数据,过滤无用字段。
  3. 数据存储:Logstash 将处理后的结构化数据写入 Elasticsearch,Elasticsearch 对数据建立索引并存储。
  4. 数据可视化与分析:运维人员通过 Kibana 编写查询语句,创建可视化图表和仪表盘,实时监控系统状态、排查故障。

三、ELK 的核心优势

  1. 开源免费:核心组件均为开源,支持商业化扩展(Elastic 官方提供企业版)。
  2. 全栈式解决方案:从采集、处理、存储到可视化一站式完成,无需整合第三方工具。
  3. 高性能:Elasticsearch 分布式架构支持海量数据存储与秒级查询,适合 TB/PB 级日志场景。
  4. 灵活扩展:支持添加 Beats 采集器、集成 Kafka 做缓冲、对接第三方告警工具(如 Alertmanager)。
  5. 生态丰富:支持主流编程语言客户端,可与 K8s、Prometheus、Docker 等云原生工具无缝集成。

四、ELK 的典型应用场景

  1. 运维日志管理:集中收集服务器、应用、数据库的日志,快速定位故障(如接口报错、服务器宕机原因)。
  2. 系统监控:监控 CPU、内存、磁盘等指标,结合日志分析系统性能瓶颈。
  3. 安全审计:收集防火墙日志、用户登录日志,检测异常登录、恶意攻击行为。
  4. 业务分析:分析用户访问日志(如电商网站的用户浏览路径、下单转化率)。

五、ELK 与同类工具对比

工具栈 优势 劣势
ELK 开源免费、生态完善、查询性能强、可视化能力突出 资源占用较高、大规模集群运维成本高
EFK(Elasticsearch+Fluentd+Kibana) Fluentd 轻量、适合 K8s 容器日志采集 可视化能力依赖 Kibana,与 ELK 差异不大
Prometheus+Grafana 时序数据存储更高效、监控告警能力强 日志检索能力弱,适合指标监控而非全文日志分析

操作实例

前提准备

准备三台centos,其中两台node、一台web

两台node都需要安装elasticsearch

  1. 关闭所有防火墙、修改hosts文件(三台操作)
bash 复制代码
#关闭防火墙
systemctl stop firewalld && systemctl enable firewalld
setenforce 0


#修改host文件以及主机名称
vim /etc/hosts
192.168.180.130 node1
192.168.180.140 node2
192.168.180.150 apache
  1. 安装java环境(三台操作)
bash 复制代码
yum install -y java-1.8.0-openjdk.x86_64
java -version
  1. 安装elasticsearch软件(两台node)
bash 复制代码
rpm -ivh elasticsearch-5.5.0.rpm
systemctl daemon-reload
systemctl enable elasticsearch
  1. 修改主配置文件(两台node)

找到以下几点并修改

bash 复制代码
vim /etc/elasticsearch/elasticsearch.yml

node1:

node2:

  1. 创建目录授权(两台node)
bash 复制代码
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data
  1. 开启elasticsearch(两台node)
bash 复制代码
systemctl start elasticsearch
netstat -antp | grep 9200
  1. 查看信息,在浏览器内

在node1上操作:

  1. 安装node插件
bash 复制代码
#解压
tar zxf node-v8.2.1.tar.gz

#安装gcc
yum install -y gcc gcc-c++

#编译安装
cd node-v8.2.1/
./configure && make && make install
  1. 安装phantomjs
bash 复制代码
tar xvjf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/
cp phantomjs /usr/local/bin
  1. 安装elasticsearch-head
bash 复制代码
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head
npm install 
  1. 修改主配置文件
bash 复制代码
vim /etc/elasticsearch/elasticsearch.yml

#在文件最后添加
http.cors.enabled: true
http.cors.allow-origin: "*"

#保存退出重启服务
systemctl restart elasticsearch
  1. 启动elasticsearch-head插件并测试
bash 复制代码
cd /usr/local/src/elasticsearch-head/
npm run start &

#浏览器访问192.168.180.130:9100
  1. 插入索引
bash 复制代码
curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'Content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
  1. 安装kibana
bash 复制代码
rpm -ivh kibana-5.5.1-x86_64.rpm
systemctl enable kibana
  1. 修改kibana主配置文件
bash 复制代码
vim /etc/kibana/kibana.yml

#保存退出后开启服务
systemctl start kibana

在web上操作:

  1. 安装java
bash 复制代码
yum install -y java-1.8.0-openjdk.x86_64
  1. 安装httpd
bash 复制代码
yum install -y httpd
systemctl start httpd
systemctl enable httpd
  1. 安装logstash
bash 复制代码
rpm -ivh logstash-5.5.1.rpm
systemctl daemon-reload
systemctl enable logstash
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
  1. 配置logstash文件
bash 复制代码
vim /etc/logstash/conf.d/apache_log.conf

input {
        file {
                path => "/var/log/httpd/access_log"
                type =>  "access"
                start_position => "beginning"
             }
        file {
                path => "/var/log/httpd/error_log"
                type =>  "error"
                start_position => "beginning"
             }
        }
output {
        if [type] == "access" {
        elasticsearch {
                hosts => ["192.168.180.130:9200"]
                index => "apache_access-%{+YYYY.MM.dd}"
                }
        }
        if [type] == "error" {
        elasticsearch {
                hosts => ["192.168.180.130:9200"]
                index => "apache_error-%{+YYYY.MM.dd}"
                }
        }
      }
  1. 生产系统索引
bash 复制代码
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

查看浏览器

bash 复制代码
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.180.101"] } }'
  1. 编写脚本
bash 复制代码
vim /elk.sh
#!/bin/bash
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/apache_log.conf

#添加执行权限
chmod a+x /elk.sh
. /elk.sh &

#执行
. /elk.sh
  1. 浏览器访问192.168.180.130:5601
相关推荐
txzz88882 小时前
CentOS-Stream-10 YUM本地仓配置
linux·运维·centos·yum·yum本地仓配置
HalvmånEver2 小时前
Linux:Ext系列⽂件系统(三)
linux·运维·服务器
伍叁_2 小时前
shell脚本案例
linux·运维·服务器
qq_5470261792 小时前
Linux 文件与目录管理
linux·运维·服务器
云声风语2 小时前
buuCTF练习题misc大白记一次vim配合xxd使用
linux·编辑器·vim
南棱笑笑生2 小时前
20251219给飞凌OK3588-C开发板适配Rockchip原厂的Buildroot【linux-5.10】后解决启动不了报atf-2的问题
linux·c语言·开发语言·rockchip
艾莉丝努力练剑2 小时前
【Linux进程(四)】深入理解 Linux O(1) 调度器:双队列轮转与进程优先级机制——如何避免进程饥饿,实现公平且高效的进程调度
java·大数据·linux·运维·服务器·人工智能·安全
好评1243 小时前
Linux入门:软件包管理、Vim、GCC、Makefile、Git 与 GDB
linux·运维·服务器
可爱又迷人的反派角色“yang”4 小时前
ansible剧本编写(三)
linux·网络·云计算·ansible