一、安装配置
1.windows 下安装 filebeat
windows下elk安装配置 filebeat
以8.6.2为例,下载地址
elasticsearch:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.6.2-windows-x86_64.zip
kibana:https://artifacts.elastic.co/downloads/kibana/kibana-8.6.2-windows-x86_64.zip
filebeat:https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.6.2-windows-x86_64.zip
分别解压至
D:\Deploy\Elastic\search\8.6.2
D:\Deploy\Elastic\kibana\8.6.2
D:\Deploy\Elastic\filebeat\8.6.2\
2.启动
直接启动filebeat
cd /d D:\Deploy\Elastic\filebeat\8.6.2 && filebeat -c filebeat.yml -e
或者在filebeat安装目录下,启动命令行
filebeat -e -c filebeat.yml
3.配置收集日志到logstash
需要经过以下步骤
- 安装Filebeat。
- 配置Filebeat以发送日志到Logstash。
- 安装Logstash,配置Logstash以接收Filebeat的日志。
- 启动Filebeat和Logstash服务。
以下是Filebeat配置文件的示例(filebeat.yml),该配置文件将指示Filebeat将日志发送到Logstash:
filebeat.inputs:
- type: log
# Unique ID among all inputs, an ID is required.
id: my-avicit-id
enable: true
paths: # 采集日志的路径
- E:\AVICIT\xxxx\code\xxx-xxxx\logs\*.log
# 日志多行合并采集,根据日志格式设置,可忽略
multiline.pattern: '^\['
multiline.negate: true
multiline.match: after
# 为每个项目标识,或者分组,可区分不同格式的日志
tags: ["java-logs"]
output:
# 输出到logstash中,logstash更换为自己的ip
logstash:
hosts: ["localhost:5044"]
配置说明:
①:配置 filebeat.inputs->path 这里的路径是所要收集日志的路径 。
②:配置 enabled: true 这个配置很重要,只有配置为true之后配置才可生效,否则不起作用。
③:配置Outputs ,这里的Outputs有elasticsearch,logstash。按照配置文件下面的示例配置即可。只能配置一个输出。默认是ElasticSearch
4. type:# 指定输⼊的类型为"stdin",表示标准输⼊,log标识读取的是日志文件

logstash 输出收到的项目日志至项目logstash 的控制台界面配置;
logstash.conf
input {
beats {
port => 5044
host => "172.17.4.55"
}
}
output {
stdout {
codec => rubydebug
}
}
启动docker logstash 的容器镜像
docker run -p 5044:5044 -it -v /var/lib/docker/volumes/logstash/config:/usr/share/logstash/config --name logstash logstash:7.5.1
docker logs -f logstash 查看logstash的镜像日志可以看到收集到项目启动的日志

