前言
案列概述
日志分析是运维工程师解决系统故障,发现问题的主要手段。日志主要包括系统日志、应用程序日志和安全日志
Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤,并将其存储,供以后使用,比如搜索
Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供友好的日志分析Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
ELK工作原理

图为完整的日志系统
首先appserver跑业务的(nginx或者apache等),它的日志被logstash收集,logstash定时去检索appserver的日志,
收集完了之后,传给es,es做两件事,第一重组日志,第二快速定位日志的内容,es在里面充当中央枢纽,当我需要让它展现出相关的信息时,通过kibana展示,在网页的页面中展现
| 简单来说,进行日志处理分析,一般需要经过以下几个步骤: |
|---|
| 将日志进行集中化管理(beats) |
| 将日志格式化(logstash) |
| 对格式化后的数据进行索引和存储(elasticsearch) |
| 前端数据的展示(kibana) |
1.知识拓展

同时还有个轻量级别的filebeat
有些化是在logstash前面加上filebeat,filebeat处理

kagka是一个消息队列工具
像电商的级别基本都是百亿级别的pv量
基本其他的基本都是百万pv和千万pv,那这种级别离不开消息队列
现在基本上市场全是kafka,因为是java开发的,java是老大啊,你得考虑它
2.Elasticsearch介绍
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便
| Elasticsearch的基础核心概念: |
|---|
| 接近实时(NRT):轻微的延迟(通常是1秒) |
| 集群(cluster):一个或多个节点组织在一起 |
| 节点(node):节点就是一台单一的服务器 |
| 索引(index):一个索引就是一个拥有几分相似特征的文档的集合 |
| 类型(type):在一个索引中,你可以定义一种或多种类型 |
| 分片和副本(shards & replicas): |
| 分片:解决单个节点搜索请求太慢, 副本:解决应对分片或者节点故障 |
3.Logstash介绍
Logstash由JRuby语言编写,基于消息的简单架构,并运行在Java虚拟机上。不同于分离的代理端或主机端,LogStash可配置单一的代理端与其它开源软件结合,以实现不同的功能。
Logstash是一款强大的数据处理工具,可以实现数据传输、格式出来i、格式化输出
数据输出(Collect),数据加工(Enrich),如过滤、改写等,以及数据输出(Transport)
3.1LogStash的主要组件
主要组件:
| Shipper:日志收集者 ,负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来 |
|---|
| Indexer:日志存储者,负责接收日志并写入到本地文件 |
| Broker:日志Hub,负责连接多个Shipper和多个Indexer |
| Search and Storage:允许对事件进行搜索和存储 |
| Web Interface:基于Web的展示界面 |
4.Kibana介绍
Kibana是一个针对Elasticsearch的开源分析及可视化平台。用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。
Kibana让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。设置Kibana非常简单。无需编写代码,几分钟内就可以完成Kibana安装并启动Elasticsearch索引监测
4.1主要功能
主要功能:
| Elasticsearch无缝之集成 |
|---|
| 整合数据,复杂数据分析 |
| 让更多团队成员受益 |
| 接口灵活,分享更容易 |
| 配置简单,可视化多数据源 |
| 简单数据导出 |
配置ELK
1.底层环境
| 20.0.0.21 | elasticsearch node1 |
|---|---|
| 20.0.0.22 | elasticsearch node2 |
| 20.0.0.23 | logstatsh |
| 20.0.0.24 | kibanna |
| 网关 | 20.0.0.1 |
| 系统环境 | Centos7.4 防火墙和核心防护全关 |
2.部署elasticsearch软件
######配种node1######
[root@node1 ~]# vi /etc/hosts
20.0.0.21 node1
20.0.0.22 node2
##查看JAVA环境##
[root@node1 ~]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
【部署elasticsearch软件】
##上传elasticsearch-5.5.0.rpm到opt##
[root@node1 ~]# cd /opt/
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm
###加载系统服务##
[root@node1 opt]# systemctl daemon-reload
[root@node1 opt]# systemctl enable elasticsearch.service
###修改elasticsearch配置文件
[root@node1 opt]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# cp elasticsearch.yml elasticsearch.yml.bak
[root@node1 elasticsearch]# vim elasticsearch.yml
###修改以下行内容:
17 cluster.name: my-elk-cluster ###更改集群名字
23 node.name: node1 ###节点名字
33 path.data: /data/elk_data ###数据存放路径
37 path.logs: /var/log/elasticsearch/ ###日志存放路径
43 bootstrap.memory_lock: false ###不在启动的时候锁定内存:锁定物理内存地址,防止es内存被交换出去
55 network.host: 0.0.0.0 ###提供服务绑定的IP地址,0.0.0.0代表所有地址
60 http.port: 9200 ###监听端口开启
69 discovery.zen.ping.unicast.hosts: ["node1", "node2"] ###群集发现通过单播实现
##创建配置文件指定的目录,并给权限####
[root@node1 elasticsearch]# cd ~
[root@node1 ~]# mkdir -p /data/elk_data
[root@node1 ~]# id elasticsearch
uid=990(elasticsearch) gid=985(elasticsearch) groups=985(elasticsearch)
[root@node1 ~]# chown elasticsearch.elasticsearch /data/elk_data/
[root@node1 ~]# ll /data/
drwxr-xr-x 2 elasticsearch elasticsearch 6 Oct 28 22:50 elk_data
[root@node1 ~]# systemctl start elasticsearch.service
[root@node1 ~]# netstat -anutp | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 39182/java
######配种node2######
[root@node2 ~]# vi /etc/hosts
20.0.0.21 node1
20.0.0.22 node2
##查看JAVA环境##
[root@node2 ~]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
【部署elasticsearch软件】
##上传elasticsearch-5.5.0.rpm到opt##
[root@node2 ~]# cd /opt/
[root@node2 opt]# rpm -ivh elasticsearch-5.5.0.rpm
###加载系统服务##
[root@node2 opt]# systemctl daemon-reload
[root@node2 opt]# systemctl enable elasticsearch.service
###修改elasticsearch配置文件
[root@node2 opt]# cd /etc/elasticsearch/
[root@node2 elasticsearch]# cp elasticsearch.yml elasticsearch.yml.bak
[root@node2 elasticsearch]# vim elasticsearch.yml
###修改以下行内容:
17 cluster.name: my-elk-cluster ###更改集群名字
23 node.name: node2 ###节点名字
33 path.data: /data/elk_data ###数据存放路径
37 path.logs: /var/log/elasticsearch/ ###日志存放路径
43 bootstrap.memory_lock: false ###不在启动的时候锁定内存:锁定物理内存地址,防止es内存被交换出去
55 network.host: 0.0.0.0 ###提供服务绑定的IP地址,0.0.0.0代表所有地址
60 http.port: 9200 ###监听端口开启
69 discovery.zen.ping.unicast.hosts: ["node1", "node2"] ###群集发现通过单播实现
##创建配置文件指定的目录,并给权限####
[root@node2 elasticsearch]# cd ~
[root@node2 ~]# mkdir -p /data/elk_data
[root@node2 ~]# id elasticsearch
uid=990(elasticsearch) gid=985(elasticsearch) groups=985(elasticsearch)
[root@node2 ~]# chown elasticsearch.elasticsearch /data/elk_data/
[root@node2

本文介绍如何搭建ELK(Elasticsearch、Logstash、Kibana)日志分析系统,涵盖各组件的工作原理、配置及应用实例,助力运维工程师高效解决系统故障。
最低0.47元/天 解锁文章
813





