Beats:如何在 Docker 容器中运行 Filebeat

news2024/12/26 23:50:43

今天在这篇博客中,我们将学习如何在容器环境中运行 Filebeat。 为了快速了解 Filebeat 是做什么用的:

  • Filebeat用于转发和集中日志数据
  • 它重量轻,小型化,使用的资源更少
  • 它作为代理安装在你的服务器上
  • 它监视来自指定位置的日志文件
  • 它收集日志事件并将它们转发到 Elascticsearch 或 Logstash 进行索引

在今天的练习中,我们将使用如下的架构:

如上所示,我们在 Host 机器上部署 Elasticsearch 及 Kibana。然后在 Docker 里部署 NGINX。 我们使用 Filebeat 来收集 NGINX 里的日志。这个想法是 Filebeat 容器应该从客户端机器上运行的所有容器收集所有日志,并将它们发送到主机上运行的 Elasticsearch。我的主机的 IP 地址是 192.168.0.3。

你可以将 Filebeat 配置为从任意数量的容器中收集日志。 在这里,我只会为这个演示安装一个容器。 现在,让我们从演示开始。

在本展示中,我将使用最新的 Elastic Stack 8.7.1 来进行展示。

提示:在最新的 Elastic Stack 发布中,我们更建议使用 integration 来收集日志。请详细参阅文章 “Observability:运用 Fleet 来轻松地导入 Nginx 日志及指标”。

正对 7.x 的版本,在没有设置安全的情况下,你参阅文章 “Beats:在 Docker 里运行 Filebeat”。更多关于 Beats 的运行,请参考文章 “Beats:Beats 入门教程 (二)”。

安装

Elasticsearch 及 Kibana

如果你还没有安装好自己的 Elasticsearch 及 Kibana,请参阅如下的文章来进行安装:

  • 如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch

  • Kibana:如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kibana

一旦按照完毕,我们可以使用 https://localhost:9200 来访问 Elasticsearch。在 Elasticsearch 安装的过程中,我们可以在它的安装目录中找到相应的安装证书:

$ pwd
/Users/liuxg/elastic/elasticsearch-8.7.1/config/certs
$ ls
http.p12      http_ca.crt   transport.p12

在上面,我们可以看到证书文件 http_ca.crt 文件。这个是在我们如下的配置中需要用到的证书文件。

为了能够使得 Kibana 被 Docker 里的容器所访问,我们需要修改如下的配置:

config/kibana.yml

server.host: "0.0.0.0"

这样,它绑定于所有的 IP 地址上,而不只是 localhost。

NGINX

我们使用如下的命令来启动 NGINX:

sudo docker run -d -p 8080:80 --name nginx nginx

我们可以使用如下的命令来查看 docker:

$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                  NAMES
cb3ac6eace69   nginx     "/docker-entrypoint.…"   2 minutes ago   Up 2 minutes   0.0.0.0:8080->80/tcp   nginx

我们可以看到 NGINX 已经成功地运行起来了。我们可以使用如下的命令来查看它的响应:

curl localhost:8080
$ curl localhost:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

你也可以在浏览器中进行查看:

Filebeat 

现在,我们只需要部署 Filebeat 容器即可。 使用以下命令下载镜像:

sudo docker pull docker.elastic.co/beats/filebeat:8.7.1
$ sudo docker pull docker.elastic.co/beats/filebeat:8.7.1
Password:
2023/05/19 11:53:06 must use ASL logging (which requires CGO) if running as root
8.7.1: Pulling from beats/filebeat
16c1e5ae78fc: Pull complete 
4d6f6aab5433: Pull complete 
9307845deb69: Pull complete 
ef31d1e76261: Pull complete 
4f5c8ec1ea3b: Pull complete 
efda1b2c0f2f: Pull complete 
a86fca58dffc: Pull complete 
40cafadefbc3: Pull complete 
231bb9e5d0cb: Pull complete 
b6c65c00f2d8: Pull complete 
d088ab450860: Pull complete 
89732bc75041: Pull complete 
Digest: sha256:6646d22b9bb05454f6fa0bd250df0f6fc4f0e9e8aff363b1215013fd2f49596d
Status: Downloaded newer image for docker.elastic.co/beats/filebeat:8.7.1
docker.elastic.co/beats/filebeat:8.7.1

我们接下来需要来配置我们的 Filbeat。我们可以通过如下的命令来获得当前机器的 IP 地址:

