日志分析系统ELK之Kibanaes的替代metricbeat
Posted Tuki_a
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日志分析系统ELK之Kibanaes的替代metricbeat相关的知识,希望对你有一定的参考价值。
Kibana
Kibana简介
Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
Kibana 核心产品搭载了一批经典功能:柱状图、线状图、饼图、旭日图,等等。可以将地理数据融入任何地图;精选的时序性 UI,对Elasticsearch 中的数据执行高级时间序列分析;利用 Graph 功能分析数据间的关系;Kibana 开发工具为开发人员提供了多种强大方法来帮助其与 Elastic Stack 进行交互。
Kibana7.6指南:https://www.elastic.co/guide/en/kibana/7.6/index.html
怎么将数据导入kibana
要开始在 Kibana 中处理数据,可以:
1、使用文件数据可视化工具上传 CSV、JSON 或日志文件。
2、使用 GeoJSON 上传功能上传地理空间数据。
3、通过设置 Beats 模块索引日志、指标、事件或应用程序数据。
4、将 Kibana 与现有的 Elasticsearch 索引连接起来。
Kibana 使用索引模式来告诉它要探索哪些 Elasticsearch 索引。如果添加示例数据或运行内置教程,将免费获得一个索引模式,并且很好地开始探索。如果加载自己的数据,则可以在Management 中创建索引模式。
演示环境
es、logstash和kibana都是7.6.1版本
es集群:
server1 192.168.122.11
server2 192.168.122.12
logstash和kibana部署在一台虚拟机上:
server3 192.168.122.13
kibana安装与配置
kibana下载:https://elasticsearch.cn/download/
#注意版本要与es和logstash版本一致
[root@server3 ~]# rpm -ivh kibana-7.6.1-x86_64.rpm
[root@server3 ~]# cd /etc/kibana/
[root@server3 kibana]# ls
apm.js kibana.yml
[root@server3 kibana]# vim kibana.yml
设置服务端口和服务监听地址(都是本机的)
设置ES集群地址、kibana在ES中创建的索引
设置中文
开启服务,端口正常开启
到浏览器访问部署kibana端的5601端口,访问成功,进入如下界面
可以添加官方准备好的模板
查看dashborad
官方的模板做的很成熟很漂亮,这时去es端查看会看到相应的索引已经建立
可视化现有 Elasticsearch 索引中的数据
创建索引
创建一个索引,查看之前的存在es中的apache的日志数据,按下图步骤操作即可
将es中的apache的索引筛选出来
选择时间戳 -> 创建索引模式,现在就创建了一个和apache的日志相关联的索引了
选择索引apachelog-
创建可视化仪表盘图
按下图操作
选择创建仪表盘,这儿自己想创建其他的都可以,只不过是数据的表现形式不同罢了
选择索引apachelog-*
可以看到访问次数为124。这里要注意时间范围的选择,默认是过去15分钟的数据,调整为查看今天的数据
保存该可视化
取个名字直接保存
创建可视化垂直条形图
和上面的操作同理
选择垂直条形图
选择索引
条形图的Y轴是访问的次数,默认没有X轴,添加X轴
选择词来定义,使用客户ip作为X轴,降序排列,看最高的前五名,应用更改
可以看到条形图,被不同的主机访问过的次数(提前在不同主机访问kibana主机的apache,做了压测)
保存可视化图
创建仪表板
创建一个仪表板将上面保存的不同的图放到一起对比显示
添加websit和top5(前面保存的图)
如此便将不同的数据视图放在一起了,该界面可以全屏显示,展示数据信息时很方便
我们在不同的主机访问目标主机的apache再产生点数据
[root@server2 ~]# ab -n 122 -c1 http://192.168.122.13/index.html #有ab压测工具的可以使用该命令
[root@server2 ~]# for i in {1..77};do curl 192.168.122.13;done #没有ab工具的也可以用循环来进行大量访问
刷新可以看到数据的变化
启用xpack安全验证
目前部署的ELK三个软件端口都是开放的,任何人都能访问,没有任何安全保障,容易受到攻击,比如日志索引被删除等恶意行为,所以使用 xpack安全组件来保护ELK,这样es都是内部运行的,不暴露外网,更安全。
按下图操作查看es集群内部状态
点击右上角的进入设置模式
会不停的报错,因为我们没有开启xpack安全验证
es集群端设置
开启xpack安全验证。集群模式需要先创建证书。先配置传输层,使es集群可以通信
# cd /usr/share/elasticsearch/
# bin/elasticsearch-certutil ca #使用elasticsearch-certutil工具生成ca,密码可以空,方便使用
# bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 #使用ca创建证书elastic-stack-ca.p12,密码可以为空,直接回车
# cp elastic-certificates.p12 elastic-stack-ca.p12 /etc/elasticsearch #把证书复制到elasticsearch的配置目录
# cd /etc/elasticsearch
# chown elasticsearch elastic-certificates.p12 elastic-stack-ca.p12 #文件拥有者改为 elasticsearch,以便elasticsearch可以使用证书,或者直接改权限大小也行
修改elasticsearch的主配置文件,添加五句话,开启xpack安全验证,重新启动elasticsearch服务
[root@server1 elasticsearch]# vim /etc/elasticsearch/elasticsearch.yml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12
[root@server1 elasticsearch]# systemctl restart elasticsearch.service
拷贝证书到集群中的其它节点server2,做同server1一样的修改;开启xpack安全验证,重新启动elasticsearch服务
[root@server2 elasticsearch]# chown elasticsearch elastic-certificates.p12 #文件拥有者改为 elasticsearch
[root@server2 elasticsearch]# vim /etc/elasticsearch/elasticsearch.yml #修改elasticsearch的主配置文件
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12
[root@server2 elasticsearch]# systemctl restart elasticsearch.service
ES集群重启正常后,设置用户密码
[root@server1 bin]# pwd
/usr/share/elasticsearch/bin
[root@server1 bin]# ./elasticsearch-setup-passwords interactive
#交互式设置用户密码全部为elastic
kibana端设置
这时访问kibana已经需要用户名密码了
登录进去会发现kibana状态为红即没有正常运行
所以设置kibana,修改主配置文件。添加访问es集群的用户和密码,然后重启kibana
[root@server3 conf.d]# cd /etc/kibana/
[root@server3 kibana]# vim kibana.yml
[root@server3 kibana]# systemctl restart kibana.service
服务正常开启
重新以elastic用户身份登陆kibana已正常,退出设置模式
logstash端设置
server3采集本机apache的数据时需要添加用户名和密码才可以正常运行采集
[root@server3 conf.d]# pwd
/etc/logstash/conf.d
[root@server3 conf.d]# vim grank.conf
input {
file {
path => "/var/log/httpd/access_log"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}
}
output {
stdout {}
elasticsearch {
hosts => ["192.168.122.11:9200"]
index => "apachelog-%{+yyyy.MM.dd}"
user => "elastic" #添加用户名
password => "elastic" #添加密码
}
}
运行 Logstash 并加载grok.conf文件中定义的 Logstash 配置
# /usr/share/logstash/bin/logstash -f grok.conf
在其他主机进行压测访问apache产生日志
到kibana端查看数据上传成功,证明logstash采集成功
elasticsearch-head的设置
现在返回elasticsearch-head,会发现访问失败
进入server1的/etc/elasticsearch目录,修改主配置文件,允许head认证并重启服务
[root@server1 bin]# cd /etc/elasticsearch/
[root@server1 elasticsearch]# vim elasticsearch.yml
[root@server1 elasticsearch]# systemctl restart elasticsearch.service
在浏览器加上验证后缀访问成功
http://192.168.122.11:9100/?auth_user=elastic&auth_password=elastic
metricbeat轻量级采集工具
logstash是负责采集数据的,是入口,流向为logstash-> ES->kibana,但是它的资源消耗很大,有时候没那么多内存给他占用,同时有些定制的采集指标logstash无法满足。所以我们想使用轻量级的采集工具metricbeat来实现采集,流向为metricbeat-> ES->kibana,可以获取系统级的 CPU 使用率、内存、文件系统、磁盘 IO 和网络 IO 统计数据,还可针对系统上的每个进程获得与 top 命令类似的统计数据。同时Metricbeat 提供多种内部模块,用于从服务中收集指标,例如 Apache、nginx、MongoDB、mysql、PostgreSQL、Prometheus、Redis 等等。
点击使用metricbeat,现在是红色的,还不可用
输入监测集群URL:http://192.168.122.11:9200,会出现提示操作,按照提示操作即可
官方下载metricbeat安装包给server1、server2安装,并都给server1和server2(即es集群内的所有主机)进行以下步骤
[root@server1 ~]# rpm -ivh metricbeat-7.6.1-x86_64.rpm
[root@server1 ~]# metricbeat modules enable elasticsearch-xpack #激活elasticsearch-xpack模块
[root@server1 modules.d]# cd /etc/metricbeat/modules.d
[root@server1 modules.d]# vim elasticsearch-xpack.yml
进入/etc/metricbeat/modules.d查看全部模块,可以看到很多文件后面带disable表示未激活,elasticsearch-xpack已被激活,其实激活命令本质上就是改文件的名字,编辑elasticsearch-xpack.yml文件
由于开启了xpack,需要添加用户名和密码
修改metricbeat主配置文件
[root@server1 modules.d]# cd ..
[root@server1 metricbeat]# ls
fields.yml metricbeat.reference.yml metricbeat.yml modules.d
[root@server1 metricbeat]# vim metricbeat.yml
[root@server1 metricbeat]# systemctl enable --now metricbeat.service
设置es集群ip,添加用户名和密码,重启metricbeat
此时到kibana查看会发现迁移状态已经自动捕捉到,点击完成即可
server2按上面相同步骤完成后也同样成功迁移
此时按照提示再点击禁用内部收集即可完成迁移
es集群的三个节点都是蓝色了,成功开启
随便点击一个节点,这里查看server1的数据,可以看到节点内存、CPU等状态
类似的轻量级采集的base还有很多,比如filebeat等等,这里不再赘述,感兴趣的同学自行查阅文档。
filebeat的数据流向为filebeat->logstash-> ES->kibana,组合使用,假如流量很大,为了确保数据不丢失,可以加入中间件kafaka或者redis,实现消息队列,即filebeat->logstash->kafaka-> ES->kibana
kibana控制台
控制台插件提供一个用户界面来和 Elasticsearch 的 REST API(REST就是一种设计API的模式) 交互。控制台有两个主要部分: editor ,用来编写提交给 Elasticsearch 的请求; response 面板,用来展示请求结果的响应。
由于我们开启了xpack,想要输入命令时还需要用户密码,这里还有一个更加方便的方法,使用kibana的控制台,可以直接输入命令,还不用用户密码,因为登陆kibana时已经输入过了。控制台实际还是后台调用了API,找es执行,再返回给kibana展示。
简单测试,输入了健康查询语句,可以看到节点的健康状况
当敲入一行命令,控制台会给出上下文相关的提示。这些提示可以探索每条 API 参数,或者用于提高输入速度。控制台会提示 APIs 、索引和字段名。
一旦在左边的面板中敲入命令,可以点击 URL 行边上的绿色小三角提交这条请求到 Elasticsearch。注意,当移动光标的时候,会有一个小三角和扳手图标跟随着。我们把这个叫做动作菜单。也可以选择写多条请求并一起提交它们。
ELK优化
数据冷热分离
注意ELK是实时监测数据的,虽然有数据库的功能,但是完全和数据库不一样,实时监测非常消耗资源,如果只当数据库,纯属大材小用。
一般要把数据冷热分离,刚刚采集到数据可以理解为热数据(hot),实时写入ELK分析;过一段时间,数据变为温数据(warm),可以用来查询,不再写入;再过一段时间变为冷数据(cold),查询也很少了,我们可以考虑把他放到数据库中存储,或者从硬件方面来说,从高性能的节点存储换为普通性能的节点,把高性能的节点留给热数据;再过很久,会删除数据。
- 想要实现上面的冷热分离,进行生命周期管理,必须有
1、节点标签。区分冷热节点
2、生命周期策略。定义热阶段的大小,最长时间,存在时长等等
3、索引模板引用索引模板策略。模板创建索引,加载生命周期策略
4、索引模板指定调度节点。将新建索引分片分配到热节点
搜索速度优化
为了提高es搜索速度,可以考虑下面几种方法:
1、为文件系统cache留有足够内存,内存越大,速度越快
2、提升i/o,使用固态硬盘
3、减少层层嵌套
以上是关于日志分析系统ELK之Kibanaes的替代metricbeat的主要内容,如果未能解决你的问题,请参考以下文章