Beats 简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Filebeat

在这里插入图片描述

架构

用于监控、收集服务器日志文件
在这里插入图片描述

部署与运行

下载(版本为:filebeat-6.5.4):https://www.elastic.co/downloads/beats

mkdir /itcast/beats
tar -xvf filebeat-6.5.4-linux-x86_64.tar.gz
cd filebeat-6.5.4-linux-x86_64
#创建如下配置文件 itcast.yml
filebeat.inputs:
- type: stdin
enabled: true
setup.template.settings:
index.number_of_shards: 3
output.console:
pretty: true
enable: true
#启动filebeat
./filebeat -e -c itcast.yml
#输入hello运行结果如下:
hello
{
 "@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": "itcast01",
  "version": "6.5.4"
},
 "host": {
  "name": "itcast01"
}
}

读取文件

#配置读取文件项 itcast-log.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /itcast/beats/logs/*.log
setup.template.settings:
index.number_of_shards: 3
output.console:
pretty: true
enable: true
#启动filebeat
./filebeat -e -c itcast-log.yml
#/haoke/beats/logs下创建a.log文件,并输入如下内容
hello
world
#观察filebeat输出
{
 "@timestamp": "2019-01-12T14:16:10.192Z",
  "@metadata": {
  "beat": "filebeat",
  "type": "doc",
  "version": "6.5.4"
},
 "host": {
  "name": "itcast01"
},
 "source": "/haoke/beats/logs/a.log",
 "offset": 0,
 "message": "hello",
 "prospector": {
  "type": "log"
},
 "input": {
  "type": "log"
},
 "beat": {
  "version": "6.5.4",
  "name": "itcast01",
  "hostname": "itcast01"
}
}
{
 "@timestamp": "2019-01-12T14:16:10.192Z",
 "@metadata": {
  "beat": "filebeat",
  "type": "doc",
  "version": "6.5.4"
},
 "prospector": {
  "type": "log"
},
 "input": {
  "type": "log"
},
 "beat": {
  "version": "6.5.4",
  "name": "itcast01",
  "hostname": "itcast01"
},
 "host": {
  "name": "itcast01"
},
 "source": "/haoke/beats/logs/a.log",
 "offset": 6,
 "message": "world"
}

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

自定义字段

