Beats入门简介

使用Beat收集nginx日志和指标数据

项目需求

Nginx是一款非常优秀的web服务器,往往nginx服务会作为项目的访问入口,那么,nginx的性能保障就变得非常重要了,如果nginx的运行出现了问题就会对项目有较大的影响,所以,我们需要对nginx的运行有监控措施,实时掌握nginx的运行情况,那就需要收集nginx的运行指标和分析nginx的运行日志了。

业务流程

image-20200924081614472

说明:

  • 通过Beats采集Nginx的指标数据和日志数据
  • Beats采集到数据后发送到Elasticsearch中
  • Kibana读取数据进行分析
  • 用户通过Kibana进行查看分析报表

部署Nginx

部署教程可以参考这篇博客:CentOS下如何安装Nginx?

部署完成后,我们就可以启动nginx了

启动完成后,我们通过下面命令,就可以获取到nginx中的内容了

tail -f /var/log/nginx/access.log

Beats简介

通过查看ElasticStack可以发现,Beats主要用于采集数据

官网地址:https://www.elastic.co/cn/beats/

image-20200924091657242

Beats平台其实是一个轻量性数据采集器,通过集合多种单一用途的采集器,从成百上千台机器中向Logstash或ElasticSearch中发送数据。

image-20200924091716757

通过Beats包含以下的数据采集功能

  • Filebeat:采集日志文件
  • Metricbeat:采集指标
  • Packetbeat:采集网络数据

image-20200924092015934

如果我们的数据不需要任何处理,那么就可以直接发送到ElasticSearch中

如果们的数据需要经过一些处理的话,那么就可以发送到Logstash中,然后处理完成后,在发送到ElasticSearch

最后在通过Kibana对我们的数据进行一系列的可视化展示

image-20200924092348121

Filebeat

介绍

Filebeat是一个轻量级的日志采集器

image-20200924092551044

为什么要用Filebeat?

当你面对成百上千、甚至成千上万的服务器、虚拟机和溶气气生成的日志时,请告别SSH吧!Filebeat将为你提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情不再繁华,关于Filebeat的记住以下两点:

  • 轻量级日志采集器
  • 输送至ElasticSearch或者Logstash,在Kibana中实现可视化

架构

用于监控、收集服务器日志文件.

image-20200924092749077

流程如下:

  • 首先是input输入,我们可以指定多个数据输入源,然后通过通配符进行日志文件的匹配
  • 匹配到日志后,就会使用Harvester(收割机),将日志源源不断的读取到来
  • 然后收割机收割到的日志,就传递到Spooler(卷轴),然后卷轴就在将他们传到对应的地方

下载

官网地址:https://www.elastic.co/cn/downloads/beats/filebeat

选中对应版本的Filebeat,我这里是Centos部署的,所以下载Linux版本

image-20200924093459418

下载后,我们上传到服务器上,然后创建一个文件夹

# 创建文件夹
mkdir -p /soft/beats
# 解压文件
tar -zxvf filebeat-7.9.1-linux-x86_64.tar.gz 
# 重命名
mv filebeat-7.9.1-linux-x86_64/ filebeat

然后我们进入到filebeat目录下,创建对应的配置文件

# 进入文件夹
cd filebeats
# 创建配置文件
vim mogublog.yml

添加如下内容

filebeat.inputs: # filebeat input输入
- type: stdin    # 标准输入enabled: true  # 启用标准输入
setup.template.settings: index.number_of_shards: 3 # 指定下载数
output.console:  # 控制台输出pretty: true   # 启用美化功能enable: true

启动

在我们添加完配置文件后,我们就可以对filebeat进行启动了

./filebeat -e -c mogublog.yml

image-20200924094825962

然后我们在控制台输入hello,就能看到我们会有一个json的输出,是通过读取到我们控制台的内容后输出的

image-20200924095032365

内容如下

