目录
约定
查看用户列表:
# cat /etc/passwd
查看用户组列表:
# cat /etc/group
# 创建 filebeat用户和组
groupadd filebeat
useradd filebeat -m -s /sbin/nologin -d /home/filebeat -g filebeat
# useradd 参数
-s /sbin/nologin 设置不能登陆
-d 设置用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组
-m 创建用户目录
下载安装
URL:Download Filebeat • Lightweight Log Analysis | Elastic
选择elasticsearch相同的版本
#切换目录
cd /home/filebeat
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.12.1-x86_64.rpm
yum -y localinstall filebeat-7.12.1-x86_64.rpm
rpm -qc filebeat
whereis filebeat
find / -name filebeat.yml
filebeat的配置文件默认为/etc/filebeat/filebeat.yml
服务操作
# 设置服务开机启动
systemctl enable filebeat.service
# 启动服务
systemctl start filebeat.service
#查询服务状态
systemctl status filebeat.service
#重启服务
systemctl restart filebeat.service
查看服务日志
journalctl -u filebeat.service
查看服务端口
netstat -nltp
日志配置
默认日志输出到了/var/log/messages里面,修改为/var/log/filebeat
vi /etc/filebeat/filebeat.yml
logging.level: info
logging.to_files: true
logging.files:
path: /var/log/filebeat
name: filebeat
keepfiles: 7
permissions: 0644
读取配置
vi /etc/filebeat/filebeat.yml
# 修改为
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/messages
# 变量,给elasticsearch使用
fields:
servername: 192.168.112.89
servicename: xxx-service
# 多行合并,用于错误日志堆栈,匹配日期开始的行,将后面的合并到这一行
multiline.type: pattern
multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'
multiline.negate: false
multiline.match: after
输出配置
vi /etc/filebeat/filebeat.yml
# 修改为logstash的端口,默认5044
output.logstash:
hosts: ["localhost:5044"]
重启filebeat服务
systemctl restart filebeat.service
项目配置
更新logback-spring.xml
<property name="FILE_LOG_PATTERN" value="[${PID:- }] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [TRACE_ID:%X{traceId}] [ORDER_NO:%X{orderNo}] %logger{64}#%method:%L => %msg%n"/>
<!--
[${PID:- }]:进程号
%d{yyyy-MM-dd HH:mm:ss.SSS}: 记录时间
[%thread]:线程名称
%-5level:日志等级
[TRACE_ID:%X{traceId}]:MdcKey.TRACE_ID 追踪号
[ORDER_NO:%X{orderNo}]:MdcKey.ORDER_NO 业务订单号(可选)
[自定义属性:%X{自定义属性}]:MdcKey,可以自定义其它业务属性,比如任务号、托盘号等
%logger{64}#%method:%L: 记录类、方法、行数
=> %msg%n:日志内容
-->
<!-- 日志文件的格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>utf-8</charset>
</encoder>
配置logstash
vi /etc/logstash/conf.d/log-system.conf
input{
#配置输入源是filebeat
beats {
port => 5044
client_inactivity_timeout => 3000
}
tcp {
mode => "server"
host => "127.0.0.1"
port => 4560
codec => json_lines
}
}
# Adding the filters
filter {
grok {
match => ["message", "(?m)^\[%{INT:pid}\]%{SPACE}%{TIMESTAMP_ISO8601:createTime}%{SPACE}\[%{DATA:threadName}\]%{SPACE}%{LOGLEVEL:LEVEL}%{SPACE}\[TRACE_ID:(?<traceId>\w*)\]%{SPACE}\[ORDER_NO:(?<orderNo>\w*)\]%{SPACE}%{JAVACLASS:javaClass}#(?<methodName>[\w*]+):%{INT:linenumber}%{SPACE}=>%{SPACE}%{GREEDYDATA:msg}"]
}
mutate {
replace => { "[host]" => "%{[host][name]}" }
remove_field => ["agent","@version", "tags", "ecs", "input", "[log][offset]"]
}
}
output{
elasticsearch{
hosts => ["localhost:9200"]
#引用filebeat中的变量创建索引
index => "%{[fields][servername]}-%{[fields][servicename]}-%{+yyyy.MM.dd}"
}
}
重启logstash服务
systemctl restart logstash.service