配置logstash收集日志到ES
[root@db02 ~]# vim /etc/logstash/conf.d/filebeat_logstash_es.conf
input {
beats {
port => 3456
codec => "json"
}
}
output {
elasticsearch {
hosts => ["10.0.0.51:9200"]
index => "nginx_filebeat_logstash_es"
}
}
FileBeat配置收集日志到ES
linux下的安装配置
# 1.安装
cd /usr/local
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.16.3-linux-x86_64.tar.gz
tar -zxf filebeat-7.16.3-linux-x86_64.tar.gz
rm -f filebeat-7.16.3-linux-x86_64.tar.gz
mv filebeat-7.16.3-linux-x86_64 filebeat
cd filebeat
mkdir -p conf/inputs.d
// 不要默认配置了,把默认配置进行重命名留存
mv filebeat.yml filebeat.example.yml
# 2.采集配置 ==============================
# 配置内容详见下面的"配置"
# 2.1)主配置
vim conf/filebeat.yml
# 2.2)子配置配置
vim conf/inputs.d/nginx.yml
vim conf/inputs.d/runtime.yml
# 3.启动 filebeat
nohup ./filebeat -e -c conf/filebeat.yml & # root 后台守护进程启动
调试说明
# 调试说明 ========================================
# 1)修改主配置 output为如下内容:
output.console:
pretty: true
# 2)执行下面命令,如果屏幕有数据输出说明程序启动正常
./filebeat -e -c conf/filebeat.yml
配置
1. 主配置 filebeat/conf/filebeat.yml
# ============================== Filebeat inputs ===============================
filebeat.config.inputs:
enabled: true
path: ${path.config}/conf/inputs.d/*.yml
reload.enabled: true
reload.period: 10s
# ============================== Filebeat logging ===============================
logging.level: info
logging.to_files: true
logging.files:
rotateonstartup: false
path: /usr/local/filebeat/logs/filebeat.log
name: filebeat
# rotateeverybytes: 104857600
interval: 24h
keepfiles: 2
permissions: 0644
# ============================== Filebeat modules ==============================
#filebeat.config.modules:
# path: ${path.config}/modules.d/*.yml
# reload.enabled: false
# reload.period: 10s
# ================================== Outputs ===================================
output.kafka:
hosts: ["xx.xx.xx.xx:9092", "xx.xx.xx.xx:9092", "xx.xx.xx.xx:9092"]
topic: 'pc_app-%{[app_id]}-%{[app_type]}-%{[app_env]}-%{[log_type]}-%{[data_type]}'
required_acks: 1
注Note:
topic 如果没有 需要先申请
2. 子配置
Note: 只需修改 paths 和 fields 字段
- Nginx配置
filebeat/conf/inputs.d/nginx.yml
- type: log
paths:
#- /usr/local/nginx/logs/access-json.log
encoding: utf8
scan_frequency: 5s
fields:
app_id: nginx
app_type: prod_official
app_env: prod
log_type: access
data_type: json
fields_under_root: true
- type: log
paths:
#- /usr/local/nginx/logs/error.log
encoding: utf8
scan_frequency: 5s
fields:
app_id: nginx
app_type: prod_official
app_env : prod
log_type: error
data_type: raw
fields_under_root: true
- 业务代码日志
filebeat/conf/inputs.d/runtime.yml
- type: log
paths:
# - /var/www/20230103/api/runtime/logs/runtime*.log
# - /var/www/20230103/app/runtime/logs/runtime*.log
# - /var/www/20230103/crm/runtime/logs/runtime*.log
# - /var/www/20230103/console/runtime/logs/runtime*.log
# - /var/www/20230103/pc/runtime/logs/runtime*.log
encoding: utf8
scan_frequency: 5s
fields:
app_id: runtime
app_type: official
app_env: yf
log_type: all
data_type: raw
fields_under_root: true
- type: log
paths:
# - /var/www/prod/api/runtime/logs/runtime*.log
# - /var/www/prod/app/runtime/logs/runtime*.log
# - /var/www/prod/crm/runtime/logs/runtime*.log
# - /var/www/prod/console/runtime/logs/runtime*.log
# - /var/www/prod/pc/runtime/logs/runtime*.log
encoding: utf8
scan_frequency: 5s
fields:
app_id: runtime
app_type: official
app_env: prod
log_type: all
data_type: raw
fields_under_root: true
- Request请求日志
filebeat/conf/inputs.d/downstream.yml
- type: log
paths:
- /var/www/prod/api/runtime/logs/downstream*.log
- /var/www/prod/app/runtime/logs/downstream*.log
- /var/www/prod/crm/runtime/logs/downstream*.log
- /var/www/prod/console/runtime/logs/downstream*.log
- /var/www/prod/pc/runtime/logs/downstream*.log
encoding: utf8
scan_frequency: 5s
fields:
app_id: downstream
app_type: official
app_env: prod
log_type: all
data_type: json
fields_under_root: true
日志格式示例
Nginx格式设置
# 日志格式
log_format json '{"@timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"url":"$request",'
'"referer":"$http_referer",'
'"agent":"$http_user_agent",'
'"http_x_forwarded_for":"$http_x_forwarded_for",'
'"request_body":"-",'
'"http_cookie":"-",'
'"http_user_agent":"$http_user_agent",'
'"status":"$status"}';
# 示例
{"@timestamp":"2022-03-30T15:48:50+08:00","host":"192.168.2.22","clientip":"100.125.68.198","size":1552,"responsetime":0.005,"upstreamtime":"0.005","upstreamhost":"127.0.0.1:9000","http_host":"passport.xiaofenglang.com","url":"POST /passport/prod/selectUser HTTP/1.1","referer":"-","agent":"-","http_x_forwarded_for":"10.15.1.84","request_body":"-","http_cookie":"-","http_user_agent":"-","status":"200"}
总结:
首先配置修改设定 filebeat 配置,看手机哪些日志,filebeat 会把收集到日志推送到 kafka内,最后入ElasticSearch内进行存储。
二、fileBeat 配置文件详解
filebeat.inputs:
#采集数据类型,指定文件的输入类型log或者stdin
- type: log
enable: true
# 日志采集的路径
paths:
- D:\input\a\*.log
#制定正则表达式,用来制定要匹配的行,在输入中匹配符合正则表达式列表的那些行,可以有几个
include_lines: ['^ERR', '^WARN']
#exclude_lines:指定正则表达式,用来指定不要匹配的行,在输入中排出符合正则表达式列表的那些行,可以有几个
exclude_lines: ['^DBG']
#exclude_files:忽略掉符合正则表达式列表的文件,默认为每一个符合path定义的文件都创建一个harvester
exclude_files: [".gz$"]
#encoding:指定被监控的文件的编码类型,使用plain和utf-8都是可以处理中文日志的
encoding: plain
#向输出的每一条日志添加额外的信息,比如“level:debug”方便后续对日志进行分组统计。
fields:
level: debug
#multiline:实用于日志中的每一条日志占据多行的情况,比如各种语言的报错信息调用栈
#file对于多行日志的处理,日志多行合并采集
#不以时间格式开头的行都合并到上一行的末尾
multiline.pattern: '^\['
multiline.negate: true
multiline.match: after
max_lines: 500
timeout: 5s
#pattern:正则表达式
#negate:true或false;默认是false,匹配pattern的行合并到上一行;
#true,不匹配pattern的行合并到上一行
#match:after或before,合并到上一行的末尾或开始
max_lines:合并最大行,默认500
timeout: 一次合并事件的超时时间,默认5s,防止合并消耗太多时间设置卡死
# 给filebeat采集到的数据加上标签
tags: ["java-logs"]
#显示filebeat自身的日志,可以设置日志的level,路径,名字
logging.level: info
logging.to_files: true
logging.to_syslog: false
logging.files:
path: D:\input\filebeat_log
name: filebeat.log
#不常用配置,了解下:
#close_older如果一个文件在某个时间段内没有发生过更新则关闭监控的文件handle。默认1h,change只会在下一次scan才会被发现。
close_older: 1h
scan_frequency: filebeat以多快的频率去prospector指定的目录下面检测文件更新(比如是否有新增文件),如果设置为0s,则filebeat会尽可能地感知更新(占用的CPU会变高)。默认是10s。
max_bytes:日志文件中增加一行算一个日志事件,max_bytes限制在一次日志事件中最多上传的字节数,多出的字节会被丢弃。
tail_files:如果设置为true,filebeat从文件尾开始监控文件新增内容,把新增的每一行文件作为一个事件一次发送,而不是从文件开始处重新发送所有内容。
backoff: filebeat检测到某个文件到了EOF之后,每次等待多久再去检测文件是否有更新,默认为1s
max_backoff:filebeat检测到某个文件到了EOF之后,等待检测文件更新的最大时间,默认是10s
registry_file:记录filebeat处理日志文件的位置的文件,如果容器重启,可以从记录的位置开始取日志
#filebeat可以指定输出源
output:
# 输出到logstash中,logstash更换为自己的ip,5044为logstash监控的端口,需要与logstash的配置文件对应
logstash:
hosts: ["localhost:5044"]
index: "logstash-%{+yyyy.MM.dd}"
#输出到file
output.file:
path: "/tmp/filebeat"
filename: filebeat
#输出到控制台
output.console:
pretty: true
三、Filebeat工作原理
Filebeat是使用GO语言开发,由两个主要组件组成:prospector 和harvester。这些组件一起工作来读取文件(tail file)并将事件数据发送到您指定的输出。
工作原理如下:。
- 采集器 harvester :的主要职责是读取单个文件的内容。读取每个文件,并将内容发送到 the output。
- 查找器 prospector :的主要职责是管理 harvester 并找到所有要读取的文件来源。如果输入类型为日志,则查找器将查找路径匹配的所有文件,并为每个文件启动一个 harvester。当Filebeat启动时,它会启动一个或者多个prospector监控日志路径或日志文件,每个日志文件会有一个对应的harvester,harvester按行读取日志内容并转发至后台程序。Filebeat维护一个记录文件读取信息的注册文件,记录每个harvester最后读取位置的偏移量。


其他两个beat 框架的介绍
beats是一个代理,将不同类型的数据发送到elasticsearch。beats可以直接将数据发送到elasticsearch,也可以通过logstash将数据发送elasticsearch。
beats有三个典型的例子:Filebeat、Topbeat、Packetbeat。Filebeat用来收集日志,Topbeat用来收集系统基础设置数据如cpu、内存、每个进程的统计信息,Packetbeat是一个网络包分析工具,统计收集网络信息。这三个是官方提供的。后续会慢慢介绍这三个beat。
ELK的目标是建立一个平台,可以很容易的创建新的beats。为了这个目录,开发了libbeat,该Go库包含了所有beats公共部分来处理任务,如批量插入到elasticsearch,安全的发送事件到logstash,logstash和elasticsearch多节点的负载均衡,异步或同步的发送事件模式。该libbeat平台还提供了检测机制,当下游服务器负载高或者网络拥堵,自动的降低发送速率。

Topbeat
收集系统负载、内存、硬盘以及每个进程的情况。
Topbeat是跨平台的。周期性的发送指标到elasticsearch。可以通过kibana创建自定义仪表盘如系统负载、服务器概述、内存或cpu使用情况、top进程、每个进程占用cpu或内存比例、磁盘使用情况等等。

Packetbeat
想象一下如果你想监控和解决一个复杂的分布式系统,每个组件使用不同的编程语言,web框架和数据库技术。Packetbeat是分布式的,实时的嗅探每个事务的请求与响应,并将相关数据插入到elasticsearch中。packetbeat被动的嗅探网络流量,因此不会干扰应用程序。
Packetbeat是开源的,任何人都可以添加支持新的协议。社区添加了对mongodb的支持,基于UDP和TCP的DNS支持等等。
当然,你也可以添加新的支持。期待ing

2775

被折叠的 条评论
为什么被折叠?



