ELK日志分析系统

本章结构:

1、ELK日志分析系统简介

2、Elasticsearch介绍(简称ES)

3、Logstash介绍

4、Kibana介绍

5、实验,ELK部署

一、ELK日志分析系统简介

ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用。 可以提高安全性,集中存放日志,完成更强大的用户对日志的查询、排序、统计需求。

缺点:对日志的分析困难

日志处理步骤:

1、将日志进行集中化管理

2、将日志格式化(Logstash)并输入到ES

3、对格式化后的数据进行索引和存储(ES对存储数据的类型进行分类)

4、前端数据的展示(Kibana)

总结:logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理。

二、Elasticsearch

提供一个分布式多用户能力的全文搜索引擎

1、Elasticsearch核心概念

接近时实(NRT)

  • 搜索速度非常的快,轻微的延迟。

集群(cluster)

  • 将一个或多个节点组织在一起,组成一个cluster集群。
  • 集群有一个唯一标志的名字,默认Elasticasearch,每个节点基于集群名字加入到集群中,且在集群中使用自己的名字来身份标识。

节点(node)

  • 每一个节点就是一台单台服务器。

索引(index)

  • 一个索引由一个名字来标识(必须全部是小写字母),并且当我们要多对应这个索引中的文档进行索引、更新、删除的时候,都要使用到这个名字。

类型(type)

  • 在一个索引中,你可以定义一个或多种类型。
  • 比如:当我们存储一个购物平台的数据时,可以定义一个用户数据类型,产品数据类型等。

文档(document)

  • 一个文档是一个可被索引的基础信息单元

2、分片和副本

什么是分片?

  • 索引存储的数据可能超过单个节点的硬件限制。
  • 为了解决这个问题,ES提供了将索引分成多个分片的功能,当在创建索引时,可以定义想要的分片数量,每一个分片就是一个全功能独立的索引。

为什么要分片?

  • 水平分割扩展,增大存储量
  • 分布式并跨越分片操作, 提高性能和吞吐量

什么是副本?

  • 为了健壮性,高可用性,可以故障切换。
  • es将分片复制一份或多份放在不同的节点主机上,称为分片副本。

为什么要副本?

  • 高可用性,以应对分片或者节点故障,出于这个原因,分片副本要在不同的节点上。
  • 性能加强,增强吞吐量,搜索可以并行在所有副本上执行

3、es和传统数据库的区别

①结构名称不同

  • 关系型数据库:数据库-->表-->行--->列

  • Elasticsearch:索引--->类型--->文档---->字段

②ES分布式,传统数据库遍历式索引

  • ES支持分片和复制,从而方便水平分割和扩展,复制保证可es的高可用与高吞吐。

  • 在es中,当你创建一个索引(数据库)的时候,你可以指定你想要的分片的数量,每个分片本身也是一个功能完善并且独立的索引(数据库),索引可以被防止到集群中的任何节点上。

分片的优点

1、允许你水平分割/扩展你的内容容量

2、允许你在分片之上进行分布式的,并行的操作,进而提高性能/吞吐量

3、分片的分布,它的文档怎么聚合回搜索请求,完全有Elasticsearch管理

③ES采用倒排索引,传统数据库采用B+树索引

  • 正排索引:id---->values
  • 倒排索引:values--->id

④ES没有用户验证和权限控制

⑤ES没有事务的概念,不支持回滚,误删不能恢复

⑥ES免费,完全开源,传统的数据库部分免费

二、Logstash概述

  • 一款强大的数据处理工具
  • 可实现数据传输、格式处理、格式化输出
  • 数据输入、数据加工(过滤、改写等)以及数据输出

由三个组件组成:Input、Output、Filter Plugin

  • Input:获取日志
  • Output:输出日志
  • Filter Plugin:过滤日志、格式处理

1、Log Stash主要组件

Shipper(日志收集):负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常远程代理端(agent)只需要运行这个组件即可

Indexer(日志存储):负责接收日志并写入到本地文件

Broker(日志Hub):负责连接多个Shipper和多个Indexer

Search and Storage:允许对事件进行搜索和存储

Web Interface:基于Web的展示界面

三、Kibana 概述

  • 一个针对Elastcsearch的开源分析及可视化平台
  • 搜索、查看存储在ES 索引中的数据
  • 通过各种图标进行高级数据分析及展示

1、Kibana主要功能

①Elasticsearch无缝之集成

  • kibana架构为ES 定制,可以将任意结构和非结构加入到ES索引。

②整合数据

  • 更好的对ES 数据进行分析处理 。能够处理海量数据,智能的分析数据。

③让更多团队成员收益

