目录
一、简介
ELK各组件介绍
ElasticSearch:
Kiabana:
Logstash:
Filebeat:
缓存/消息队列(redis、kafka、rabbitmq等)
日志处理步骤
为什么要使用ELK
完整日志系统基本特征
ELK的工作原理
二、Elasticsearch的介绍
Elasticsearch的核心:
三、Logstash
四、Kibana
五、ELK集群部署
实验环境
实验步骤
Elasticsearch部署(node1、node2节点操作)
1、环境准备
2、部署Elasticsearch软件
3、安装 Elasticsearch-head 插件
ELK Logstash 部署(在Apache节点上操作)
1、更改主机名
2、安装Apache服务(httpd)
3、安装Java环境
4、安装logstash
5、测试 Logstash
6、定义 logstash配置文件
访问测试
ELK Kiabana 部署(在 Node1 节点上操作)
1、安装 Kiabana
2、设置 Kibana 的主配置文件
3、启动 Kibana 服务
4、验证 Kibana
5、将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示(Apache服务器)
验证
六、ELFK(Filebeat+ELK)
Filebeat 的作用
ELFK 工作流程
Filebeat+ELK 部署
在 Node1 节点上操作
1、安装 Filebeat
2、设置 filebeat 的主配置文件
3、在 Logstash 组件所在节点上新建一个 Logstash 配置文件
4、浏览器访问
总结
ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。
过滤模块是logstash的核心功能。
可以添加的其他组件
filebeat结合logstash带来的好处
Fluentd
ELK、ELFK、EFLKL
ELK: ES+logstash+kibana
ELFK: ES+logstash+filebeat+kibana
ELFK: ES+filebeat+logstash+kafka+kibana
1、将日志进行集中处理
2、将日志格式化并输出到elasticsearch
3、对格式化后的数据进行索引和存储
4、前端数据的展示
日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
往往单台机器的日志我们使用grep、awk等工具就能基本实现简单分析,但是当日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用 grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
(1)在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。
(2)Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
(3)Elasticsearch 对格式化后的数据进行索引和存储。
(4)Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。
总结:logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch存储,kibana对日志进行可视化处理。
提供了一个分布式多用户能力的全文搜索引擎
1、接近实时(NRT)
Elasticsearch是一个接近实时的搜索平台,这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒)
2、集群(cluster)
3、节点(node)
4、索引(index)
5、类型(type)
6、文档(document)
7、分片和副本(shards & replicas)也是es作为搜索引擎比较快的原因
实际情况下,索引存储的数据可能超过单个节点的硬件限制。为了解决这个问题,Elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要的分片数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。
分片的主要原因:
1、水平分割扩展,增大存储量
2、分布式并跨越分片操作,提高性能和吞吐量
3、分布式分片机制和搜索请求的文档如何火鬃完全是由Elasticsearch控制的,这些对用户是完全透明的。
4、为了健壮性,建议有一个故障切换机制,为此,Elasticsearch让我们将索引分片复制一份或多份,称之为分片副本
分片副本的原因:
总之,每个索引可以被分成多个分片。一个索引可以被复制0次或者多次。一旦复制了,每个索引就有了主分片 (作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和副本的数量可以在索引创建的时候指定。在索引创建之后,你可以在指定任何时候动态的改变副本的数量,但是你事后不能改变分片的数量。
默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个副本,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外的5个副本分片(一个完全拷贝),这样的话每个索引总共有10个分片。
8、相关概念在关系型数据库和ElasticSearch中的对应关系
关系型数据库 | Elasticserch |
---|---|
数据库database | 索引index,支持全文索引 |
表table | 类型type |
数据行row | 文档document。但不需要固定结构,不同文档可以具有不同字段集合 |
数据列cloumn | 字段field |
模式schema | 映像mapping |
1、Logstash简介
Logstash由JRuby语言编写,基于消息(message-based)的简单架构,并运行在java虚拟机(JVM)上。不同于分离的代理端(agent)或主机端(server),Logstash可配置单一的代理端与其他开源软件结合,以实现不同的功能。
常用插件:
主要组件:
2、Logstash主机分类
Kibana 是用于在 Elasticsearch 中可视化数据的强大工具,可通过基于浏览器的界面轻松搜索,可视化和探索大量数据。
Kibana主要功能:
Elasticsearch无缝之集成:
Kibana架构为Elasticsearch定制,可以将任何结构化和非结构化数据加入Elasticsearch索引。Kibana还充分利用了Elasticsearch强大的搜索和分析功能。
整合数据:
Kibana能够更好地处理海量数据,并据此创建柱形图、折线图、散点图、直方图、饼图和地图。
复杂数据分析:
Kibana提升了Elasticsearch分析能力,能够更加智能地分析数据,执行数学转换并且根据要求对数据切割分块。
让更多团队成员收益:
强大的数据库可视化接口让各业务岗位都能够从数据集合受益。
接口灵活,分享更容易:
使用Kibana可以更加方便地创建、保存、分享数据,并将可视化数据快速交流。
配置简单:
Kibana的配置和启用非常简单,用户体验非常友好。Kibana自带Web服务器,可以快速启动运行。
可视化多数据源:
Kibana可以非常方便地把来自Logstash、ES-Hadoop、Beats或第三方技术的数据整合到Elasticsearch,支持的第三方技术包括Apache flume、 Fluentd 等。
简单数据导出:
Kibana可以方便地导出感兴趣的数据,与其它数据集合并融合后快速建模分析,发现新结果。
服务器类型 | 系统/主机地址 | 所需组件 | 硬件需求 |
---|---|---|---|
node1节点 | centos7 / 192.168.247.99 | Elasticsearch、Kibana | 2核4G |
node2节点 | centos7 / 192.168.247.100 | Elasticsearch | 2核4G |
Apache节点 | centos7 / 192.168.247.140 | Logstash、Apache |
关闭防火墙和selinux
systemctl stop firewalld
setenforce 0
(1)、修改主机名
hostnamectl set-hostname node
(2)、配置域名解析
vim /etc/hosts
192.168.247.99 node1
192.168.247.100 node2
(3)、配置Jave环境
如果没有安装,yum install -y java
(1)安装elsaticsearch-rpm包
cd /opt
rpm -ivh elasticsearch-5.5.0.rpm
(2)加载系统服务
systemctl daemon-reload
systemctl enable elasticsearch.service
(3)修改
elasticseaech主配置文件
先做备份
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.247.99:9200 、 http://192.168.247.100:9200 查看节点 node1、node2 的信息。
浏览器访问 http://192.168.247.99:9200/_cluster/health?pretty http://192.168.247.100:9200/_cluster/health?pretty
查看群集的健康情况,可以看到 status 值为 green(绿色), 表示节点健康运行。
浏览器访问 http://192.168.247.99:9200/_cluster/state?pretty 检查群集状态信息。
上述方式查看群集的状态对用户并不友好,可以通过安装Elasticsearch-head插件,可以更方便的管理群集。
Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。
安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。
(1)编译安装node
上传软件包 node-v8.2.1.tar.gz 到/opt
[root@node1 opt]# ls
elasticsearch-5.5.0.rpm node-v8.2.1.tar.gz rh
[root@node1 opt]# tar xf node-v8.2.1.tar.gz
[root@node1 opt]# yum install gcc gcc-c++ make -y
cd node-v8.2.1/
./configure
make && make install
(2)安装phantomjs(前端的框架)
上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到 /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
(3)安装 Elasticsearch-head 数据可视化工具
上传软件包 elasticsearch-head.tar.gz 到/opt
cd /opt
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install
(4)修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml
在末尾添加以下内容
(5)启动 elasticsearch-head 服务
必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。
cd /usr/local/src/elasticsearch-head/
npm run start &
注意:如果显示未连接,需将localhost改成IP地址
(7)插入索引
通过命令插入一个测试索引,索引为 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"}'
浏览器访问 http:192.168.247.100:9100/
查看索引信息,可以看见索引默认被分片5个,并且有一个副本。
点击“数据浏览”,会发现在node1上创建的索引为 index-demo,类型为 test 的相关信息。
[root@localhost ~]# hostnamectl set-hostname apache
[root@localhost ~]# su
[root@apache ~]#
yum install httpd -y
systemctl start httpd
yum install java -y
java -version
上传软件包 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/
Logstash 命令常用选项:
定义输入和输出流:
#输入采用标准输入,输出采用标准输出(类似管道)
rubydebug 输出使:用 rubydebug 输出详细格式显示,codec 为一种编解码器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
使用 Logstash 将信息写入 Elasticsearch 中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.247.100:9200"] } }'
结果不在标准输出显示,而是发送至 Elasticsearch 中,可浏览器访问 http://192.168.247.100:9100/ 查看索引信息和数据浏览。
格式
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.247.100:9200"] #指定 elasticsearch 服务器的地址和端
index =>"system-%{+YYYY.MM.dd}" #指定输出到 elasticsearch 的索引格式
}
}
systemctl restart logstash
浏览器访问 http://192.168.247.100:9100 查看索引信息
把安装包上传到 /opt 目录下
[root@node1 opt]# tar xf kibana-5.5.1-linux-x86_64.tar.gz -C /usr/local/
[root@node1 opt]# cd /usr/local
[root@node1 local]# mv kibana-5.5.1-linux-x86_64/ 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.10.13:9200"
--30行--取消注释,设置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"
systemctl start kibana.service
systemctl enable kibana.service
浏览器访问http://192.168.247.99:5601
第一次登录需要添加一个 ElasticSearch 索引:
点击 create 创建
索引添加完成后,点击 Discover 按钮可查看图表信息及日志信息
数据展示可以分类显示,例如:在 Available Fileds 中的 “host”
然后单击 “add”按钮,可以看到按照“host”筛选后的结果
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.247.99:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.247.99:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf
浏览器访问 http://192.168.247.100:9100 查看索引是否创建
只能看到apache-error 是因为access需要访问httpd页面才能生成,打开网页去访问Apache服务器:192.168.247.140
浏览器访问 http://192.168.247.99:5601 登录 kibana,添加 apache_access-* 和 apache_error-* 索引,查看日志信息
实验环境
在 ELK 的服务配置的基础上,增加一台 filebeat 服务器,其余不变
上传软件包 filebeat-6.6.0-linux-x86_64.tar.gz 到/opt目录
tar zxvf filebeat-6.6.0-linux-x86_64.tar.gz
mv filebeat-6.6.0-linux-x86_64/ /usr/local/filebeat
cd /usr/local/filebeat
vim filebeat.yml
#----------------------------- Filebeat inputs --------------------------------
Filebeat.inputs:
- type: log #21行指定 log 类型,从日志文件中读取消息
enabled: true #24行开启日志收集功能,默认为false
paths:
- /var/log/*.log
- /var/log/messages #29行指定监控的日志文件
fields: #可以使用 fields 配置选项设置一些参数字段添加到 output 中
service_name: filebeat
log_type: log
service_id: 192.168.247.99
#-------------------------- Elasticsearch output ------------------------------
该区域内容全部注释
#----------------------------- Logstash output --------------------------------
#165行,取消注释
output.logstash:
#167行,取消注释,指定logstash的(Apache服务器)IP和端口号
hosts: ["192.168.247.140:5044"]
启动 filebeat
./filebeat -e -c filebeat.yml
cd /etc/logstash/conf.d
vim logstash.conf
input {
beats {
port => "5044" #接收端口
}
}
output {
elasticsearch {
hosts => ["192.168.247.99:9200"]
index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}
启动 logstash
logstash -f logstash.conf
浏览器访问 http://192.168.247.99:5601 登录 Kibana,单击“Create Index Pattern”按钮添加索引“filebeat-*”,单击 “create” 按钮创建,单击 “Discover” 按钮可查看图表信息及日志信息。
ELK三个开源工具配合使用,帮助用户完成对日志的查询、排序、统计的需求,并且友好的以图形化的方式展现出来。