文章目录
1:beats简介
以下同es6.8版本对应的版本进行测试使用
1.1:什么是beats
beats是安装在服务器上以将数据发送到Logstash 或者Elasticsearch的开源数据采集工具
根据不同的功能有不同的子功能使用,用不同的字功能需要安装不同的软件包和配置
从上面我们可以看出来,Beats 的数据可以有如下的三种方式导入到 Elasticsearch 中:
Beats ==> Elasticsearch
Beats ==> Logstash ==> Elasticsearch
Beats ==> Kafka ==> Logstash ==> Elasticsearch
2:使用beats
根据不同的组件安装不同的beats,需要将采集数据的所有服务器上都安装beats。以下根据不同的beats进行使用安装说明
如果想结合kibana进行可视化展示,可参考:kibana可视化展示
beats包含的常用组件如下:
packetbeat(用于服务器间监控网络流量,程序性能等)
filebeat(用于监听日志数据,比如文件。可以替代logstash-input-file)
topbeat(用于搜集进程的信息、负载、内存、磁盘等数据)
winlogbeat(用于搜集windows事件日志)
2.1:Filebeat 文件采集器
1:Filebeat 入门
Filebeat 具有如下的一些特性:
正确处理日志:针对每隔一个时间段生产一个新的日志的案例,Filebeat 可以帮我们正确地处理新生产的日志,并重新启动对新生成日志的处理
背压敏感:如果日志生成的速度过快,从而导致 Filebeat 生产的速度超过 Elasticsearch 处理的速度,那么 Filebeat 可以自动调节处理的速度,以达到 Elasticsearch 可以处理的范围内
“至少一次”保证:每个日志生成的事件至少被处理一次
结构化日志:可以处理结构化的日志数据数据
多行事件:如果一个日志有多行信息,也可以被正确处理,比如错误信息往往是多行数据
条件过滤:可以有条件地过滤一些事件
1.1:安装filebeat
根据不同的系统安装方式包括多种
linux:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.8.13-linux-x86_64.tar.gz
网站手动下载上传:https://elasticsearch.cn/download/
tar xzvf filebeat-6.8.13-linux-x86_64.tar.gz
解压后目录介绍:
filebeat.reference.yml 是配置文件的示例,包含全部的参数使用
filebeat.yml 是我们真正修改生效的配置文件
module filebeat支持的日志格式
modules.d 我们指定module时运行的
data/registry 该文件存处理文件元数据,可以删除
1.2:配置 filebeat.yml
配置在filebeat.yml配置文件中。可以配置监控的文件目录,输出的es或者logstash服务中
配置文件分为输入,输出模块,同时想使用该组件需要配置logstash进行配置修改
vim filebeat.yml
1:输入配置模块:Filebeat inputs
若需要监控多个路径,path多个路径即可,或者写多个输入模块即可,见demo
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
详解input模块
filebeat.inputs:
- type: log #type:输入日志格式类型,具体选项如下
#log:从日志文件提取数据,最常用的
#stdin:从控制台读取数据,一般是我们测试时用
以及redis等类型
enabled: true #表示启用该模块
tags: #给输入数据打标签,后续可以进行判断使用,处理数据更方便 tags:appname
paths: #采集文件的路径,支持模糊匹配,也可以写多个路径
- /var/log/*.log
tail_files: #读取文件的方式,默认是从最新的读取,true/false,false是从头
recursive_glob.enabled #路径使用模糊匹配时,是否使用递归查询
fields: #通过fields属性我们可以添加字段到输出的日志文件中
apache: true #key:value的形式
encoding: #指定文件的编码格式。utf-8等
#可以通过exclude_lines和include_lines属性对数据进行过滤,支持正则表达
exclude_lines: ['^DBG'] #去除以DBG开头数据
include_lines:[ 'sometext' ] #只要以some开头数据
max_bytes: #传输一条日志消息可以具有的最大字节数,默认最大10m,超过的被抛弃
close_inactive: #控制读取文件文件句柄的占用时间。如1m,即1分钟
multiline: #如何处理多行数据,比如error或者异常时就是多行数据,具体使用看4.1章节
multiline.pattern: '^\[' #判断什么样的数据是异常数据,比如[开头的,支持正则表达
multiline.negate: true #定义了数据合并的模式。true或者false
multiline.match: after #判断从multiline.pattern开始那些是异常数据,进行合并,和negate属性配合使用
2:输出配置模块
输出可以选择Elasticsearch或者 Logstas等,一般不建议直接到es。留一个即可,其他注释
2.1:Elasticsearch
当您为输出指定Elasticsearch时,默认Filebeat使用Elasticsearch HTTP API将事务直接发送到Elasticsearch。
创建索引时根据模板会创建索引,存储es时会有默认的索引,我们也可以指定我们自己的template
output.elasticsearch:
hosts: ["myEShost1:9200","myEShost2:9200"] 数组类型,写多台服务器
username: "filebeat_internal" username和password是有安全认证登录时配置
password: "YOUR_PASSWORD"
compression_level: gzip压缩级别。将此值设1-9,默认0禁用
indices: 指定索引名字的格式,也可以在template指定
- index: "warning-%{[beat.version]}-%{+yyyy.MM.dd}"
when.contains:
message: "WARN"
- index: "error-%{[beat.version]}-%{+yyyy.MM.dd}"
when.contains:
message: "ERR"
指定Template
setup.template.name: "filebeat" es中模板的名称
setup.template.pattern: "filebeat-*" 模板的模式,通配符-*用于匹配所有每日索引
如果es或者kibana添加了登录验证,需要进行配置用户和密码
output.elasticsearch:
hosts: ["myEShost:9200"]
username: "filebeat_internal"
password: "YOUR_PASSWORD"
setup.kibana:
host: "mykibanahost:5601"
username: "my_kibana_user"
password: "YOUR_PASSWORD"
2.2:logstash
如果输出为logstash则template模板加载需要手动执行,配置文件中的不会去加载。需要在配置文件配置后手动执行
output.logstash:
hosts: ["logstaship:5044"]
手动加载模板:
./filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'
2.3:kafka
output.kafka:
# initial brokers for reading cluster metadata
hosts: ["kafka1:9092", "kafka2:9092", "kafka3:9092"]
# message topic selection + partitioning
topic: '%{[fields.log_topic]}'
partition.round_robin: Kafka输出代理程序事件分区策略。random, round_robin或hash。默认使用hash分区。
reachable_only: false
required_acks: 1
compression: gzip
max_message_bytes: 1000000
3:日志格式module配置
Filebeat modules 简化了公共日志格式的收集、解析和可视化,用于替代input输入。简化了我们使用filebeat,以及后续数据解析和可视化等的配置过程,对于这些服务,我们可以直接使用对应的module。
查看filebeat支持的module: ./filebeat modules list
模型提供了多种配置启动方式,启动时会去modules.d目录下去加载,也可以指定某个moudle对应的日志路径
1:启用module
方式1:在modules.d目录中启用模块配置,后面跟module,在module目录下有
./filebeat modules enable apache2 mysql
方式2:在 filebeat.yml配置文件指定
filebeat.modules:
- module: nginx #module 启用的模块名
access:
var.paths: ["/var/log/nginx/access.log*"] #采集模块的日志路径
- module: mysql
方式3:直接修改modules.d目录下对应的模块后缀,去除.disabled后缀即可
2:让module生效
./filebeat setup
setup的具体使用后续讲解
4:kibana可视化
Filebeat随附了示例Kibana仪表板,可视化文件,并提供了搜索以可视化Kibana中的Filebeat数据。
要加载仪表板,可以在filebeat.yml配置文件的setup.dashboards部分中启用仪表板加载 ,也可以运行setup命令。默认情况下,仪表板加载是禁用的。
4.1:输出es
此时直接开启配置即可
1:开启配置
1:配置文件修改 setup.dashboards.enabled: true #开启kibana的仪表盘,可视化功能
2:使用setup初始化配置 ./filebeat setup --dashboards
4.2:filebeat输出是logstash
1:开启配置
方式1:配置文件修改 setup.dashboards.enabled: true #开启kibana的仪表盘,可视化功能
方式2:启动时指定: ./filebeat setup --dashboards
2:初始化仪表盘配置
在仪表板加载期间,Filebeat连接到Elasticsearch以检查版本信息,要在启用Logstash输出时加载仪表板,你需要临时禁用Logstash输出并启用Elasticsearch,要连接到安全的Elasticsearch集群,还需要传递Elasticsearch凭据。
./filebeat setup -e \
-E output.logstash.enabled=false \
-E output.elasticsearch.hosts=['localhost:9200'] \
-E setup.kibana.host=localhost:5601
执行结果
执行后kibana即可看到会出现多个可视化选项
选项对应的filebeat可视化插件进行查看
如果是安全认证需要输入用户,密码
./filebeat setup -e \
-E output.logstash.enabled=false \
-E output.elasticsearch.hosts=['localhost:9200'] \
-E output.elasticsearch.username=filebeat_internal \
-E output.elasticsearch.password=YOUR_PASSWORD \
-E setup.kibana.host=localhost:5601
4.3:kibana仪表盘完善
要用数据填充示例仪表板,需要 定义接收节点管道或使用Logstash将数据解析到仪表板期望的字段中。
4.4:使用pipelines解析数据
对于filebeat读取数据是module中的直接输出到es,可以在此直接使用对应的管道解析
加载解析通道组件: filebeat setup --pipelines --modules nginx,system #module 名字
启动filebeat
4.5:logstash可视化配置示例
如果使用的是Logstash,需要配置Logstash,来解析仪表板支持的日志格式进行展示。
若filebeat使用的读取数据是module的,则配置logstash解析即可使用
使用filebeat moudule读取输出logstash解析管道数据进行可视化示例
5:设置日志输出
我们可以控制filebeat运行的日志级别。
logging.level: info 最低日志级别。一debug,info,warning,或error。默认日志级别为info。
logging.to_files: true
logging.files:
path: /var/log/filebeat 日志输出的路径
name: filebeat 文件名
6:template模板配置
加载索引模板需要连接到Elasticsearch,如果输出不是Elasticsearch,则必须手动加载模板。
setup.template.enabled: true 设置模板true自动加载,设置false需要手动加载自己模板
setup.template.name: "filebeat-%{[beat.version]}" 设置模板的名字,模板必须已经在es中建立
setup.template.fields: "${path.config}/fields.yml" 设置fields.yml路径
setup.template.overwrite: false 是否覆盖现有模板
setup.dashboards.index: "customname-*" 如果使用的是预先构建的Kibana仪表板,可是设置索引模式
6.1:手动加载模板
如果输出不是es,则模板必须手动加载
./filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'
1.3:检查filebeat.yml配置文件
我们可以用测试命令,测试我们的配置是否正确。
./filebeat -c filebeat.yml test config
正确会输出:Config OK
1.4:启动关闭filebeat
启动默认会加载filebeat配置文件
验证:filebeat -version
启动 ./filebeat -e -c filebeat.yml
后台启动 nohup ./filebeat -e
关闭 如果是命令窗口直接ctrl +c 如果是后台ps -ef |grep filebeat 再kill -9 pid
1.5:设置kibana
已经完成filebeat中的kibana配置
1:kibana可视化
kibana必须先创建我们的索引模式来使用,仪表盘,可视化等功能,索引模式就是决定我们后续的操作对那些索引进行仪表盘和可视化
步骤1:kibana-----management–kibana–index patterns界面:点击create indexpatterns
步骤2:discover发现界面:即可以看到我们创建的索引模型,点击就可以看到数据的存储
步骤3:visualize视图界面:可以指定各种图表进行展示我们的索引模型统计
步骤4:dashboard仪表盘界面
2:modules详解
Filebeat模块简化了常见日志格式的收集,Ingest Node pipeline解析数据和可视化,用于快速使用filebea和elk
使用流程:启用模块--------------初始化模块------------启动filebeat
查看可用模块: ./filebeat modules list
1:启用模块均有多种方式
方式1:在modules.d目录中启用模块配置,后面跟module,在module目录下有
./filebeat modules enable apache2 mysql
方式2:在 filebeat.yml配置文件指定
filebeat.modules:
- module: nginx
access:
var.paths: ["/var/log/nginx/access.log*"]
- module: mysql
通过path路径去指定我们监控的模块对应的日志,会覆盖input输入模块的输入路径
2:初始化模块
通过./filebeat setup -e 命令
3:启动filebeat
./filebeat -e
也可以nohup后台运行
2.1:apache2模块
该apache2模块解析由Apache HTTP服务器创建的访问和错误日志 。
对于Elasticsearch <6.7,此模块需要 ingest-user-agent和 ingest-geoip Elasticsearch插件
启用模块:./filebeat modules enable apache2
3:在docker中运行filebeat
我们可以运用docker中封装好的镜像,不需要自己去配置安装filebeat,具体docker使用查看docker概述
3.1:拉取镜像文件
docker pull docker.elastic.co/beats/filebeat:6.8.13
3.2:运行镜像文件
docker run \
docker.elastic.co/beats/filebeat:6.8.13 \
setup -E setup.kibana.host=kibana:5601 \
-E output.elasticsearch.hosts=["elasticsearch:9200"]
4:使用demo
4.1:多行合并
1:Exception +Caused by
Exception in thread "main" java.lang.IllegalStateException: A book has a null property
at com.example.myproject.Author.getBookIds(Author.java:38)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
Caused by: java.lang.NullPointerException
at com.example.myproject.Book.getId(Book.java:22)
at com.example.myproject.Author.getBookIds(Author.java:35)
... 1 more
对于这种异常可以使用以下配置
multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'
multiline.negate: false
multiline.match: after
2:Java堆栈跟踪
可以使用
multiline.pattern: '^[[:space:]]'
multiline.negate: false
multiline.match: after