④接口灵活,分享容易

  • 使用Kibana可以更加方便地创建、保存、分享数据,并将可视化数据快速交流。

⑤配置简单

  • 自带web服务器,快速启动运行

⑥可视化多数据源

  • Kibana可以非常方便地把来自Logstash、ES-Hadoop、Beats或第三方技术的数据整合到Elasticsearch,支持的第三方技术包括Apache flume、 Fluentd 等。

⑦简单数据导出

  • Kibana可以方便地导出感兴趣的数据,与其它数据集合并融合后快速建模分析,发现新结果。

四、ELK的优点

1、处理方式灵活:Elasticsearch是全文索引,具有强大的搜索能力

2、配置相对简单,Kibana的配置非常简单,Eslasticsearch则全部使用Json接口,配置也不复杂,Logstash的配置使用模块的方式,配置也相对简单。

3、检索性高,ELK架构通常可以达到百亿数据的查询秒级响应

4、集群线性扩展,Elasticsearch本身没有单点的挂念,自动默认集群模式,Elasticsearch和Logstash都可以

5、灵活扩展

6、页面美观。

五、部署ELK日志分析系统

部署环境

主机名 ip地址 主要软件 系统
node1 192.168.88.10 ElasticSearh、Kibana centos7.5
node2 192.168.88.20 ElasticSearh centos7.5
apache 192.168.88.30 Logstash、Apache centos7.5

ELK Elasticsearch 集群部署(在Node1、Node2节点上操作)

1.环境准备

#更改主机名、配置域名解析、查看Java环境

Node1节点:hostnamectl set-hostname node1

Node2节点:hostnamectl set-hostname node2

vim /etc/hosts

192.168.88.10 node1

192.168.88.20 node2

注:版本问题

java -version #如果没有安装,yum -y install java

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)

建议使用jdk

2.部署 Elasticsearch 软件

(1)安装elasticsearch---rpm包

#上传elasticsearch-5.5.0.rpm到/opt目录下

cd /opt

rpm -ivh elasticsearch-5.5.0.rpm

(2)加载系统服务

systemctl daemon-reload

systemctl enable elasticsearch.service

(3)修改elasticsearch主配置文件

cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak

vim /etc/elasticsearch/elasticsearch.yml


--17--取消注释,指定集群名字

cluster.name: my-elk-cluster

--23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2

node.name: node1

--33--取消注释,指定数据存放路径

path.data: /data/elk_data

--37--取消注释,指定日志存放路径

path.logs: /var/log/elasticsearch/

--43--取消注释,改为在启动的时候不锁定内存

bootstrap.memory_lock: false

--55--取消注释,设置监听地址,0.0.0.0代表所有地址

network.host: 0.0.0.0

--59--取消注释,ES 服务的默认监听端口为9200

http.port: 9200

--68--取消注释,集群发现通过单播实现,指定要发现的节点 node1、node2

discovery.zen.ping.unicast.hosts: ["node1", "node2"

grep -v "^#" /etc/elasticsearch/elasticsearch.yml

检查修改是否正确

(4)创建数据存放路径并授权

mkdir -p /data/elk_data

chown elasticsearch:elasticsearch /data/elk_data/

(5)启动elasticsearch是否成功开启

systemctl start elasticsearch.service

netstat -antp | grep 9200

(6)查看节点信息

浏览器访问 http://192.168.88.10:9200http://192.168.88.20:9200 查看节点 Node1、Node2 的信息。

浏览器访问 http://192.168.88.10:9200/_cluster/health?prettyhttp://192.168.88.20:9200/_cluster/health?pretty查看群集的健康情况,可以看到 status 值为 green(绿色), 表示节点健康运行。

浏览器访问 http://192.168.88.10:9200/_cluster/state?pretty 检查群集状态信息。

#使用上述方式查看群集的状态对用户并不友好,可以通过安装 Elasticsearch-head 插件,可以更方便地管理群集。

3.安装 Elasticsearch-head 插件

Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。

安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。

node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。

(1)编译安装 node

#上传软件包 node-v8.2.1.tar.gz 到/opt

yum install gcc gcc-c++ make -y

(2)安装 phantomjs(前端的框架)

#上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到/opt/

(3)安装 Elasticsearch-head 数据可视化工具

#上传软件包 elasticsearch-head.tar.gz 到/opt

(4)修改 Elasticsearch 主配置文件

vim /etc/elasticsearch/elasticsearch.yml

--末尾添加以下内容--

http.cors.enabled: true #开启跨域访问支持,默认为 false

http.cors.allow-origin: "*" #指定跨域访问允许的域名地址为所有

(5)启动 elasticsearch-head 服务

#必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。

cd /usr/local/src/elasticsearch-head/

npm run start &

> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head

> grunt server

Running "connect:server" (connect) task

Waiting forever...

Started connect web server on http://localhost:9100

#elasticsearch-head 监听的端口是 9100

netstat -natp |grep 9100

#elasticsearch-head 监听的端口是 9100

6)通过 Elasticsearch-head 查看 Elasticsearch 信息

