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

今天在这篇博客中,我们将学习如何在容器环境中运行 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 个。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[CTF/网络安全] 攻防世界 weak_auth 解题详析

[CTF/网络安全] 攻防世界 weak_auth 解题详析 弱认证弱认证绕过方法姿势Burp Suite 爆破 总结 题目描述&#xff1a;小宁写了一个登陆验证页面&#xff0c;随手就设了一个密码。 弱认证 weak_auth翻译&#xff1a;弱认证 这个术语通常用来描述一种较弱的安全认证方法或机制&am…

UVC调用过程部分细节分析

UVC调用过程部分细节分析 文章目录 UVC调用过程部分细节分析概括分析UVC驱动调用过程1.open:ioctl 2.VIDIOC_QUERYCAP3.VIDIOC_ENUM_FMT4.VIDIOC_G_FMT5.VIDIOC_TRY_FMT6.VIDIOC_S_FMT /7.VIDIOC_REQBUFS8.VIDIOC_QUERYBUF9.mmap10.VIDIOC_QBUF11.VIDIOC_STREAMON12.poll13.VID…

[CTF/网络安全] 攻防世界 backup 解题详析

[CTF/网络安全] 攻防世界 backup 解题详析 PHP备份文件名备份文件漏洞成因备份文件名常用后缀姿势总结 题目描述&#xff1a;X老师忘记删除备份文件&#xff0c;他派小宁同学去把备份文件找出来,一起来帮小宁同学吧&#xff01; PHP备份文件名 PHP 脚本文件的备份文件名&#…

MATLAB 之 其他形式的二维图形

文章目录 一、对函数自适应采样的绘图函数二、其他坐标系下的二维曲线图1. 对数坐标函数2. 极坐标图 三、其他特殊二维图像1. 条形类图形2. 面积类图形3. 散点类图形4. 矢量类图形 二维图线除采用直角坐标系外&#xff0c;还可采用对数坐标或极坐标。除了绘制二维曲线外&#x…

Anaconda安装与Python环境搭建

这篇文章介绍了如何安装Anaconda&#xff0c;及Python环境如何配置&#xff0c;你是否还在为难以寻找一篇讲述全面的环境配置博客而苦恼&#xff0c;稍安勿躁&#xff0c;你找对啦&#xff0c;照着本篇文章做下去&#xff0c;你就会发现没那么难呢&#xff01; Anaconda安装 …

Python系列模块之标准库OS详解

感谢点赞和关注 &#xff0c;每天进步一点点&#xff01;加油&#xff01; 目录 ​一、模块 1.1 模块的定义 1.2 模块的分类 1.3 模块的基本导入语法 二、Python中的包 三、标准库之os模块 实战&#xff1a; 钉钉告警应用 一、模块 1.1 模块的定义 Python 模块(Module)&a…

目标检测数据预处理——部件截图,按一定比例进行外扩

本片是截图的篇的升级版本&#xff0c;简单版本的截图请参考根据目标框外扩一定比例进行截图&#xff08;连带标签&#xff09;。 对目标框&#xff08;类别名称&#xff09;进行分类&#xff0c;将同一类的目标框进行截图并分类保存在不同的文件夹中。 在本篇当中&#xff0c;…

Flink有状态计算的状态容错

状态容错 State Fault Tolerance 首先来说一说状态容错。Flink 支持有状态的计算&#xff0c;可以把数据流的结果一直维持在内存&#xff08;或 disk&#xff09;中&#xff0c;比如累加一个点击数&#xff0c;如果某一时刻计算程序挂掉了&#xff0c;如何保证下次重启的时候&…

一文了解customRef 自定义ref使用

概念 按照文档中的说明&#xff1a;customRef 可以用来创建一个自定义的 ref&#xff0c;并对其依赖项跟踪和更新触发进行显式控制。它需要一个工厂函数&#xff0c;该函数接收 track 和trigger函数作为参数&#xff0c;并且应该返回一个带有 get 和 set 的对象。 其实大致意思…

5.2 标准IO:文件的打开、关闭及代码实现

