在集中式日志记录中,数据管道包括三个主要阶段:聚合,处理和存储。 在 ELK 堆栈中,传统上,前两个阶段是堆栈工作量 Logstash 的职责。执行这些任务需要付出一定的代价。 由于与 Logstash 的设计有关的内在问题,性能问题变得经常发生,尤其是在复杂的管道需要大量处理的情况下。将 Logstash 的部分职责外包的想法也应运而生,尤其是将数据提取任务转移到其他工具上。 正如我在本文中所描述的,这个想法首先在 Lumberjack 中体现出来,然后在 Logstash 转发器中体现出来。 最终,在随后的几个开发周期中,引入了新的改进协议,该协议成为现在所谓的 “Beats” 家族的骨干。
firewall-cmd --query-port=5044/tcp
firewall-cmd --zone=public --add-port=5044/tcp --permanent
firewall-cmd --reload
cd /usr/local/src/logstash-8.5.0/config
vi logstash.yml
i
133 === 修改任何主机都可以连接
api.http.host: 0.0.0.0
cd /usr/local/src/logstash-8.5.0/
vi logstash.conf
i
input内容
input {
beats {
port => 5044
}
}
Esc
:wq
cd /usr/local/src/
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.5.0-linux-x86_64.tar.gz
tar xzvf filebeat-8.5.0-linux-x86_64.tar.gz
rm -rf filebeat-8.5.0-linux-x86_64.tar.gz
cd filebeat-8.5.0-linux-x86_64/
filebeat test output
默认的配置文件是当前目录下的 filebeat.yml ,默认输出到Elasticsearch
vi filebeat.yml
:set nu
i
22 === 不修改,目前支持的类型,参考官网 input-types
25 === id也是唯一的
id: first-info
28 === 自动加载配置
enabled: true
32 === 文件位置,可以配置多个,再多粘贴几行即可
- /platform/first/first-info*.log
53 === 放开注释
54 === 放开注释,修改级别为info
level: info
55 === 添加自定义的字段到根位置,并筛选,具体缩进格式参见下面的error
fields_under_root: true
这样info配置就完成了,继续在56行后把error配置好,注意缩进格式
- type: filestream
id: first-error
enabled: true
paths:
- /platform/first/first-error*.log
fields:
level: error
fields_under_root: true
记录 : 一开始并未发现fields的fields_under_root,但是对fields有思考,假如我的字段和elasticsearch的key重复了,他会怎么办?所以就去官网看了一下 : 如果自己定义的key和已有关键字重名,已自定义的为准(官网写的是覆盖)。这才发现fields_under_root字段,可以让自定义的字段提到root级别,还可以分类。所以如果只是定义了fields,并不加fields_under_root: true,level就无法分类,info和error都分不出来,看个毛日志
149 === 注释掉,不向elasticsearch输出(想直接输入到elasticsearch直接看 2. EBK)
151 === 主机也注释掉
162 === 放开注释,向logstash输出
filebeat test config
filebeat test output
cd /usr/local/src/
chown -R esuser:esuser filebeat-8.5.0-linux-x86_64/
su esuser
cd filebeat-8.5.0-linux-x86_64/
filebeat -e -c /usr/local/src/filebeat-8.5.0-linux-x86_64/filebeat.yml
echo "2022-10-02 00:00:00 [main] INFO AAAAA2-filebeat" >> first-info.1.log
echo "2022-10-02 00:00:00 [main] INFO BBBBB2-filebeat" >> first-info.1.log
echo "2022-10-02 23:59:59 [timeoutChecker_2_1] ERROR KKKKK2" >> first-error.1.log
echo "2022-10-02 23:59:59 [timeoutChecker_2_1] ERROR OOOOO2" >> first-error.1.log
如果只是收集日志,不需要filter,Beats算是很轻量级的了
ps -ef | grep 'logstash'
ps -ef | grep 'filebeat'
cd /usr/local/src/filebeat-8.5.0-linux-x86_64
su esuser
vi filebeat.yml
:set nu
i
124 === 放开注释 (可以不修改内容,也可以写具体IP)
125 === 添加用户名
username: "elastic"
126 === 添加密码
password: "SCWfp0xcHkV2KubsE6jt"
153 === 主机也放开注释 (可以不修改内容,也可以写具体IP)
hosts: ["192.168.109.160:9200"]
154 === 添加index(后面加上的,如果不添加index,默认是filebeat-%{agent.version}) 参考
index: "platform_%{+YYYY-MM-dd}"
157 === 放开注释,用https
161 === 放开注释,用户名,同上
162 === 放开注释,密码,同上
163 == 添加权限认证,注意缩进
ssl.ca_trusted_fingerprint: "e8004705bb5ae42f107dddc201732a657be0e8c4868ff733ff961f6f58d3380d"
值可以通过该命令获取,记得把:去掉,随便写个main函数replace下
openssl x509 -fingerprint -sha256 -in /usr/local/src/elasticsearch-8.5.0/config/certs/http_ca.crt
setup.template.name: "filebeat-elastic"
166 === 添加模板pattern
setup.template.pattern: "filebeat_*"
169 === 注释掉,不再向logstash输出
171 === 主机也注释掉
Esc
:wq
filebeat test config
filebeat test output
如果 第一次启动时没有配置name和pattern 或 更换索引后只配置了新索引,没配置name和pattern 都会有此错误
Exiting: setup.template.name and setup.template.pattern have to be set if index name is modified
Error initializing beat: setup.template.name and setup.template.pattern have to be set if index name is modified
filebeat -e -c /usr/local/src/filebeat-8.5.0-linux-x86_64/filebeat.yml
当然,也可以过滤 level 字段, 想要看info还是error
echo "2022-10-03 00:00:00 [main] INFO BBBBB2-filebeat直接到elastic" >> first-info.1.log
echo "2022-10-03 23:59:59 [timeoutChecker_2_1] ERROR KKKKK2-直接到elastic" >> first-error.1.log