{"@timestamp":"2019-01-12T12:50:03.585Z","@metadata":{ #元数据信息"beat":"filebeat","type":"doc","version":"6.5.4"},"source":"","offset":0,"message":"hello", #元数据信息"prospector":{"type":"stdin" #元数据信息},"input":{ #控制台标准输入"type":"stdin"},"beat":{  #beat版本以及主机信息"name":"itcast01","hostname":"ElasticStack","version":"6.5.4"},"host":{"name":"ElasticStack"}
}

读取文件

我们需要再次创建一个文件,叫 mogublog-log.yml,然后在文件里添加如下内容

filebeat.inputs:
- type: logenabled: truepaths:- /soft/beats/logs/*.log
setup.template.settings:index.number_of_shards: 3
output.console:pretty: trueenable: true

添加完成后,我们在到下面目录创建一个日志文件

# 创建文件夹
mkdir -p /soft/beats/logs# 进入文件夹
cd /soft/beats/logs# 追加内容
echo "hello" >> a.log

然后我们再次启动filebeat

 ./filebeat -e -c mogublog-log.yml

能够发现,它已经成功加载到了我们的日志文件 a.log

image-20200924095926036

同时我们还可以继续往文件中追加内容

echo "are you ok ?" >> a.log

追加后,我们再次查看filebeat,也能看到刚刚我们追加的内容

image-20200924102409656

可以看出,已经检测到日志文件有更新,立刻就会读取到更新的内容,并且输出到控制台。

自定义字段

但我们的元数据没办法支撑我们的业务时,我们还可以自定义添加一些字段

filebeat.inputs:
- type: logenabled: truepaths:- /soft/beats/logs/*.logtags: ["web", "test"]  #添加自定义tag,便于后续的处理fields:  #添加自定义字段from: test-webfields_under_root: true #true为添加到根节点,false为添加到子节点中
setup.template.settings:index.number_of_shards: 3
output.console:pretty: trueenable: true

添加完成后,我们重启 filebeat

./filebeat -e -c mogublog-log.yml

然后添加新的数据到 a.log中

echo "test-web" >> a.log

我们就可以看到字段在原来的基础上,增加了两个

image-20200924103323033

输出到ElasticSearch

我们可以通过配置,将修改成如下所示

filebeat.inputs:
- type: logenabled: truepaths:- /soft/beats/logs/*.logtags: ["web", "test"]fields:from: test-webfields_under_root: false 
setup.template.settings:index.number_of_shards: 1
output.elasticsearch:hosts: ["127.0.0.1:9200"]

启动成功后,我们就能看到它已经成功连接到了es了

image-20200924145624812

然后我们到刚刚的 logs文件夹向 a.log文件中添加内容

echo "hello mogublog" >> a.log

在ES中,我们可以看到,多出了一个 filebeat的索引库

image-20200924145928050

然后我们浏览对应的数据,看看是否有插入的数据内容

image-20200924150500441

Filebeat工作原理

Filebeat主要由下面几个组件组成: harvester、prospector 、input

harvester

  • 负责读取单个文件的内容
  • harvester逐行读取每个文件(一行一行读取),并把这些内容发送到输出
  • 每个文件启动一个harvester,并且harvester负责打开和关闭这些文件,这就意味着harvester运行时文件描述符保持着打开的状态。
  • 在harvester正在读取文件内容的时候,文件被删除或者重命名了,那么Filebeat就会续读这个文件,这就会造成一个问题,就是只要负责这个文件的harvester没用关闭,那么磁盘空间就不会被释放,默认情况下,Filebeat保存问价你打开直到close_inactive到达

prospector

  • prospector负责管理harvester并找到所有要读取的文件来源
  • 如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个harvester
  • Filebeat目前支持两种prospector类型:log和stdin
  • Filebeat如何保持文件的状态
    • Filebeat保存每个文件的状态并经常将状态刷新到磁盘上的注册文件中
    • 该状态用于记住harvester正在读取的最后偏移量,并确保发送所有日志行。
    • 如果输出(例如ElasticSearch或Logstash)无法访问,Filebeat会跟踪最后发送的行,并在输出再次可以用时继续读取文件。
    • 在Filebeat运行时,每个prospector内存中也会保存的文件状态信息,当重新启动Filebat时,将使用注册文件的数量来重建文件状态,Filebeat将每个harvester在从保存的最后偏移量继续读取
    • 文件状态记录在data/registry文件中

input

  • 一个input负责管理harvester,并找到所有要读取的源
  • 如果input类型是log,则input查找驱动器上与已定义的glob路径匹配的所有文件,并为每个文件启动一个harvester
  • 每个input都在自己的Go例程中运行
  • 下面的例子配置Filebeat从所有匹配指定的glob模式的文件中读取行
filebeat.inputs:
- type: logpaths:- /var/log/*.log- /var/path2/*.log

启动命令

./filebeat -e -c mogublog-es.yml
./filebeat -e -c mogublog-es.yml -d "publish"

参数说明

  • **-e:**输出到标准输出,默认输出到syslog和logs下
  • **-c:**指定配置文件
  • **-d:**输出debug信息

读取Nginx中的配置文件

我们需要创建一个 mogublog-nginx.yml配置文件

filebeat.inputs:
- type: logenabled: truepaths:- /soft/nginx/*.logtags: ["nginx"]fields_under_root: false 
setup.template.settings:index.number_of_shards: 1
output.elasticsearch:hosts: ["127.0.0.1:9200"]

启动后,可以在Elasticsearch中看到索引以及查看数据

image-20200924161739842

可以看到,在message中已经获取到了nginx的日志,但是,内容并没有经过处理,只是读取到原数据,那么对于我们后期的操作是不利的,有办法解决吗?

image-20200924161814066

Module

前面要想实现日志数据的读取以及处理都是自己手动配置的,其实,在Filebeat中,有大量的Module,可以简化我们的配置,直接就可以使用,如下:

./filebeat modules list

得到的列表如下所示

Disabled:
activemq
apache
auditd
aws
azure
barracuda
bluecoat
cef
checkpoint
cisco
coredns
crowdstrike
cylance
elasticsearch
envoyproxy
f5
fortinet
googlecloud
gsuite
haproxy
ibmmq
icinga
iis
imperva
infoblox
iptables
juniper
kafka
kibana
logstash
microsoft
misp
mongodb
mssql
mysql
nats
netflow
netscout
nginx
o365
okta
osquery
panw
postgresql
rabbitmq
radware
redis
santa
sonicwall
sophos
squid
suricata
system
tomcat
traefik
zeek
zscaler

可以看到,内置了很多的module,但是都没有启用,如果需要启用需要进行enable操作:

#启动
./filebeat modules enable nginx 
#禁用
./filebeat modules disable nginx

可以发现,nginx的module已经被启用。

nginx module 配置

我们到下面的目录,就能看到module的配置了

# 进入到module目录
cd modules.d/
#查看文件
vim nginx.yml.disabled

得到的文件内容如下所示

# Module: nginx
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.9/filebeat-module-nginx.html- module: nginx# Access logsaccess:enabled: true# 添加日志文件var.paths: ["/var/log/nginx/access.log*"]# Set custom paths for the log files. If left empty,# Filebeat will choose the paths depending on your OS.#var.paths:# Error logserror:enabled: truevar.paths: ["/var/log/nginx/error.log*"]

配置filebeat

我们需要修改刚刚的mogublog-nginx.yml文件,然后添加到我们的module

filebeat.inputs:
setup.template.settings:index.number_of_shards: 1
output.elasticsearch:hosts: ["127.0.0.1:9200"]
filebeat.config.modules:path: ${path.config}/modules.d/*.ymlreload.enabled: false

测试

我们启动我们的filebeat

./filebeat -e -c itcast-nginx.yml

如果启动的时候发现出错了,错误如下所示,执行如图所示的脚本即可 【新版本的ES好像不会出现这个错误】

#启动会出错,如下
ERROR fileset/factory.go:142 Error loading pipeline: Error loading pipeline for
fileset nginx/access: This module requires the following Elasticsearch plugins:
ingest-user-agent, ingest-geoip. You can install them by running the following
commands on all the Elasticsearch nodes:sudo bin/elasticsearch-plugin install ingest-user-agentsudo bin/elasticsearch-plugin install ingest-geoip

启动成功后,能看到日志记录已经成功刷新进去了

image-20200924164750123

我们可以测试一下,刷新nginx页面,或者向错误日志中,插入数据

echo "err" >> error.log

能够看到,刚刚的记录已经成功插入了

image-20200924164927557

关于module的其它使用,可以参考文档:

https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-modules.html

Metricbeat

image-20200924170741928

  • 定期收集操作系统或应用服务的指标数据
  • 存储到Elasticsearch中,进行实时分析

Metricbeat组成

Metricbeat有2部分组成,一部分是Module,另一个部分为Metricset

  • Module
    • 收集的对象:如 MySQL、Redis、Nginx、操作系统等
  • Metricset
    • 收集指标的集合:如 cpu、memory,network等

以Redis Module为例:

image-20200924170958343

下载

首先我们到官网,找到Metricbeat进行下载

image-20200924171232384

下载完成后,我们通过xftp工具,移动到指定的目录下

# 移动到该目录下
cd /soft/beats
# 解压文件
tar -zxvf 
# 修改文件名
mv  metricbeat

然后修改配置文件

vim metricbeat.yml

添加如下内容

metricbeat.config.modules:path: ${path.config}/modules.d/*.ymlreload.enabled: false
setup.template.settings:index.number_of_shards: 1index.codec: best_compression
setup.kibana:
output.elasticsearch:hosts: [""127.0.0.1:9200"]
processors:- add_host_metadata: ~- add_cloud_metadata: ~

默认会指定的配置文件,就是在

${path.config}/modules.d/*.yml

也就是 system.yml文件,我们也可以自行开启其它的收集

启动

在配置完成后,我们通过如下命令启动即可

./metricbeat -e

在ELasticsearch中可以看到,系统的一些指标数据已经写入进去了:

image-20200924171839291

system module配置

- module: systemperiod: 10s  # 采集的频率,每10秒采集一次metricsets:  # 采集的内容- cpu- load- memory- network- process- process_summary

Metricbeat Module

Metricbeat Module的用法和我们之前学的filebeat的用法差不多

#查看列表
./metricbeat modules list

能够看到对应的列表

Enabled:
system #默认启用Disabled:
aerospike
apache
ceph
couchbase
docker
dropwizard
elasticsearch
envoyproxy
etcd
golang
graphite
haproxy
http
jolokia
kafka
kibana
kubernetes
kvm
logstash
memcached
mongodb
munin
mysql
nginx
php_fpm
postgresql
prometheus
rabbitmq
redis
traefik
uwsgi
vsphere
windows

Nginx Module

开启Nginx Module

在nginx中,需要开启状态查询,才能查询到指标数据。

#重新编译nginx
./configure --prefix=/usr/local/nginx --with-http_stub_status_module
make
make install./nginx -V #查询版本信息
nginx version: nginx/1.11.6
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC)
configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module#配置nginx
vim nginx.conf
location /nginx-status {stub_status on;access_log off;
}# 重启nginx
./nginx -s reload

测试

image-20200924172317526

结果说明:

  • 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))

配置nginx module

#启用redis module
./metricbeat modules enable nginx#修改redis module配置
vim modules.d/nginx.yml

然后修改下面的信息

# Module: nginx
# Docs: https://www.elastic.co/guide/en/beats/metricbeat/6.5/metricbeat-modulenginx.
html- module: nginx
#metricsets:
# - stubstatusperiod: 10s
# Nginx hostshosts: ["http://127.0.0.1"]
# Path to server status. Default server-statusserver_status_path: "nginx-status"
#username: "user"
#password: "secret"

修改完成后,启动nginx

#启动
./metricbeat -e

测试

我们能看到,我们的nginx数据已经成功的采集到我们的系统中了

image-20200924173058267

可以看到,nginx的指标数据已经写入到了Elasticsearch。

更多的Module使用参见官方文档:

https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-modules.html

参考

Filebeat 模块与配置

Elastic Stack(ELK)从入门到实践

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可编程led灯带原理_SCPSD-250-04-27派克真空压力传感器故障和工作原理

SCPSD-250-04-27派克PARKER真空压力传感器故障和工作原理PARKER压力开关现货 PARKER压力传感器特价 派克真空压力传感器 PARKER数字压力开关2020年还剩最后2天了,这一年大家都过得不太容易,尤其是我自己这是30年以来过得最艰难的一年,经…

Kibana入门安装与介绍

Kibana入门 Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。您可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。您可以很方便的利用图表、表格及地图对数据进行多元化…

友善串口工具接收数据随机换行_使用Python3+PyQT5+Pyserial 实现简单的串口工具方法...

练手项目,先上图先实现一个简单的串口工具,为之后的上位机做准备代码如下:pyserial_demo.pyimport sys import serial import serial.tools.list_ports from PyQt5 import QtWidgets from PyQt5.QtWidgets import QMessageBox from PyQt5.QtC…

Vue渲染函数

前面的话 Vue 推荐在绝大多数情况下使用 template 来创建HTML。然而在一些场景中,真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更接近编译器。本文将详细介绍Vue渲染函数 引入 下面是一个例子,如果要…

Logstash入门简介

Logstash入门简介 介绍 Logstash是一个开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到最喜欢的存储库中(我们的存储库当然是ElasticSearch) 我们回到我们ElasticStack的架构图&a…

Django templates 和 urls 拆分

如果在Django项目 下面新建了blog和polls两个APP应用,在每个APP下面都各自新建自己的url和templates,那么我们需要如何进行项目配置呢? INSTALLED_APPS [ django.contrib.admin, django.contrib.auth, django.contrib.contenttypes, dja…

springboot怎么杀进程_线上服务平均响应时间太长,怎么排查?

线上服务平均响应时间太长,怎么排查?https://xie.infoq.cn/article/914b5c56000a3880016abd8d6前言:最近线上环境某个接口服务响应时间偏长,导致用户体验超差,那平时该怎么快速的排查这类问题呢?①、为代码…

MPEG音视频编解码之MP3编解码概述

2 MP3编解码原理 2.1 MP3音频压缩标准概述 MP3全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III)。是当今较流行的一种数字音频编码和有损压缩格式,它设计用来大幅度地降低音频数据量,而对于…

Python实现GitBook工具

写在前面 本工具是通过Python脚本实现 GitBook 自动 生成 执行 编译 发布的功能 你可以在这里下载exe 使用 1. exe下载,并移动位置 将exe文件放在你的gitbook文件夹中,或者放在空文件夹中 2. file.md 创建 名为file.md的文件,在你要写book的目录下 注意: 这里file.md文件名…

shell脚本中用到的条件和循环语句

本博文介绍一下shell脚本中常用的条件和循环语句:条件语句:循环语句:示例:if语句:eg1.eg2.2.case语句:简单的case语句:配合循环的case语句:3.for语句:简单的for语句&…

processing动态代码大全_做一张动态海报需要多少步?

人们习惯性地把程序员跟设计师分成两种不同性质的人,好像程序员就不会有美感,设计师逻辑思维就一定会很弱,但最近几年我们发现越来越多的程序员学设计,设计师学编程的跨界故事。新媒体艺术家,邱伟豪也是其中一员&#…

手写springboot_Spring Boot 入门教程 | 图文讲解

目录一、Spring Boot 是什么二、为什么要使用 Spring Boot三、快速入门3.1 创建 Spring Boot 项目3.2 项目结构3.3 引入 Web 依赖3.4 编写第一个接口3.5 启动程序,验证效果四、总结五、GitHub 示例代码一、Spring Boot 是什么以下截图自 Spring Boot 官方文档&#…

lunix 安装python3

Linux下默认系统自带python2.6的版本,这个版本被系统很多程序所依赖,所以不建议删除,如果使用最新的Python3那么我们知道编译安装源码包和系统默认包之间是没有任何影响的,所以可以安装python3和python2共存 首先去python官网下载…

机器学习之朴素贝叶斯法

转载请注明出处:http://www.cnblogs.com/Peyton-Li/ 朴素贝叶斯法是机器学习模型中一个比较简单的模型,实现简单,比较常用。 是定义在输入空间上的随机向量,是定义在输出空间上的随机变量。是和的联合概率分布。训练数据集由独立同…

如何让梯形变成平行四边形_开放的课堂 创新的天地——平行四边形的面积教学片段与反思...

一、 课题的确定学生在三年级学过长方形、正方形的面积计算,经历过从数方格的办法得出面积计算公式的过程。因此,学生对于面积计算公式的推导有一定的经验和知识基础。基于上述考虑,我想完全放手让学生去研究如何计算平行四边形的面积。这对学…

bzoj1670【Usaco2006 Oct】Building the Moat 护城河的挖掘

1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 387 Solved: 288[Submit][Status][Discuss]Description 为了防止口渴的食蚁兽进入他的农场,Farmer John决定在他的农场周围挖一条护城河。农场里一共同拥有N(8…

Vue之组件之间的数据传递

Vue的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据,必须使用特定的方法才能实现组件之间的数据传递。 下列为在vue-cli创建项目中的操作 一父组件向子组件传递数据 在Vue中,用props向子组件传递数据。 子组件部分&#…

偶然发现一个大佬写的 React 脚手架,叫Moderate, 用起来很方便

发现一个大佬写的 React 脚手架,叫Moderate, 用起来很方便 Moderate,意思为适中的,适度的,用这个作为代号,主要取决于他的本名“中用”,其一以贯之的想法就是中庸,秉承着以人为本的态度&#xf…

案例 自动办公_1300张办公系列前台参考图,请您查收!

设计情报局室内设计师的灵感聚集地关注一个有格调的空间必定有一处高颜值的前台漂亮的前台很重要...是空间给人的第一印象一个独一无二的前台设计还可以提升整个空间的气质与逼格连个漂亮的前台都没有作为颜控界扛把子的设计师们还怎么混?SO今天小编给大家带来一份《…

目标检测_目标检测 | Anchor free的目标检测进阶版本

今天说的是《Soft Anchor-Point Object Detection》,其也是最近关于anchor free的目标检测的论文,作者来自于CMU,一作同样也是FSAF(2019 CVPR)的作者。该论文的出发点还是在样本选择和FPN特征选择层面。背景Anchor free是目标检测领域的一个研…