1. Nginx日志分析系统
1.1 项目需求
Nginx是一款非常优秀的web服务器,往往nginx服务会作为项目的访问入口,那么,nginx的性能保障就变得非常重要了,如果nginx的运行出现了问题就会对项目有较大的影响,所以,我们需要对nginx的运行有监控措施,实时掌握nginx的运行情况,那就需要收集nginx的运行指标和分析nginx的运行日志了。
1.2 业务流程
说明:
- 通过Beats采集Nginx的指标数据和日志数据
- Beats采集到数据后发送到Elasticsearch中
- Kibana读取数据进行分析
- 用户通过Kibana进行查看分析报表
1.3 部署安装Nginx
1 | tar -xvf nginx-1.11.6.tar.gz |
具体操作参考:https://wgy1993.gitee.io/archives/65b69107.html
2. Beats 简介
官网:https://www.elastic.co/cn/products/beats
Beats系列产品:
2.1 Filebeat
2.1.1 架构
用于监控、收集服务器日志文件.
2.1.2 部署与运行
下载(或使用资料中提供的安装包,版本为:filebeat-6.5.4):https://www.elastic.co/downloads/beats
1 | mkdir /itcast/beats |
2.1.3 读取文件
1 | #配置读取文件项 itcast-log.yml |
可以看出,已经检测到日志文件有更新,立刻就会读取到更新的内容,并且输出到控制台。
2.1.4 自定义字段
1 | #配置读取文件项 itcast-log.yml |
2.1.5 输出到Elasticsearch
1 | # itcast-log.yml |
在日志文件中输入新的内容进行测试:
查看数据:
2.1.6 Filebeat工作原理
Filebeat由两个主要组件组成:prospector 和 harvester。
- harvester:
- 负责读取单个文件的内容。
- 如果文件在读取时被删除或重命名,Filebeat将继续读取文件。
- prospector
- prospector 负责管理harvester并找到所有要读取的文件来源。
- 如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个harvester。
- Filebeat目前支持两种prospector类型:log和stdin。
- Filebeat如何保持文件的状态
- Filebeat 保存每个文件的状态并经常将状态刷新到磁盘上的注册文件中。
- 该状态用于记住harvester正在读取的最后偏移量,并确保发送所有日志行。
- 如果输出(例如Elasticsearch或Logstash)无法访问,Filebeat会跟踪最后发送的行,并在输出再次可用时继续读取文件。
- 在Filebeat运行时,每个prospector内存中也会保存的文件状态信息,当重新启动Filebeat时,将使用注册文件的数据来重建文件状态,Filebeat将每个harvester在从保存的最后偏移量继续读取。
- 文件状态记录在data/registry文件中。
启动命令:
1 | ./filebeat -e -c itcast.yml |
2.1.7 读取Nginx日志文件
1 | # itcast-nginx.yml |
启动后,可以在Elasticsearch中看到索引以及查看数据:
可以看到,在message中已经获取到了nginx的日志,但是,内容并没有经过处理,只是读取到原数据,那么对于我们后期的操作是不利的,有办法解决吗?
2.1.8 Module
前面要想实现日志数据的读取以及处理都是自己手动配置的,其实,在Filebeat中,有大量的Module,可以简化我们的配置,直接就可以使用,如下:
1 | ./filebeat modules list |
可以看到,内置了很多的module,但是都没有启用,如果需要启用需要进行enable操作:
1 | ./filebeat modules enable nginx #启动 |
可以发现,nginx的module已经被启用。
2.1.8.1 nginx module 配置
1 | - module: nginx |
2.1.8.2 配置filebeat
1 | #vim itcast-nginx.yml |
2.1.8.3 测试
1 | ./filebeat -e -c itcast-nginx.yml |
测试发现,数据已经写入到了Elasticsearch中,并且拿到的数据更加明确了:
当然了,其他的Module的用法参加官方文档:
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-modules.html
2.2 Metricbeat
- 定期收集操作系统或应用服务的指标数据
- 存储到Elasticsearch中,进行实时分析
2.2.1 Metricbeat组成
Metricbeat有2部分组成,一部分是Module,另一部分为Metricset。
- Module
- 收集的对象,如:mysql、redis、nginx、操作系统等;
- Metricset
- 收集指标的集合,如:cpu、memory、network等;
以Redis Module为例:
2.2.2 部署与收集系统指标
1 | tar -xvf metricbeat-6.5.4-linux-x86_64.tar.gz |
在ELasticsearch中可以看到,系统的一些指标数据已经写入进去了:
system module配置:
1 | # Module: system |
2.2.3 Module
1 | ./metricbeat modules list #查看列表 |
2.2.4 Nginx Module
2.2.4.1 开启nginx的状态查询
在nginx中,需要开启状态查询,才能查询到指标数据。
1 | #重新编译nginx |
测试:
结果说明:
- Active connections:正在处理的活动连接数
- server accepts handled requests
- 第一个 server 表示Nginx启动到现在共处理了9个连接
- 第二个 accepts 表示Nginx启动到现在共成功创建 9 次握手
- 第三个 handled requests 表示总共处理了 21 次请求
- 请求丢失数 = 握手数 - 连接数 ,可以看出目前为止没有丢失请求
- Reading: 0 Writing: 1 Waiting: 1
- Reading:Nginx 读取到客户端的 Header 信息数
- Writing:Nginx 返回给客户端 Header 信息数
- Waiting:Nginx 已经处理完正在等候下一次请求指令的驻留链接(开启keep-alive的情况下,这个值等于Active - (Reading+Writing))
2.2.4.2 配置Nginx Module
1 | #启用redis module |
测试:
可以看到,nginx的指标数据已经写入到了Elasticsearch。
更多的Module使用参见官方文档:
https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-modules.html
3. Kibana
Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。您可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。您可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。
官网:https://www.elastic.co/cn/products/kibana
3.1 配置安装
1 | #解压安装包 |
可以看到kibana页面,并且可以看到提示,导入数据到Kibana。
3.2 功能说明
3.3 数据探索
首先先添加索引信息:
即可查看索引数据:
3.4 Metricbeat 仪表盘
可以将Metricbeat的数据在Kibana中展示。
1 | #修改metricbeat配置 |
即可在Kibana中看到仪表盘数据:
查看系统信息:
3.5 Nginx 指标仪表盘
3.6 Nginx 日志仪表盘
1 | #修改配置文件 vim itcast-nginx.yml |
可以看到nginx的FileBeat的仪表盘了:
3.7 自定义图表
在Kibana中,也可以进行自定义图表,如制作柱形图:
将图表添加到自定义Dashboard中:
3.8 开发者工具
在Kibana中,为开发者的测试提供了便捷的工具使用,如下:
4. Logstash
4.1 简介
用途:
4.2 部署安装
1 | #检查jdk环境,要求jdk1.8+ |
执行效果如下:
4.3 配置详解
Logstash的配置有三部分,如下:
1 | input { #输入 |
4.3.1 输入
- 采集各种样式、大小和来源的数据,数据往往以各种各样的形式,或分散或集中地存在于很多系统中。
- Logstash 支持各种输入选择 ,可以在同一时间从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。
4.3.2 过滤
- 实时解析和转换数据
- 数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。
4.3.3 输出
Logstash 提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。
4.4 读取自定义日志
前面我们通过Filebeat读取了nginx的日志,如果是自定义结构的日志,就需要读取处理后才能使用,所以,这个时候就需要使用Logstash了,因为Logstash有着强大的处理能力,可以应对各种各样的场景。
4.4.1 日志结构
1 | 2019-03-15 21:21:21|ERROR|读取数据出错|参数:id=1002 |
可以看到,日志中的内容是使用“|”进行分割的,使用,我们在处理的时候,也需要对数据做分割处理。
4.4.2 编写配置文件
1 | #vim itcast-pipeline.conf |
4.4.3 启动测试
1 | #启动 |
可以看到,数据已经被分割了。
4.4.4 输出到Elasticsearch
1 | input { |
测试:
5. 综合练习
下面我们将前面所学习到的Elasticsearch + Logstash + Beats + Kibana整合起来做一个综合性的练习,目的就是让学生们能够更加深刻的理解Elastic Stack的使用。
5.1 流程说明
- 应用APP生产日志,用来记录用户的操作
- [INFO] 2019-03-15 22:55:20 [cn.itcast.dashboard.Main] - DAU|5206|使用优惠券|2019-03-15 03:37:20
- [INFO] 2019-03-15 22:55:21 [cn.itcast.dashboard.Main] - DAU|3880|浏览页面|2019-03-15 07:25:09
- 通过Filebeat读取日志文件中的内容,并且将内容发送给Logstash,原因是需要对内容做处理
- Logstash接收到内容后,进行处理,如分割操作,然后将内容发送到Elasticsearch中
- Kibana会读取Elasticsearch中的数据,并且在Kibana中进行设计Dashboard,最后进行展示
说明:日志格式、图表、Dashboard都是自定义的。
5.2 APP介绍
APP在生产环境应该是真实的系统,然而,我们现在仅仅的学习,为了简化操作,所以就做数据的模拟生成即可。
业务代码如下:
1 |
|
运行结果:
1 | [INFO] 2019-03-15 22:54:42 [cn.itcast.dashboard.Main] - DAU|4645|领取优惠券|2019-03-15 07:40:29 |
代码在资料中可以找到,itcast-dashboard-generate.zip。
部署:
1 | #打包成jar包,在linux上运行 |
5.3 Filebeat
1 | #vim itcast-dashboard.yml |
5.4 Logstash
1 | #vim itcast-dashboard.conf |
5.5 Kibana
启动Kibana:
1 | #启动 |
添加Logstash索引到Kibana中:
5.5.1 时间间隔的柱形图
说明:x轴是时间,以天为单位,y轴是count数
保存:(my-dashboard-时间间隔的柱形图)
5.5.2 各个操作的饼图分布
统计各个操作的数量,形成饼图。
保存:(my-dashboard-各个操作的饼图)
5.5.3 数据表格
在数据探索中进行保存,并且保存,将各个操作的数据以表格的形式展现出来。
保存:(my-dashboard-表格)
5.6 制作Dashboard
-------------本文结束感谢您的阅读-------------
本文标题: ElasticStack(二)
本文链接: https://wgy1993.gitee.io/archives/1b8ebebc.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!
