首页 > 其他分享 >docker 运行filebeat收集日志

docker 运行filebeat收集日志

时间:2023-03-17 15:24:06浏览次数:60  
标签:filebeat log 收集 nginx docker 日志

1.简介

beats

首先filebeat是Beats中的一员。
  Beats在是一个轻量级日志采集器,其实Beats家族有6个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比Logstash,Beats所占系统的CPU和内存几乎可以忽略不计。
目前Beats包含六种工具:

  • Packetbeat:网络数据(收集网络流量数据)
  • Metricbeat:指标(收集系统、进程和文件系统级别的CPU和内存使用情况等数据)
  • Filebeat:日志文件(收集文件数据)
  • Winlogbeat:windows事件日志(收集Windows事件日志数据)
  • Auditbeat:审计数据(收集审计日志)
  • Heartbeat:运行时间监控(收集系统运行时的数据)

filebeat

Filebeat是用于转发和集中日志数据的轻量级传送工具。Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash进行索引。

Filebeat的工作方式如下:启动Filebeat时,它将启动一个或多个输入,这些输入将在为日志数据指定的位置中查找。对于Filebeat所找到的每个日志,Filebeat都会启动收集器。每个收集器都读取单个日志以获取新内容,并将新日志数据发送到libbeat,libbeat将聚集事件,并将聚集的数据发送到为Filebeat配置的输出。

2.docker运行

环境说明:

  • docker 20.10
  • ubuntu 20.04
  • elasticsearch 6.8.23
  • filebeat 6.8.23(docker)

测试的数据流:通过运行filebeat容器,挂载收集的日志文件,filebeat收集后发送到elasticsearch。

话不多说,接下来看看具体操作。

下载镜像,由于我的elasticsearch的版本是6.8.23,为统一版本,镜像也是下载6.8.23。
docker pull elastic/filebeat:6.8.23

运行容器拷贝出filebeat.yml配置文件:

docker run -d --name filebeat elastic/filebeat:6.8.23 /bin/bash

# 提前创建相关目录
mkdir -p /data/elk6.8/filebeat

cd /data/elk6.8/filebeat

docker cp filebeat:/usr/share/filebeat/filebeat.yml ./

# 此坑会踩
chmod go-w filebeat.yml 

本次测试以nginx的访问日志为例,所以如果你也一样测试的话,请先运行nginx,且配置好,我用的json格式的log。

以下是我的nginx的配置:

http {
...
        ##
        # Logging Settings
        ##
        # 原有日志格式,不能注释或者去掉
        log_format  main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" $request_time';
        # json日志格式
        log_format log_json '{"@timestamp": "$time_local", '
                        '"remote_addr": "$remote_addr", '
                        '"referer": "$http_referer", '
                        '"request": "$request", '
                        '"status": $status, '
                        '"bytes": $body_bytes_sent, '
                        '"agent": "$http_user_agent", '
                        '"x_forwarded": "$http_x_forwarded_for", '
                        '"up_addr": "$upstream_addr",'
                        '"up_host": "$upstream_http_host",'
                        '"up_resp_time": "$upstream_response_time",'
                        '"request_time": "$request_time"'
                        ' }';

        access_log /var/log/nginx/access.log log_json;

...
}

配置好后,重新加载nginx:nginx -s reload

然后是filebeat.yml的配置:

filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

processors:
- add_cloud_metadata: ~

# 收集系统日志
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log # 收集nginx的访问日志

output.elasticsearch: # 配置elasticsearch的地址,有xpack的插件需要添加相关auth信息
  hosts: '172.30.3.57:9200'
  username: '${ELASTICSEARCH_USERNAME:}'
  password: '${ELASTICSEARCH_PASSWORD:}'
  indices:
    - index: "filebeat-%{+yyy-MM.dd}"

删除之前运行的filebeat容器,重启新的容器:

docker rm -f filebeat

docker run -d --name filebeat \
  --restart always \ 
  -v /data/elk6.8/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml \  
  -v /var/log/nginx/access.log:/var/log/nginx/access.log \ 
  elastic/filebeat:6.8.23 /bin/bash

观察filebeat容器的日志输出:docker logs -f filebeat

从日志来看,filebeat正常运行,接下来访问几次nginx的80端口,看看kibana的日志情况:

从kibana来看也是正常的,到此日志收集就结束了。

如果有需求按照字段存储,这就是另外一个话题,涉及到日志解析问题。

参考文档:

标签:filebeat,log,收集,nginx,docker,日志
From: https://www.cnblogs.com/davis12/p/17226923.html

相关文章

  • 从0到1入门Docker(七)配置国内加速器
     配置国内加速器 上篇文章内容是Docker引擎的安装,今天这篇文章来说一下配置国内加速器​​https://blog.51cto.com/u_15485663/6127076​​学习Docker推荐大家可以看动......
  • SQLite 学习日志
    SQLite 语法SQLite是遵循一套独特的称为语法的规则和准则。本教程列出了所有基本的SQLite语法,向您提供了一个SQLite快速入门。大小写敏感性有个重要的点值得注意,S......
  • 记一下docker启动minio
    dockerrun--privileged=true-d-p9000:9000-p9001:9001--nameminio-d--restart=always-e"MINIO_ROOT_USER=root"-e"MINIO_ROOT_PASSWORD=12345678"......
  • Windows下用docker搭建本地kafka
    1.docker创建zookeeper拉取zookeeper镜像dockerpullwurstmeister/zookeeper运行dockerrun--name=zookeeper-d-eZOOKEEPER_CLIENT_PORT=2181-p2181:2181-p2888......
  • docker下compose及gitlab安装配置
      部署逻辑与部署Jenkins类似,但是实现方式做了一些调整。先安装docker-compose,docker-compose是doker容器的管理工具,通过yaml来实现多个容器之间的调用关系。通过d......
  • Windows docker desktop 时区设置
    必须设置时区,否则查询出来的时间会有问题:(本人安装了mysql,但是修改mysql的配置没起作用) 进入容器执行:cp/usr/share/zoneinfo/Asia/Shanghai/etc/localtime&&echo‘......
  • MyBatis日志四
    使用useGeneratedKeys和keyProperty属性<insertid="insert"parameterType="com.yogurt.po.Student"useGeneratedKeys="true"keyProperty="id">INSERTINT......
  • MyBatis学习日志五
    缓存一级缓存默认开启,同一个SqlSesion级别共享的缓存,在一个SqlSession的生命周期内,执行2次相同的SQL查询,则第二次SQL查询会直接取缓存的数据,而不走数据库,当然,若第一次和第......
  • Docker CLI docker commit 常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Doc......
  • 日志
    2022.2.11今天主要学习了状压dp和树形dp。小知识:for循环中使用registerint可以卡常数对double类型的数memset赋值成127相当于无穷大poj不能用万能头,必须开longlong......