#配置读取文件项 itcast-log.yml
filebeat.inputs:
- type: log
enabled: true
paths:
  - /itcast/beats/logs/*.log
tags: ["web"]  #添加自定义tag,便于后续的处理
fields:  #添加自定义字段
 from: itcast-im
fields_under_root: true #true为添加到根节点,false为添加到子节点中
setup.template.settings:
index.number_of_shards: 3
output.console:
pretty: true
enable: true
#启动filebeat
./filebeat -e -c itcast-log.yml
#/haoke/beats/logs下创建a.log文件,并输入如下内容
123
#执行效果
{
 "@timestamp": "2019-01-12T14:37:19.845Z",
 "@metadata": {
  "beat": "filebeat",
  "type": "doc",
  "version": "6.5.4"
},
 "offset": 0,
 "tags": [
  "haoke-im"
],
 "prospector": {
  "type": "log"
},
 "beat": {
  "name": "itcast01",
  "hostname": "itcast01",
  "version": "6.5.4"
},
 "host": {
  "name": "itcast01"
},
 "source": "/itcast/beats/logs/a.log",
 "message": "123",
 "input": {
  "type": "log"
},
 "from": "haoke-im"
}

输出到Elasticsearch

# itcast-log.yml
filebeat.inputs:
- type: log
enabled: true
paths:
 - /itcast/beats/logs/*.log
tags: ["haoke-im"]
fields:
 from: haoke-im
fields_under_root: false
setup.template.settings:
index.number_of_shards: 3 #指定索引的分区数
output.elasticsearch: #指定ES的配置
hosts: ["192.168.1.7:9200","192.168.1.7:9201","192.168.1.7:9202"]

在日志文件中输入新的内容进行测试:
在这里插入图片描述
查看数据:
在这里插入图片描述

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文件中。
      启动命令:
/filebeat -e -c itcast.yml
./filebeat -e -c itcast.yml -d "publish"
#参数说明
-e: 输出到标准输出,默认输出到syslog和logs下
-c: 指定配置文件
-d: 输出debug信息
#测试: ./filebeat -e -c itcast-log.yml -d "publish"
DEBUG  [publish]    pipeline/processor.go:308    Publish event: {
 "@timestamp": "2019-01-12T15:03:50.820Z",
 "@metadata": {
  "beat": "filebeat",
  "type": "doc",
  "version": "6.5.4"
},
 "offset": 0,
 "tags": [
  "haoke-im"
],
 "input": {
  "type": "log"
},
 "prospector": {
  "type": "log"
},
 "beat": {
  "name": "itcast01",
  "hostname": "itcast01",
  "version": "6.5.4"
},
 "source": "/haoke/beats/logs/a.log",
 "fields": {
  "from": "haoke-im"
},
 "host": {
  "name": "itcast01"
},
 "message": "456"
}

读取Nginx日志文件

# itcast-nginx.yml
filebeat.inputs:
- type: log
enabled: true
paths:
  - /usr/local/nginx/logs/*.log
tags: ["nginx"]
setup.template.settings:
index.number_of_shards: 3 #指定索引的分区数
output.elasticsearch: #指定ES的配置
hosts: ["192.168.40.133:9200","192.168.40.134:9200","192.168.40.135:9200"]
#启动
./filebeat -e -c itcast-nginx.yml

在这里插入图片描述
启动后,可以在Elasticsearch中看到索引以及查看数据:
在这里插入图片描述
在这里插入图片描述
可以看到,在message中已经获取到了nginx的日志,但是,内容并没有经过处理,只是读取到原数据,那么对于我们后期的操作是不利的,有办法解决吗?

Module

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

./filebeat modules list
Enabled:
Disabled:
apache2
auditd
elasticsearch
haproxy
icinga
iis
kafka
kibana
logstash
mongodb
mysql
nginx
osquery
postgresql
redis
suricata
system
traefik

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

./filebeat modules enable nginx #启动
./filebeat modules disable nginx #禁用
Enabled:
nginx
Disabled:
apache2
auditd
elasticsearch
haproxy
icinga
iis
kafka
kibana
logstash
mongodb
mysql
redis
osquery
postgresql
suricata
system
traefik

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

nginx module 配置

- module: nginx
 # Access logs
access:
 enabled: true
 var.paths: ["/usr/local/nginx/logs/access.log*"]
  # Set custom paths for the log files. If left empty,
  # Filebeat will choose the paths depending on your OS.
   #var.paths:
 # Error logs
error:
 enabled: true
 var.paths: ["/usr/local/nginx/logs/error.log*"]
  # Set custom paths for the log files. If left empty,
  # Filebeat will choose the paths depending on your OS.
  #var.paths:

配置filebeat

#vim itcast-nginx.yml
filebeat.inputs:
#- type: log
# enabled: true
# paths:
#  - /usr/local/nginx/logs/*.log
# tags: ["nginx"]
setup.template.settings:
index.number_of_shards: 3
output.elasticsearch:
hosts: ["192.168.40.133:9200","192.168.40.134:9200","192.168.40.135:9200"]
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false

测试

./filebeat -e -c itcast-nginx.yml
#启动会出错,如下
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-agent
  sudo bin/elasticsearch-plugin install ingest-geoip
 
#解决:需要在Elasticsearch中安装ingest-user-agent、ingest-geoip插件
#在资料中可以找到,ingest-user-agent.tar、ingest-geoip.tar、ingest-geoip-conf.tar 3个文件
#其中,ingest-user-agent.tar、ingest-geoip.tar解压到plugins下
#ingest-geoip-conf.tar解压到config下
#问题解决。

在这里插入图片描述
测试发现,数据已经写入到了Elasticsearch中,并且拿到的数据更加明确了:
在这里插入图片描述
当然了,其他的Module的用法参加官方文档:
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-modules.html
在这里插入图片描述

Metricbeat

在这里插入图片描述

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

Metricbeat组成

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

  • Module
    • 收集的对象,如:mysql、redis、nginx、操作系统等;
  • Metricset
    • 收集指标的集合,如:cpu、memory、network等;
      以Redis Module为例:
      在这里插入图片描述

部署与收集系统指标

tar -xvf metricbeat-6.5.4-linux-x86_64.tar.gz
cd metricbeat-6.5.4-linux-x86_64
vim metricbeat.yml
metricbeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
index.codec: best_compression
setup.kibana:
output.elasticsearch:
hosts: ["192.168.40.133:9200","192.168.40.134:9200","192.168.40.135:9200"]
processors:
 - add_host_metadata: ~
 - add_cloud_metadata: ~
#启动
./metricbeat -e

在ELasticsearch中可以看到,系统的一些指标数据已经写入进去了:
在这里插入图片描述
system module配置:

root@itcast01:modules.d# cat system.yml
# Module: system
# Docs: https://www.elastic.co/guide/en/beats/metricbeat/6.5/metricbeat-module-
system.html
- module: system
period: 10s
metricsets:
 - cpu
 - load
 - memory
 - network
 - process
 - process_summary
  #- core
  #- diskio
  #- socket
process.include_top_n:
 by_cpu: 5    # include top 5 processes by CPU
 by_memory: 5  # include top 5 processes by memory
- module: system
period: 1m
metricsets:
 - filesystem
 - fsstat
processors:
- drop_event.when.regexp:
  system.filesystem.mount_point: '^/(sys|cgroup|proc|dev|etc|host|lib)($|/)'
  - module: system
period: 15m
metricsets:
 - uptime
#- module: system
# period: 5m
# metricsets:
#  - raid
# raid.mount_point: '/'

Module

./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
zookeeper

Nginx Module

开启nginx的状态查询

在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;
}

测试:
在这里插入图片描述
结果说明:

  • 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-module-
nginx.html
- module: nginx
 #metricsets:
 # - stubstatus
period: 10s
 # Nginx hosts
hosts: ["http://192.168.40.133"]
 # Path to server status. Default server-status
server_status_path: "nginx-status"
 #username: "user"
 #password: "secret"
#启动
./metricbeat -e

测试:
在这里插入图片描述
可以看到,nginx的指标数据已经写入到了Elasticsearch。
更多的Module使用参见官方文档:
https://www.elastic.co/guide/en/beats/metricbeat/current/metricbeat-modules.html

Logo

更多推荐