一:介绍
ELK平台是一套完整的日志集中处理解决方案,它不是一个单独的服务,是一系列服务,由(Elasticsearch、Logstash、Kibana)组成,完成更强大的用户对日志的查询、排序、统计需求
日志服务器
提高安全性
集中存放日志
缺陷
对日志的分析困难
日志处理步骤
1:将日志进行集中管理
2:将日志进行格式化(logstash)并输出到(elasticsearch)
3:对格式化后的数据进行索引和存储(Elasticsaerch)
4:前端数据的展示(Kibana)
clasticsearch:是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。
Elasticsearch是用Java开发的,可通过RESTful Web接口,让用户可以通过浏览器与Elasticsearch通信。
Elasticsearch是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大容量的日志数据,也可用于搜索许多不同类型的文档
Kibana:一个针对Elasticsearch的开源分析及可视化平台
搜索、查看存储在es索引中的数据
通过各种图表进行高级数据分析及展示
主要功能
整个数据,复杂数据分析
让更多团队成员收益
接口灵活、分享更容易
配置简单,可视化多数据源
简单数据导出
Kibana通常与Elasticsearch一起部署,Kibana是Elasticsearch的一个功能强大的数据可视化Dashboard,Kibana提供图形化的web界面来浏览E1 asticsearch日志数据,可以用来汇总、分析和搜索重要数据。
Logstash:是一款强大的数据处理工具,可实现数据传输、格式处理、格式化输出
数据输入、数据加工(过滤、改写)以及数据输出
主要组成
shipper
lndexer
broker
search and storage
web interface
作为数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置,一般会发送给Elasticsearch
Logstash由Ruby语言编写,运行在Java虚拟机(JvN)上,是一款强大的数据处理工具,
可以实现数据传输、格式处理、格式化输出。Logstash具有强大的插件功能,常用于日志处理。
可以添加的其它组件
Filebeat:轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户湍安装Filebeat,并指定目录与日志格式,Filebeat就能快速收集数据,并发送给logstash进行解析,或是直接发给Elasticsearch存储,性能上相比运行于JVN上的logstash优势明显,是对它的替代。常应用于EFK架构当中。
filebeat结合1 ogstash带来好处:
1)通过Logstash具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻Elasticsearch持续写入数据的压力
2)从其他数据源(例如数据库,s3对象存储或消息传递队列)中提取
3)将数据发送到多个目的地,例如s3,HDFS(Hadoop分布式文件系统)或写入文件
4)使用条件数据流逻辑组成更复杂的处理管道
缓存/消息队列(redis、kafka、RabbitMQ等):可以对高并发日志数据进行流量削峰和缓冲,这样的缓冲可以一定程度的保护数据不丢失,还可以对整个架构进行应用解耦。
·Fluentd:是一个流行的开源数据收集器。由于Logstash太重量级的缺点,Logstash性能低、资源消耗比较多等问题,随后就有Fluentd的出现。相比较logstash,Fluentd更易用、资源消耗更少、性能更高,在数据处理上更高效可靠,受到企业欢迎,成为logstash的一种替代方案,常应用于EFK架构当中。在Kubernetes集群中也常使用EFK作为日志数据收集的方案。
在Kubernetes集群中一般是通过Daemonset来运行Fluentd,以便它在每个Kubernetes工作节点上都可以运行一个Pod.它通过获取容器日志文件、过滤和转换日志数据,然后将数据传递到E1 asticsearch集群,在该集群中对其进行索引和存储。
核心概念
接近实时
集群
节点
索引
索引(库)—》类型(表)–》文档(记录)
分片和副本
3、完整日志系统基本特征
收集:能够采集多种来源的日志数据
传输:能够稳定的把日志数据解析过滤并传输到存储系统
存储:存储日志数据
分析:支持UI分析
警告:能够提供错误报告,监控机制
4、ELK的工作原理:
(1)在所有需要收集日志的服务器上部署Logstash:或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署Logstash。
(2)Logstash收集日志,将日志格式化并输出到Elasticsearch群集巾。
(3)Elasticsearch对格式化后的数据进行索引和存储。
(4)Kibana从Es群集中查询数据生成图表,并进行前端数据的展示。
总结:logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理。
名称 | ip | 部署 |
---|---|---|
node1 | 192.168.64.20 | es/kibana |
node2 | 192.168.64.15 | es |
Apacha | 192.168.64.16 | logstash |
一:环境准备
更改主机名,关闭防火墙
hosenamectl set-hostname node1
hosenamectl set-hostname node2
hosenamectl set-hostname logstash
systemctl stop firewalld
配置域名解析
vim /etc/hosts
下载Java环境
yun install -y java
把包拖进去
把包复制给node2
两边同时进行
两边同时进行
修改配置文件node1
vim /etc/elasticsearch/elasticsearch.yml
查看node1配置,反向过滤以#开头的配置
grep -v "^#" /etc/elasticsearch/elasticsearch.yml
配置node2节点的配置文件
node1和node2 只有第23行不一样,其他都一样
查看node2配置文件
node1和node2创建数据存放路径并授权
mkdir -p /data/elk_data
#与我们刚刚在配置文件中修改的第33行一样
chown elasticsearch:elasticsearch /data/elk_data/
#设置属主属组
开启服务,并查看端口9200
systemctl start elasticsearch.service
netstat -natp | grep 9200
这个端口需要等一段时间才能看到,所以不要着急,可以先看看服务有没有起来,起来了就等一等就会好了
浏览器访问node1的信息
浏览器访问node2信息
Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。
安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。
node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。
node1节点 192.168.64.20
node2节点 192.168.64.15
编译安装node
上传软件包 node-v8.2.1.tar.gz 到/opt
yum install gcc gcc-c++ make -y
cd /opt
tar zxf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make -j2 && make install
编译安装时会花费很长时间,建议把cpu调大,直接上j8!
安装phantomjs
#上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到
cd /opt
tar jxf 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
(3)#安装 Elasticsearch-head 数据可视化工具
#上传软件包 elasticsearch-head.tar.gz 到/opt
cd /opt
tar zxf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install
(4)#修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml
直接跳到最后
重启服务
systemctl restart elasticsearch
(5)启动 elasticsearch-head 服务
#必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败
cd /usr/local/src/elasticsearch-head/
npm run start &
在node1上监听端口
node2上监听端口
浏览器访问
插入索引
node1上插入索引测试
#通过命令插入一个测试索引,索引为 index-demo,类型为 test。
curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
//输出结果如下:
{
"_index" : "index-demo",
"_type" : "test",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"created" : true
}
node2
在浏览器上验证
查看索引
修改主机名
hostnamectl set-hostname apache
su
安装httpd并启动
yum install -y httpd
systemctl start httpd
安装Java环境
yum install -y java
java -version
安装logstash
cd /opt
rpm -ivh logstash-5.5.1.rpm
systemctl start logstash.service
systemctl enable logstash.service
cd /usr/share/logstash/
ls
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
Logstash这个命令测试
字段描述解释:
● -f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
● -e 后面跟着字符串 该字符串可以被当做logstash的配置(如果是“空”则默认使用stdin做为输入、stdout作为输出)
● -t 测试配置文件是否正确,然后退出
logstash -f 配置文件名字 去连接elasticsearch
(1)#输入采用标准输入 输出采用标准输出---登录192.168.59.115 在Apache服务器上
logstash -e 'input { stdin{} } output { stdout{} }'
(2)#使用 rubydebug 输出详细格式显示,codec 为一种编解码器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
(3)##使用logstash将信息写入elasticsearch中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.59.115:9200"] } }'
Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用
(1)#给日志目录可读权限
chmod o+r /var/log/messages #让 Logstash 可以读取日志
修改 Logstash 配置文件,让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中。
vim /etc/logstash/conf.d/system.conf
input {
file{
path =>"/var/log/messages" #指定要收集的日志的位置
type =>"system" #自定义日志类型标识
start_position =>"beginning" #表示从开始处收集
}
}
output {
elasticsearch { #输出到 elasticsearch
hosts => ["192.168.59.115:9200"] #指定 elasticsearch 服务器的地址和端口
index =>"system-%{+YYYY.MM.dd}" #指定输出到 elasticsearch 的索引格式
}
}
重启服务
systemctl restart logstash
打开浏览器,查看索引信息
查看索引对应日志文件
安装软件包
设置kibana的主配置文件
vim /etc/kibana/kibana.yml
启动服务
systemctl start kibana
systemctl enable kibana
netatat -natp | grep 5601
验证kibana,浏览器访问连接的主机加上kibana端口号
第一次登录需要添加一个 Elasticsearch 索引
将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示
apache服务器(192.168.64.16)
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.64.20:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.64.20:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf 将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示
进入kibana的界面,可以看到多了两个索引信息
浏览器访问node1的5601端口
添加索引apache_error-*
就可以看到相对应的了