在如今这个微服务盛行的时代,各行各业都在打造自己的软件产品。动辄要求微服务、大数据、BI、AI,别管用不用的到,反正你得会这些,我打算做。你说就一个小的制造行业工厂,就一个开发,还兼职厂里的网络和修电脑,做什么啊?现有的能维护好就不错了。其实每个公司都有适合自己的框架,就拿前面说的日志系统ELK
来说吧,对于传统的软件来说没必要啊。来个spring boot admin来看日志就挺好的,甚至你拿notepad直接查看log文件也是可以的。
对于ELK
的使用,就像上一节讲的,简单的流程是这样的:
我们甚至可以直接在程序中引入logstash插件(我是不建议这样的,1是耦合度高,2是日志量大时,输入可能出问题),然后使用tcp输入:
简化流程
一般微服务架构下,尤其是多节点架构,日志文件较多且分散,为了方便查看,我们才使用elk呢。此时,日志流程是这样的:
微服务流程
但是官网不推荐
logstash
这样使用去收集日志,而是加入Filebeat来做收集工具。
1. Filebeat简介和使用情形
Filebeat:轻量型日志采集器。无论您是从安全设备、云、容器、主机还是 OT 进行数据收集,Filebeat 都将为您提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情不再繁杂。
官网给了介绍,可以仔细读一下。我感觉这个说的挺好,干什么的,怎么配合其他组件干(甚至考做了管道过载的优化),干完怎么看效果。
当我们加入Filebeat
后,流程就变这样了:
如果有丢失,logstash处理能力不够的话,我们可以加入kafka消息队列,做一下缓存,那就是这样了:
kafka流程
而按照官网的意思,若我们只是收集日志,不做其他处理,我们都不用加logstash管道流程,直接就成这样了:
直接流程
2. 安装Filebeat
前面已经安装过ELK了,这里我们只是加入Filebeat
,同样的docker compose安装。
2.1 docker compose
文件
docker-compose-filebeat.yml
version: '3.9'
services:
beats:
image: 'docker.elastic.co/beats/filebeat:8.14.3'
container_name: filebeat
hostname: filebeat
restart: always
# 启动用户
user: root
environment:
- TZ=Asia/Shanghai
- ES_JAVA_OPTS=-Xms512m -Xmx512m
privileged: true
volumes:
- /etc/timezone:/etc/timezone
- /etc/localtime:/etc/localtime:ro
# 映射日志文件,要读取的
- '/logs/test:/logs/test'
# 映射filebeat配置文件
- '/opt/soft/filebeat/config/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml'
# 映射elasticsearch证书目录,连接时候用
- '/opt/soft/elasticsearch/config/certs:/usr/share/filebeat/config/certs'
networks:
elastic:
ipv4_address: 172.18.0.17
networks:
elastic:
external: true
driver: bridge
2.2 filebeat.yml
配置文件
这个filebeat.yml
的配置文件其实和前面的metricbeat.yml
配置文件差不多的。所有beats都应该差不多:docker安装需要的配置、数据输入、数据输出、连kibana初始化看板的、processors增强的(一般也用不到)、开启自身监控数据的。
查看官网教程,里面很全。
filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
filebeat.autodiscover:
providers:
- type: docker
hints.enabled: true
# 输入日志文件,docker-compose文件中要把这个映射进容器
filebeat.inputs:
- type: log
paths:
- /logs/test/test.log
#name: "test-01-filebeat"
#tags: ["test-01-server-log"]
# 额外添加字段传递信息
fields: {project: "test", server-id: "test-01"}
processors:
- add_host_metadata: ~
# 连接kibana
setup.kibana.host: "http://172.18.0.14:5601"
#账号密码,如果不设置,会直接取output中elasticsearch的账号密码
setup.kibana.username: "elastic"
setup.kibana.password: "123456"
# kibana启用ssl时
#setup.kibana.ssl.enabled: true
#setup.kibana.ssl.certificate_authorities: ["/etc/client/ca.pem"]
#setup.kibana.ssl.certificate: "/etc/client/cert.pem"
#setup.kibana.ssl.key: "/etc/client/cert.key
# 启动kibana自带的展现filebeat数据的功能,这个开启了,那filebeat启动时,kibana必须运行,不然启动不了
setup.dashboards.enabled: true
# 禁用 官方模板 的自动加载(加载时名字也是默认的),因为模板的名字需要自定义,为什么要自定义模板名字,因为自定义索引名字时要求的
setup.template.enabled: false
# 自定义模板名称 这个和自定义索引名配合使用的
setup.template.name: "%{[fields.server-id]}-filebeat"
setup.template.pattern: "%{[fields.server-id]}-filebeat-*"
# 覆盖现有模板
setup.template.overwrite: true
# 索引生命周期管理ilm功能默认开启,开启的情况下索引名称只能为filebeat-*, 通过setup.ilm.enabled: false进行关闭
setup.ilm.enabled: false
# 输出到elasticsearch
output.elasticsearch:
hosts: ["https://172.18.0.11:9200"]
# 自定义索引名称,配合上面setup一块使用
index: "%{[fields.server-id]}-filebeat-%{+yyyy.MM.dd}"
username: "elastic"
password: "123456"
ssl:
certificate_authorities: "config/certs/ca/ca.crt"
# 输出到logstash
#output.logstash:
# hosts: ["172.18.0.16:5044"]
# 开启自身监控,发送数据到elasticsearch,因为配置了输出到elasticsearch,所以这里就配这几个
monitoring:
enabled: true
elasticsearch:
username: "elastic"
password: "123456"
2.3 启动filebeat
,输出到elasticsearch
docker compose -f docker-compose-filebeat.yml up -d
我们在kibana看一下情况
被监控到
情况
可以看到,被监控到了。我们看一下索引:
索引
索引也有了,我们创建一个数据视图就可以在discovery中查看了:
image.png
可以看到我们在配置文件中加入的2个字段也有了,在fields底下。
2.4 启动filebeat
,输出到logstash
这个就需要注意几点了:
- logstash的pipeline配置中,input输入要改成beats,端口一般 5044
- logstash的pipeline配置中,output输出,elasticsearch索引可以根据filebeat输出的标志来配置
- logstash的pipeline配置中,filter过滤中都先别用,搞懂以后自己按需求加,不然可能filebeat传给logstash报错
- logstash的docker compose 文件不用映射日志文件目录了,不用读取了
- filebeat 配置中,输出改成 logstash
- filebeat 配置中,因为不需要自定义 elasticsearch索引了,一些配置可以精简
- filebeat 配置中,不需要kibana了
logstash配置前面已经做了,里面包含了这些,filebeat
配置上面也有了,稍精简一下:
filebeat.yml
配置文件 -- 输出到logstash:
filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
filebeat.autodiscover:
providers:
- type: docker
hints.enabled: true
# 输入日志文件,docker-compose文件中要把这个映射进容器
filebeat.inputs:
- type: log
paths:
- /logs/test/test.log
#name: "test-01-filebeat"
# 官方文档建议把日志来源标志放到这里,其实用下面的fields添加字段也行
tags: ["test-01-server"]
# 额外添加字段传递信息
fields: {project: "test", server-id: "test-01"}
processors:
- add_host_metadata: ~
# 输出到logstash
output.logstash:
hosts: ["172.18.0.16:5044"]
# 开启自身监控,发送数据到elasticsearch,
# 建议监控用metricbeat来做,这个就不用了,setup.template(ilm/dashboard)配置就都不用了
monitoring:
enabled: true
elasticsearch:
hosts: ["https://172.18.0.11:9200"]
username: "elastic"
password: "123456"
ssl:
certificate_authorities: "config/certs/ca/ca.crt"
启动 filebeat,过2分钟,日志文件写几条日志,看kibana里面已经有了:
filebeat索引
创建数据视图看一下内容:
索引视图
可以看到内容,还有我们加的tags。
网友评论