目录 标准IO 文件的打开 标准I/O-fopen-mode参数 ​编辑 标准I/O-fopen-示例 标准I/O-fopen-新建文件权限 标准I/O-处理错误信息 标准I/O-错误信息处理-示例1 标准I/O-错误信息处理-示例2 文件的关闭 标准IO 文件的打开 打开就是占用资源 下列函数可用于打开一个…

历经70+场面试,我发现了大厂面试的套路都是···

今年的金三银四刚刚过去&#xff0c;我又想起了我在去年春招时面试了50余家&#xff0c;加上暑期实习面试了20余家&#xff0c;加起来也面试了70余场的面试场景了。 基本把国内有名的互联网公司都面了一遍&#xff0c;不敢说自己的面试经验很丰富&#xff0c;但也是不差的。 …

Kali-linux使用社会工程学工具包(SET)

社会工程学工具包&#xff08;SET&#xff09;是一个开源的、Python驱动的社会工程学渗透测试工具。这套工具包由David Kenned设计&#xff0c;而且已经成为业界部署实施社会工程学攻击的标准。SET利用人们的好奇心、信任、贪婪及一些愚蠢的错误&#xff0c;攻击人们自身存在的…

HNU-计算机系统-Challenge

Challenge 计科210X wolf 202108010XXX 本题是从属于第七次讨论课的个人题,听说做了有加分?我来试试。 下面是相关报告。 题目: C 语言的初学者第一个编写的 C 代码一般是如下所示的“ #include <stdio.h> int main() {printf("Hello, World!");

项目管理:有效的沟通对项目的成功至关重要

为实施有效的沟通&#xff0c;需要建立沟通管理计划同时理解什么是沟通&#xff0c;沟通的对象是谁&#xff0c;沟通的目标是什么&#xff0c;难度在哪里&#xff0c;并选择合适的沟通方式。 项目沟通是确保项目团队的相关信息能及时、正确地产生、收集、发布、储存和最终处理…

Java多线程异常处理

文章目录 一. 线程中出现异常的处理1. 线程出现异常的默认行为2. setUncaoughtExceptionHandler()方法处理异常3. setDefaultUncaoughtExceptionHandler()方法进行异常处理 二. 线程组内出现异常 一. 线程中出现异常的处理 1. 线程出现异常的默认行为 当单线程中初出现异常时…

LOTO示波器如何测试阻抗的频响曲线

LOTO示波器如何测试阻抗的频响曲线 模块的输入输出端口&#xff0c;在电路分析上&#xff0c;一般简单表征为电阻来进行计算和分析。但多数情况下&#xff0c;这些端口并不是纯电阻的特性&#xff0c;更精确一些&#xff0c;它可能是电阻电容以及电感的组合&#xff0c;表现为非…

ChatGPT 聊天接口API 使用

一、准备工作 1.准备 OPENAI_ACCESS_TOKEN 2.准备好PostMan 软件 二、测试交流Demo 本次使用POSTMAN工具进行快速测试&#xff0c;旨在通过ChatGPT API实现有效的上下文流。在测试过程中&#xff0c;我们发现了三个问题&#xff1a;    1.如果您想要进行具有上下文的交流&…

从供应链协同角度挖掘数字化应用场景

企业在数字化转型的过程中&#xff0c;供应链的数字化转型是绕不开的话题。供应链的数字化转型&#xff0c;是借助数字化技术赋能企业和供应链从业人员&#xff0c;驱动业务向更加高效智能的方向发展。越来越多的企业意识到需要依靠新技术&#xff0c;也往往非常强调新技术的应…

为什么我们应该选择Renderbus瑞云渲染进行 EEVEE 渲染?

在某些情况下&#xff0c;用户需要高精度、快速的渲染&#xff0c;而 EEVEE的诞生就是为了满足这种需求。Eevee&#xff08;Extra Easy Virtual Environment Engine&#xff09;是 Blender 最新的内部渲染引擎&#xff0c;由用于 Epic Games 开发的虚幻引擎的相同代码提供支持…

openldap介绍以及使用

参考文献&#xff1a;openldap介绍和使用 基本概念 官网&#xff1a;https://www.openldap.org 官方文档&#xff1a;https://www.openldap.org/doc LDAP是一个开放的&#xff0c;中立的&#xff0c;工业标准的应用协议&#xff0c;通过IP协议提供访问控制和维护分布式信息的…