$ ifconfig | grep inet
	inet 127.0.0.1 netmask 0xff000000 
	inet6 ::1 prefixlen 128 
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
	inet6 fe80::acbc:f2ff:fe5e:d6eb%anpi2 prefixlen 64 scopeid 0x4 
	inet6 fe80::acbc:f2ff:fe5e:d6e9%anpi0 prefixlen 64 scopeid 0x5 
	inet6 fe80::acbc:f2ff:fe5e:d6ea%anpi1 prefixlen 64 scopeid 0x6 
	inet6 fe80::9826:b8ff:febe:db9d%awdl0 prefixlen 64 scopeid 0x11 
	inet6 fe80::9826:b8ff:febe:db9d%llw0 prefixlen 64 scopeid 0x12 
	inet6 fe80::7aa9:805:78d1:c5a0%utun0 prefixlen 64 scopeid 0x13 
	inet6 fe80::49f8:c1da:6400:2f80%utun1 prefixlen 64 scopeid 0x14 
	inet6 fe80::ce81:b1c:bd2c:69e%utun2 prefixlen 64 scopeid 0x15 
	inet6 fe80::bcef:78d7:ef81:fd99%utun4 prefixlen 64 scopeid 0x1e 
	inet6 fe80::725f:4299:86ad:4350%utun5 prefixlen 64 scopeid 0x1f 
	inet6 fe80::4c:f590:dde0:dbe%en4 prefixlen 64 secured scopeid 0xd 
	inet 192.168.0.3 netmask 0xffffff00 broadcast 192.168.0.255
	inet 198.18.1.13 --> 198.18.1.13 netmask 0xfffff000 

从上面,我们可以看出来,我们机器的 IP 地址为 192.168.0.3。我们在当前用户的目录下创建一个叫做 setup 的目录:

$ cd
$ mkdir -p setup
$ cd setup/

我们首先把 Elasticsearch 的证书拷贝到这个 setup 目录中。

我们接下来在当今的目录中创建一个叫做 filebeat.yml 的文件。它的内容如下:

/Users/liuxg/setup/filebeat.yml 

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

filebeat.autodiscover:
  providers:
    - type: docker
      hints.enabled: true

processors:
- add_cloud_metadata: ~

setup.kibana:
  host: "192.168.0.3:5601"

output.elasticsearch:
  hosts: '${ELASTICSEARCH_HOSTS:https://192.168.0.3:9200}'
  username: "elastic"
  password: "dE2qdV9DbucJJlodLmCy"
  ssl:
    enabled: true
    ca_trusted_fingerprint: "8e4151f1ccc29223490481d37267cd7fe477a4ff23b96f3d3a4c8850c6818da5"

注意

  • 我们需要根据自己的安装修改上面的 username 及 password。在实际的使用中,我们不建议使用超级用 elastic 来进行数据采集。你可以创建一个专门用于采集 beats 信息的用户账号进行使用
  • 上面的 fingerprint 信息可以在安装 Elasticsearch 时得到

有关更多配置 Beats 的信息,请参阅文章 “Elastic Stack 8.0 安装 - 保护你的 Elastic Stack 现在比以往任何时候都简单”。

接下来,我们来启动 Filebeat:

docker run -d \
  --name=filebeat \
  --user=root \
  --volume="$(pwd)/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro" \
  --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
  --volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
  docker.elastic.co/beats/filebeat:8.7.1 filebeat -e --strict.perms=false

我们在含有 filebeat.yml 文件的目录下运行上面的命令:

$ pwd
/Users/liuxg/setup
$ ls
filebeat.yml
$ docker run -d \
>   --name=filebeat \
>   --user=root \
>   --volume="$(pwd)/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro" \
>   --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
>   --volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
>   docker.elastic.co/beats/filebeat:8.7.1 filebeat -e --strict.perms=false
d6585f5aa770602b15a722efc71e5ce3300f8826861e82e7265f43b995451b8d

我们使用如下的命令来查看 docker 的容器:

$ docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED             STATUS             PORTS                  NAMES
cce9fb9ba72e   docker.elastic.co/beats/filebeat:8.7.1   "/usr/bin/tini -- /u…"   22 seconds ago      Up 21 seconds                             filebeat
cb3ac6eace69   nginx                                    "/docker-entrypoint.…"   About an hour ago   Up About an hour   0.0.0.0:8080->80/tcp   nginx

很显然,我们的 filebeat 已经运行起来了。如果想查看它的日子信息,我们可以使用如下的命令:

我们的设置现已完成。 现在我们可以转到 Kibana 并可视化从 Filebeat 发送的日志。

使用 Kibana 来查看 NGINX 日志

很多开发者可能会奇怪,我们并没有对 NGINX 做任何的配置,那么我们是如何能够正确地采集到 NGINX 的日志信息呢?答案是是在我们的 filebeat.yml 中,我们使用了 autodiscover:

filebeat.autodiscover:
  providers:
    - type: docker
      hints.enabled: true