通过浏览器访问 http://192.168.88.10:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。

(7)插入索引

#通过命令插入一个测试索引,索引为 index-demo,类型为 test。

curl -X PUT 'localhost:9200/index-demo1/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

可以在网页中查看到数据

浏览器访问 http://192.168.88.10:9100/ 查看索引信息,可以看见索引默认被分片5个,并且有一个副本。

点击"数据浏览",会发现在node1上创建的索引为 index-demo1,类型为 test 的相关信息。

ELK Logstash 部署(在 Apache 节点上操作)

ELK Logstash 部署(在 Apache 节点上操作) Logstash 一般部署在需要监控其日志的服务器。在本案例中,Logstash 部署在 Apache 服务器上,用于收集 Apache 服务器的日志信息并发送到 Elasticsearch。

1.更改主机名

hostnamectl set-hostname apache

2.安装Apahce服务(httpd)

yum -y install httpd

systemctl start httpd

3.安装Java环境

yum -y install java

java -version

4.安装logstash

#上传软件包 logstash-5.5.1.rpm 到/opt目录下

cd /opt

rpm -ivh logstash-5.5.1.rpm

systemctl start logstash.service

systemctl enable logstash.service

ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

5.测试 Logstash

Logstash 命令常用选项:

-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。

-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。

-t:测试配置文件是否正确,然后退出。

定义输入和输出流:

#输入采用标准输入,输出采用标准输出(类似管道)

logstash -e 'input { stdin{} } output { stdout{} }'


www.baidu.com #键入内容(标准输入)

2020-12-22T03:58:47.799Z node1 www.baidu.com #输出结果(标准输出)

www.sina.com.cn #键入内容(标准输入)

2017-12-22T03:59:02.908Z node1 www.sina.com.cn #输出结果(标准输出)

//执行 ctrl+c 退出

#使用 rubydebug 输出详细格式显示,codec 为一种编解码器

logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

www.baidu.com #键入内容(标准输入)

{

"@timestamp" => 2020-12-22T02:15:39.136Z, #输出结果(处理后的结果)

"@version" => "1",

"host" => "apache",

"message" => "www.baidu.com"

}

#使用 Logstash 将信息写入 Elasticsearch 中

logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.88.10:9200"] } }'

输入 输出 对接

......

www.baidu.com #键入内容(标准输入)

www.sina.com.cn #键入内容(标准输入)

www.google.com #键入内容(标准输入)

//结果不在标准输出显示,而是发送至 Elasticsearch 中,可浏览器访问 http://192.168.88.10:9100/ 查看索引信息和数据浏览。

6.定义 logstash配置文件

Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)。

input:表示从数据源采集数据,常见的数据源如Kafka、日志文件等

filter:表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式

output:表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch。

#格式如下:

input {...}

filter {...}

output {...}

#在每个部分中,也可以指定多个访问方式。例如,若要指定两个日志来源文件,则格式如下:

input {

file { path =>"/var/log/messages" type =>"syslog"}

file { path =>"/var/log/httpd/access.log" type =>"apache"}

}

#修改 Logstash 配置文件,让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中。

chmod +r /var/log/messages #让 Logstash 可以读取日志

vim /etc/logstash/conf.d/system.conf

input {

file{

path =>"/var/log/messages" #指定要收集的日志的位置

type =>"system" #自定义日志类型标识

start_position =>"beginning" #表示从开始处收集

}

}

output {

elasticsearch { #输出到 elasticsearch

hosts => ["192.168.88.10:9200"] #指定 elasticsearch 服务器的地址和端口

index =>"system-%{+YYYY.MM.dd}" #指定输出到 elasticsearch 的索引格式

}

}



systemctl restart logstash


浏览器访问 http://192.168.88.10:9100/ 查看索引信息

ELK Kiabana 部署(在 Node1 节点上操作)

1.安装 Kiabana

#上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录

cd /opt

rpm -ivh kibana-5.5.1-x86_64.rpm

2.设置 Kibana 的主配置文件

vim /etc/kibana/kibana.yml

--2--取消注释,Kiabana 服务的默认监听端口为5601

server.port: 5601

--7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址

server.host: "0.0.0.0"

--21--取消注释,设置和 Elasticsearch 建立连接的地址和端口

elasticsearch.url: "http://192.168.88.10:9200"

--30--取消注释,设置在 elasticsearch 中添加.kibana索引

