ELK日志分析系统概述及部署
- 一、ELK日志分析系统
- 二、Elastticsearsh概述
- 二、Logstash概述
-
- [1、Log Stash主要组件](#1、Log Stash主要组件)
- [三、Kibana 概述](#三、Kibana 概述)
- 四、ELK的优点
-
- 1、部署环境
-
- [1.1 了解架构部署](#1.1 了解架构部署)
- [1.2 关闭防火墙、修改主机名(所有主机)](#1.2 关闭防火墙、修改主机名(所有主机))
- 3、部署ElasticSearch(node1、node2)
-
- [3.1 安装ES服务](#3.1 安装ES服务)
- [3.2 真机访问,查看节点信息](#3.2 真机访问,查看节点信息)
- [3.3 真机检测集群健康,查看集群状态](#3.3 真机检测集群健康,查看集群状态)
- 4、安装Elasticsearch-head插件(node1、node2)
-
- [4.1 编译安装node](#4.1 编译安装node)
- [4.2 安装phantomjs](#4.2 安装phantomjs)
- [4.3 安装 Elasticsearch-head 数据可视化工具](#4.3 安装 Elasticsearch-head 数据可视化工具)
- [4.4 修改Elasticsearch主配置文件](#4.4 修改Elasticsearch主配置文件)
- [4.5 启动elasticsearch-head服务](#4.5 启动elasticsearch-head服务)
- [4.5 通过Elasticsearch-head 查看ES信息](#4.5 通过Elasticsearch-head 查看ES信息)
- [4.6 插入索引](#4.6 插入索引)
- [4.8 浏览器查看索引信息](#4.8 浏览器查看索引信息)
- [5、部署 Logstash服务(Apache节点操作)](#5、部署 Logstash服务(Apache节点操作))
-
- [5.1 安装logstash](#5.1 安装logstash)
- [5.2 安装java环境(jdk)](#5.2 安装java环境(jdk))
- [5.3 安装logstash](#5.3 安装logstash)
- [5.4 测试logstash(端口5044)](#5.4 测试logstash(端口5044))
- [5.5 做对接配置(logstas--->ES)](#5.5 做对接配置(logstas—>ES))
- [5.6 访问测试](#5.6 访问测试)
- 6、部署Kibana(在node1节点上操作)
-
- [6.1 安装kibana](#6.1 安装kibana)
- [6.2 修改kibana的主配置文件](#6.2 修改kibana的主配置文件)
- [6.3 启动kibana服务](#6.3 启动kibana服务)
- [6.4 验证kibana](#6.4 验证kibana)
- [6.5 将Apache服务器日志(访问的、错误的)添加到ES并通过Kibaba显示apache服务器](#6.5 将Apache服务器日志(访问的、错误的)添加到ES并通过Kibaba显示apache服务器)
- [6.6 浏览器访问](#6.6 浏览器访问)
一、ELK日志分析系统
1、ELK的组成部分
E: Elasticsearch
L: Logstash
K: Kibana
2、日志服务器
优点
- 提高安全性
- 集中化管理
缺点
- 对日志分析困难
3、日志处理步骤
①将日志进行集中化管理
②将日志格式化(Logstash)并输出到Elasticsearch
③对格式化后的数据进行索引和存储
④前端数据的展示(Kibana)
二、Elastticsearsh概述
- 提供了一个分布式多用户能力的全文搜索引擎
1、Elasticsearch特性
Elasticsearch的核心概念
接近时实(NRT)
- 搜索速度非常的快,轻微的延迟。
集群(cluster)
- 将一个或多个节点组织在一起,组成一个cluster集群。
- 集群有一个唯一标志的名字,默认Elasticasearch,每个节点基于集群名字加入到集群中,且在集群中使用自己的名字来身份标识。
节点(node)
- 每一个节点就是一台单台服务器。
索引(index)
- 一个索引由一个名字来标识(必须全部是小写字母),并且当我们要多对应这个索引中的文档进行索引、更新、删除的时候,都要使用到这个名字。
类型(type)
- 在一个索引中,你可以定义一个或多种类型。
- 比如:当我们存储一个购物平台的数据时,可以定义一个用户数据类型,产品数据类型等
文档(document)
-
一个文档是一个可被索引的基础信息单元
#索引(库)----》类型(表)------》文档(记录)
2、分片和副本
什么是分片?
- 索引存储的数据可能超过单个节点的硬件限制。
- 为了解决这个问题,ES提供了将索引分成多个分片的功能,当在创建索引时,可以定义想要的分片数量,每一个分片就是一个全功能独立的索引。
为什么要分片?
- 水平分割扩展,增大存储量
- 分布式并跨越分片操作, 提高性能和吞吐量
什么是副本?
- 为了健壮性,高可用性,可以故障切换。
- 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、页面美观。
5、灵活扩展
6、页面美观。
1、部署环境
1.1 了解架构部署
主机名 | ip地址 | 主要软件 | 系统 |
---|---|---|---|
node1 | 20.0.0.55 | ElasticSearh、Kibana | centos7.5 |
node2 | 20.0.0.56 | ElasticSearh | centos7.5 |
node2 | 20.0.0.56 | ElasticSearh | centos7.5 |
日志分析系统原理
-
首先有Apache产生大量的日志在本机中,那么Logstash就会input获取日志,然后进行Filter Plugin(过滤日志和格式处理),最后将处理好的日志outpu发送日志到ES的cluster集群中。
-
ES将收到的日志进行索引和存储。
-
最后可以使用Kibana进行查看分析日志。
1.2 关闭防火墙、修改主机名(所有主机)
systemctl disable --now firewalld
setenforce 0
hostnamectl set-hostname {名字}
3、部署ElasticSearch(node1、node2)
3.1 安装ES服务
node1和node2配置基本类似,唯一区别就是在配置文件中主机名不一样。下面以node1为例配置。
#安装JDK,默认的是open jdk,不建议使用(ES是java开发的)。上传jdk的rpm包到/opt目录下安装
cd /opt
tar -zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile
java -version
===============配置本机主机名解析=================
echo "20.0.0.55 node1" >> /etc/hosts
echo "20.0.0.56 node2" >> /etc/hosts
==============安装Elsaticsearch================
#上传rpm包到/opt目录下
cd /opt
rpm -ivh elasticsearch-5.5.0.rpm
systemctl daemon-reload
systemctl enable elasticsearch.service
#安装好后,生成的配置文件路径为:/etc/elasticsearch/elasticsearch.yml
cp /etc/elasticsearch/elasticsearch.yum{,.bak}
vim /etc/elasticsearch/elasticsearch.yum
##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行,取消注释,不在启动的时候锁定内存(前端缓存,与IOPS-性能测试方式,每秒读写次数相关)
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
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
systemctl start elasticsearch
netstat -antp |grep 9200
3.2 真机访问,查看节点信息
20.0.0.55:9200
20.0.0.56:9200
3.3 真机检测集群健康,查看集群状态
20.0.0.55:9200/_cluster/health?pretty
20.0.0.56:9200/_cluster/health?pretty
4、安装Elasticsearch-head插件(node1、node2)
为什么要安装这个插件?
- 因为上述查看集群的方式,非常不方便,所以可以通过安装这个插件,来管理集群。
- 安装 Elasticsarch-head 需要提前安装好依赖软件 node 和 phantomjs。
注意:两台机器安装步骤一样,这边还是以node1为例
4.1 编译安装node
node是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
yum -y install gcc gcc-c++ make
cd /opt
tar xzvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make -j4 &&make install
4.2 安装phantomjs
phantomjs是一个基于 webkit 的 JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到
#上传安装包上传到/opt目录下
cd /opt
tar -jxvf 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
4.3 安装 Elasticsearch-head 数据可视化工具
上面两个插件安装好后,就可以安装ElasticSearch-head可视化工具
#将包上传到/opt目录下
tar -zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head
npm install
4.4 修改Elasticsearch主配置文件
vim /etc/elasticsearch/elasticsearch.yml
##末行添加以下内容
http.cors.enabled: true ##开启跨域访问支持,默认为false
http.cors.allow-origin: "*" ##指定跨域访问允许的域名地址为所有
systemctl restart elasticsearch
netstat -natp |grep 9200
4.5 启动elasticsearch-head服务
cd /usr/local/src/elasticsearch-head
npm run start &
netstat -natp |grep 9100
4.5 通过Elasticsearch-head 查看ES信息
浏览器访问:20.0.0.55:9100地址并连接群集,如果看到群集的健康值为green,代表群集很健康
20.0.0.55:9100
20.0.0.56:9100
4.6 插入索引
curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
#插入索引
4.8 浏览器查看索引信息
浏览器访问 20.0.0.55:9100 查看索引信息,可以看见索引默认被分片为 5 个,并且有一个副本。
点击 数据浏览,会发现在 node1 上创建的索引为 index-demo,类型为 test 的相关信息。
5、部署 Logstash服务(Apache节点操作)
- Logstash 一般部署在需要监控其日志的服务器。在本案例中,Logstash 部署在 Apache 服务器上,用于收集 Apache 的日志信息并发送到 Elasticsearch。
5.1 安装logstash
yum -y install httpd
systemctl start httpd
5.2 安装java环境(jdk)
#将jdk包上传至/opt目录下
cd /opt
tar -zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile
java -version
5.3 安装logstash
#上传压缩包到/opt目录下
cd /opt
rpm -ivh logstash-5.5.1.rpm
systemctl start logstash
systemctl enable logstash
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
5.4 测试logstash(端口5044)
①logstasg命令常用选项
常用选项 | 说明 |
---|---|
-f | 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash的输入和输出 |
-e | 从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当做logstash的配置(如果是空,则默认使用stdin作为输入,stdout作为输出) |
-t | 测试配置文件是否正确,然后退出 |
②定义输入和输出流
-
标准输入、输出: 输入财通标准输入,输出采用标准输出(类似管道)
logstash -e 'input { stdin{} } output { stdout{} }'
-
rubydebug 输出: 使用rubydebug输出详细格式显示.
-
codec: 为一种解码器。将内容解码后输出
logstash -e 'input { stdin{} } output { stdout { codec=>rubydebug} }'
③ 使用logstash将信息写入Elasticsearch中,输入输出对接
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["20.0.0.55:9200"] } }'
结果不在标准输出显示,而是发送至 ES,可浏览器访问 http://20.0.0.55:9100 查看索引和数据
5.5 做对接配置(logstas--->ES)
#修改配置文件,让其收集系统日志/var/log/messgaes,并将其输入到ES中
chmod +r /var/log/messages
vim /etc/logstash/conf.d/system.conf
input {
file{
path =>"/var/log/messages"
##指定要收集的日志的位置
type =>"system"
##自定义日志类型标识
start_position =>"beginning"
##表示从开始处收集
}
}
output {
elasticsearch{
##输出到ES
hosts =>["20.0.0.55:9200", "20.0.0.56:9200"]
##指定ES服务器的地址和端口,为避免单机故障,建议写全
index =>"system-%{+YYYY.MM.dd}"
##指定输出到ES的索引格式
}
}
systemctl restart logstash.service
5.6 访问测试
浏览器访问 20.0.0.55:9100 查看索引信息
6、部署Kibana(在node1节点上操作)
6.1 安装kibana
#将安装包上传/opt目录下
rpm -ivh kibana-5.5.1-x86_64.rpm
6.2 修改kibana的主配置文件
cp /etc/kibana/kibana.yml{,.bak}
vim /etc/kibana/kibana.yml
##2行,取消注释,kibana服务的默认监听端口为5601
server.port: 5601
##7行,取消注释,设置kibana的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
##21行,取消注释,设置和ES建立连接的地址和端口
elasticsearch.url: "http://20.0.0.55:9200"
##30行,取消注释,设置在ES中添加.kibana索引
kibana.index: ".kibana"
6.3 启动kibana服务
systemctl start kibana.service
systemctl enable kibana.service
netstat -natp | grep 5601
6.4 验证kibana
浏览器访问:20.0.0.55:5601
第一次登录需要添加一个 ES 索引
点击 create 创建
索引添加完成后,点击 Discover 按钮可查看图表信息及日志信息
数据展示可以分类显示,例如:在 Available Fileds 中的 host
6.5 将Apache服务器日志(访问的、错误的)添加到ES并通过Kibaba显示apache服务器
在apache服务器上操作
[root@apache opt]# 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 => ["20.0.0.55:9200", "20.0.0.56:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["20.0.0.55:9200", "20.0.0.56:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
[root@apache opt]# cd /etc/logstash/conf.d
[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf
6.6 浏览器访问
浏览器访问20.0.0.55:9100 查看索引是否创建
浏览器访问20.0.0.55:5601 登录kibana,添加apache_access-*和apache_error-*索引,查看日志信息。