为了能够正确地查看 Filebeat 所采集的日志,我们可以利用 Elastic 为我们建好的 Dashboard 来进行查看。我们首先进行到 filebeat 的容器里:

$ docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED         STATUS         PORTS                  NAMES
cce9fb9ba72e   docker.elastic.co/beats/filebeat:8.7.1   "/usr/bin/tini -- /u…"   5 minutes ago   Up 5 minutes                          filebeat
cb3ac6eace69   nginx                                    "/docker-entrypoint.…"   2 hours ago     Up 2 hours     0.0.0.0:8080->80/tcp   nginx
$ docker exec -it cce9fb9ba72e /bin/bash
root@cce9fb9ba72e:/usr/share/filebeat# ls
LICENSE.txt  README.md  fields.yml  filebeat.reference.yml  kibana  module
NOTICE.txt   data       filebeat    filebeat.yml            logs    modules.d
root@cce9fb9ba72e:/usr/share/filebeat# ./filebeat setup
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling.

Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Loaded Ingest pipelines

我们进入 Kibana 的界面:

我们可以看到有 191 个文档。

我们可以看到有 NGINX 的文档有 52 个: 

我们可以使用如下的命令:

curl http://localhost:8080

上面的命令将生成一个日志。稍等一会儿,我们可以看到:

含有 NGINX 的文档变成了 53 个。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/544098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯云EdgeOne为什么能让客户降本增效?

随着数字化时代的来临&#xff0c;各类线上互动场景不断出现&#xff0c;并成为人们日常工作生活中的一部分。然而&#xff0c;基于互联网提供线上娱乐、线上办公、线上购物等服务的企业&#xff0c;在复杂的全球网络环境下会遇到网络延迟不稳定的情况&#xff0c;海外环境更多…

QGIS安装与简单使用流程

QGIS工具是我们地图业务领域比用的工具之一&#xff0c;理论就先不介绍了&#xff0c;今天主要介绍安装使用等基本操作&#xff1a; 一、下载安装 1、官网下载 Download QGIS 显示页面&#xff1a; 可以选择不同版本。我们以3.28为例&#xff0c;点击进入&#xff1a; 点击…

【hive】hive order、sort、distribute、cluster by区别与联系

​ 1、order by hive中的order by 会对查询结果集执行一个全局排序&#xff0c;这也就是说所有的数据都通过一个reduce进行处理的过程&#xff0c;对于大数据集&#xff0c;这个过程将消耗很大的时间来执行。 2、sort by hive的sort by 也就是执行一个局部排序过程。这可以…

怎么将heic格式转化jpg,5种方法立马学

将HEIC格式转换为JPG格式是非常必要的。首先&#xff0c;HEIC&#xff08;.heic&#xff09;格式是苹果最新推出的图像格式。与JPEG相比&#xff0c;HEIC可以存储更多的图像信息&#xff0c;同时还支持透明度、深度和动态范围等功能。但由于HEIC格式相对较新&#xff0c;许多设…

Rust之泛型、特性和生命期(二):通用数据类型

开发环境 Windows 10Rust 1.69.0 VS Code 1.78.2 项目工程 这里继续沿用上次工程rust-demo 通用数据类型 我们使用泛型来为函数签名或结构等项目创建定义&#xff0c;然后我们可以将其用于许多不同的具体数据类型。让我们首先看看如何使用泛型来定义函数、结构、枚举和方法。…

27K 入职字节的那天,我哭了····

先说一下自己的个人情况&#xff0c;计算机专业&#xff0c;18年本科毕业&#xff0c;一毕业就进入了“阿里”测试岗(进去才知道是接了个阿里外包项目&#xff0c;可是刚毕业谁知道什么外包不外包的)。 更悲催的是&#xff1a;刚入职因为家里出现一些变故&#xff0c;没有精力…

【软件测试】Python自动化软件测试算是程序员吗?

今天早上一觉醒来&#xff0c;突然萌生一个念头&#xff0c;【软件测试】软件测试算是程序员吗&#xff1f;左思右想&#xff0c;总感觉哪里不对。做了这么久的软件测试&#xff0c;还真没深究过这个问题。 基于&#xff0c;内事问百度的准则&#xff1a; 结果…… 我刚发出软…

刚测完Bug,就被开除了····

我曾在一家软件公司担任功能测试工程师&#xff0c;经历了三年的工作。在这段时间里&#xff0c;我积累了丰富的测试经验和技能&#xff0c;在团队中也有着不错的表现。然而&#xff0c;最终我却被公司辞退了。 在我入职时&#xff0c;公司还没有建立完善的测试流程和标准。我的…

JVM系列-第10章-垃圾回收概述和相关算法(JVisualVM)