kibana.index: ".kibana"

3.启动 Kibana 服务

systemctl start kibana.service

systemctl enable kibana.service


netstat -natp | grep 5601

4.验证 Kibana

浏览器访问 http://192.168.88.10:5601

第一次登录需要添加一个 Elasticsearch 索引:

Index name or pattern

//输入:system-* #在索引名中输入之前配置的 Output 前缀"system"

单击 "create" 按钮创建,单击 "Discover" 按钮可查看图表信息及日志信息。

数据展示可以分类显示,在"Available Fields"中的"host",然后单击 "add"按钮,可以看到按照"host"筛选后的结果

5.将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示

vim /etc/logstash/conf.d/apache_log.conf

input {

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.88.10:9200"]

index => "apache_access-%{+YYYY.MM.dd}"

}

}

if [type] == "error" {

elasticsearch {

hosts => ["192.168.88.10:9200"]

index => "apache_error-%{+YYYY.MM.dd}"

}

}

}


浏览器访问 http://192.168.88.10:9100 查看索引是否创建

浏览器访问 http://192.168.88.10:5601 登录 Kibana,单击"Create Index Pattern"按钮添加索引, 在索引名中输入之前配置的 Output 前缀 apache_access-*,并单击"Create"按钮。在用相同的方法添加 apache_error-*索引。

选择"Discover"选项卡,在中间下拉列表中选择刚添加的 apache_access-* 、apache_error-* 索引, 可以查看相应的图表及日志信息。

Filebeat+ELK 部署

---------------------- Filebeat+ELK 部署 ----------------------

Node1节点(2C/4G):node1/192.168.88.10 Elasticsearch Kibana

Node2节点(2C/4G):node2/192.168.88.20 Elasticsearch

Apache节点:apache/192.168.88.30 Logstash Apache

Filebeat节点:filebeat/192.168.88.40 Filebeat

在 Node1 节点上操作

1.安装 Filebeat,在 Node1 节点上操作

#上传软件包 filebeat-6.2.4-linux-x86_64.tar.gz 到/opt目录

tar zxvf filebeat-6.2.4-linux-x86_64.tar.gz

mv filebeat-6.2.4-linux-x86_64/ /usr/local/filebeat

2.设置 filebeat 的主配置文件

vim filebeat.yml


filebeat.prospectors:

  • type: log #指定 log 类型,从日志文件中读取消息

enabled: true

paths:

  • /var/log/messages #指定监控的日志文件

  • /var/log/*.log

fields: #可以使用 fields 配置选项设置一些参数字段添加到 output 中

service_name: filebeat

log_type: log

service_id: 192.168.88.40

--------------Elasticsearch output-------------------

(全部注释掉)

----------------Logstash output---------------------

output.logstash:

hosts: ["192.168.88.30:5044"] #指定 logstash 的 IP 和端口

#启动 filebeat

./filebeat -e -c filebeat.yml

3.在 Logstash 组件所在节点上新建一个 Logstash 配置文件

cd /etc/logstash/conf.d


vim logstash.conf


input {

beats {

port => "5044"

}

}

output {

elasticsearch {

hosts => ["192.168.88.10:9200"]

index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"

}

stdout {

codec => rubydebug

}

}

#启动 logstash

logstash -f logstash.conf

5.浏览器访问 http://192.168.88.10:5601 登录 Kibana

单击"Create Index Pattern"按钮添加索引"filebeat-*",单击 "create" 按钮创建,单击 "Discover" 按钮可查看图表信息及日志信息。

相关推荐
vvw&43 分钟前
如何在 Ubuntu 22.04 上安装带有 Nginx 的 ELK Stack
linux·运维·nginx·ubuntu·elk·elasticsearch·开源项目
Karoku06612 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
Karoku0662 天前
【企业级分布式系统】ELK-企业级日志分析系统
运维·数据库·redis·mysql·elk·缓存
一名技术极客3 天前
徒手从零搭建一套ELK日志平台
elk
jun7788955 天前
SpringBoot整合ELK使用详解
spring boot·后端·elk
yueqingll5 天前
023、ELK 从入门到实践
elk
abandondyy5 天前
ELK Elasticsearch 集群部署
大数据·elk·elasticsearch
小李叭叭叭5 天前
ELK8.15.4搭建开启安全认证
运维·elk·elasticsearch·kibana
光仔December13 天前
【Elasticsearch入门到落地】1、初识Elasticsearch
大数据·elk·elasticsearch·搜索引擎·lucene
太空眼睛14 天前
【EFK】Linux集群部署Elasticsearch最新版本8.x
linux·elk·elasticsearch·efk·master·8.15.3·node.roles