垃圾回收概述 Java 和 C语言的区别&#xff0c;就在于垃圾收集技术和内存动态分配上&#xff0c;C语言没有垃圾收集技术&#xff0c;需要程序员手动的收集。 垃圾收集&#xff0c;不是Java语言的伴生产物。早在1960年&#xff0c;第一门开始使用内存动态分配和垃圾收集技术的L…

【分享】阿里版ChatGPT—通义千问(初体验)

哈喽&#xff0c;大家好&#xff0c;我是木易巷~ 在上个月4月7号&#xff0c;木易巷开始申请阿里云大模型开始邀请测试「通义千问」&#xff0c;到今天早上&#xff0c;木易巷收到了申请通过的短信。 官网地址&#xff1a;tongyi.aliyun.com 迫不及待去测试了一下&#xff0c;效…

「直播精选问答」释放数据潜力,助力零售数智升级!

​5月10日的《释放数据潜力&#xff0c;助力零售数智升级》虹科零售专场BI直播课程活动&#xff0c;在各位观众的积极互动与热情反馈中落下帷幕&#xff01; 为激发观众和读者朋友对于零售行业数智化趋势的思考与讨论&#xff0c;真正让BI知识在数字时代得以共享和碰撞&#xf…

MaaS来临,SaaS进入「奇点」时刻|产业深度

大模型热度持续发酵。MaaS的到来&#xff0c;不仅改变了云厂商的竞争格局&#xff0c;SaaS行业也将迎来「奇点」时刻。未来十年&#xff0c;基于MaaS底座&#xff0c;国内SaaS甚至可能会出现Salesforce一样的巨头。 作者|思杭 编辑|皮爷 出品|产业家 大模型热度正在持续发酵。…

阿里云镜像服务下载并安装Go环境

【阿里云镜像】下载并安装Go环境 一、参考链接 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com) golang镜像-golang下载地址-golang安装教程-阿里巴巴开源镜像站 (aliyun.com) GO语言安装以及国内镜像 - DbWong_0918 - 博客园 (cnblogs.com) 二、Go介绍 Gol…

vscode使用git对代码进行管理

2、暂存自己更改&#xff1b;3、拉取别人的代码&#xff0c;防止别人更改代码合并时发生冲突&#xff1b;4、上传自己的更改并合并代码

深度学习在自然语言处理方面的应用

前言 自然语言处理是一种将自然语言转换为计算机可处理的形式的技术。深度学习是一种非常强大的机器学习技术&#xff0c;它在自然语言处理方面也有广泛的应用。本文将详细介绍深度学习在自然语言处理方面的应用。 自然语言处理的基本步骤 自然语言处理的基本步骤包括分词、词…

智能驾驶汽车的系统开发与验证软件PreScan2022版

Simcenter Prescan是基于物理学的最佳仿真平台&#xff0c;在桌面、集群和云端&#xff0c;用于智能驾驶车辆开发&#xff0c;于2022年三月宣布发布2022.1版本。Simcenter Prescan 2022.1引入了与SUMO的协同仿真&#xff0c;用于自动生成交通&#xff0c;并配有程序化的脚本&am…

RestTemplate使用详解

文章目录 1.1 RestTemplate环境准备1&#xff09;背景说明2&#xff09;工程配置RestTemplate 1.2 RestTemplate API入门-11&#xff09;get请求携带参数访问外部url2&#xff09;get请求响应数据自动封装vo实体对象3&#xff09;请求头携带参数访问外部接口 1.3 RestTemplate …

Spring:AOP 的详细内容

文章目录 Spring&#xff1a;Day 03AOP一、概述二、搭建环境三、实现 AOP1. 方式一&#xff1a;使用原生 Spring 的 API 接口2. 方式二&#xff1a;自定义类&#xff08;切面&#xff09;3. 方式三&#xff1a;注解 四、总结 Spring&#xff1a;Day 03 AOP 一、概述 AOP&…

相见恨晚的5款良心软件,每款都是经过时间检验的精品

今天来给大家推荐5款良心软件,每款都是经过时间检验的精品,用起来让你的工作效率提升飞快&#xff0c;各个都让你觉得相见恨晚&#xff01; 1.颜色选择器——ColorPicker ColorPicker是一款用于在屏幕上选择颜色的工具。它可以让你快速地获取任意像素的颜色值,并复制到剪贴板…

信息收集-子域名

&#xff08;一&#xff09;、子域名 子域名是父域名的下一级&#xff0c;比如“huiyuan.xxx.com”和“bbs.xxx.com”这两个域名是“xxx.com”的子域名&#xff0c; 企业可能有多个、几十个甚至更多的子域名应用&#xff0c;因为子域名数量多&#xff0c;企业子域名应用的防护…