Observability:运用 Fleet 来轻松地导入 Nginx 日志及指标

Posted 中国社区官方博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Observability:运用 Fleet 来轻松地导入 Nginx 日志及指标相关的知识,希望对你有一定的参考价值。

在我之前的文章:

我有讲到如何使用 Ingest Manager 简化数据输入。今天我重新看了一下界面确实变了很多,这就是为什么实验版本的功能一直在演化中。Ingest Manager 的名字也被修改为 Fleet。另外从 7.13 开始,开始引入 Fleet Server。Fleet Server 是 Elastic Stack 的一个组件,用于集中管理 Elastic Agent。 它作为 Elastic Agent 的一部分在用作服务器的主机上启动。 一个 Fleet Server 进程可以支持多个 Elastic Agent 连接,并作为一个控制面来更新代理策略、收集状态信息和协调跨 Elastic Agent 的操作。

如何使用 Elastic fleet 来收集 nginx 日志及指标

以 agent 为基础的数据摄入架构

Fleet Server 是 Elastic Agent 用来与 Elasticsearch 通信的机制:

  • 创建新的代理策略后,它会保存到 Elasticsearch。
  • 为了注册该策略,Elastic Agents 使用为身份验证生成的注册密钥向 Fleet Server 发送请求。
  • Fleet Server 接收请求并从 Elasticsearch 获取代理策略,然后将该策略发送到在该策略中注册的所有 Elastic Agent。
  • Elastic Agent 使用策略中的配置信息来收集数据并将其发送到 Elasticsearch。
  • Fleet Server 会定期检查 Elastic Agent 的状态信息。
  • 当策略更新时,Fleet Server 从 Elasticsearch 检索更新的策略并将其发送到连接的 Elastic Agent。

Fleet Server 作为 Elastic Agent 内的子进程运行。Agent 使用描述 Fleet Server 配置的特殊策略。 在大规模 self-managed 部署或在 Elastic Cloud 上托管的 Elasticsearch 服务中,Fleet Server 通常作为专用的 Elastic Agent 通信主机运行,但你可以选择将其用于自我管理集群上的数据收集。

使用基于 agent 数据摄入和 Beats 相比较:

需要为每个用例安装 beat适用于所有用例的单一代理
在命令行安装模块从 Kibana UI 安装集成
需要手写/编辑 YAML 配置从集成 UI 配置
无法向已安装的 beat 发送动作中央、远程代理管理
或是所有开箱即用的 assets 或没有选择要添加的集成
手动输入凭据(用户名及密码)自动生成的 ES API 密钥
边缘设备需要更高的 ES 权限边缘设备所需的最低 ES 权限
具有大量字段的单个索引生成具有更少字段的多个索引,并提高了查询性能

从安装的角度来说,Elastic agent 一个 agent 代替之前所有的 Beats:

在今天的文章中,我将基于 7.14.1 的版本如何使用 Fleet 导入 Nginx 日志。

安装

Elastic Stack

我们可以按照我之前的文章 “Security:如何安装 Elastic SIEM 和 EDR” 来安装 Elasticsearch 及  Kibana。我们为 Elasticsearch 及 Kibana 配置上安全及 HTTPS 访问,尽管 HTTPS 不是不必要的。针对我的配置,我使用一台 Ubuntu 系统的集群安装 Elasticsearch 及 Kibana,并且它的 IP 地址为 193.168.0.4。安装完毕后,我们必须使用 https://192.168.0.4:5601 来登录 Kibana:

Nginx 及 Nodejs 

我们可以按照我之前的文章 “Beats:使用 Elastic Stack 对 Nginx Web 服务器监控”。在那篇文章中,我们跳过按照 Elasticsearch 及 Kibana。我们直接进入到安装 Nodejs 及 Ngnix 部分。我们需要同时运行那个 samplenodejs 的应用。

等我们安装好后,我们可以在 Mac OS 的浏览器中输入地址 192.168.0.4。

它说明我们的 Nginx 工作是正常的。我们可以仔细查看一下 Ubuntu 机器下如下的位置的 log 文件:

$ pwd
/var/log/nginx
liuxg@liuxgu:/var/log/nginx$ ls *.log
access.log  error.log

上面是在 Ubuntu OS 机器下的 Nginx  的日志文件的位置。记住这个信息。我们在一下的练习中将会用到。

安装 Elastic Agent

我打开 Kibana:

  在 Kibana 中它已经集成了许多的开箱即用的应用及服务。如上图所示,我们可以找到 Nginx 的服务集成,虽然目前还处于一个实验的阶段。

 点击进去,我们可以查看到 Nginx 的一些介绍。在上面,我们可以看到 Nginx 的 Dashboard 的一些截屏。

我们接下来选择 Fleet:

 如上所示,我们可以看到已有的 policy。在通常的情况下,我们可以直接使用 Default Policy。在今天的练习中,我们来创建一个属于自己的 policy:

    

这样就创建了一个叫做 nginx_demo 的 policy。点击上面的 nginx_demo:

在这个 policy 里面,它已经包含了一个叫做 system-1 的 integration。我们可以点击 Edit integration 来查看这个 integration 里到底包含一些啥东东:

如上所示,它采集系统的日志,Windows 系统的事件以及系统的指标等等。当然对于我们的 nginx_demo 这个 policy 来说,我们甚至可以删除 system-1 这个 integration,如果我们不是对它里面所采集的信息感兴趣的话。针对我的配置,我选择保留。接下来,我们来添加 nginx 这个 integration:

 

我们接着根据我们的系统上的 log 的位置来进行配置上面的选项。针对我的情况,它上面显示了 Linux 系统上的 access.log 及 error.log 的正确位置,所以我不需要做任何的修改。如果是是 Mac OS 系统,你可能需要根据自己的日志的位置来进行相应的修改。

 点击上面的 Save integration 按钮:

如上图所示,我们可以看见一个新增加的 nginx-1 的 integration。

自从 7.13 发布版以来,新增加了一个叫做 fleet server 的元件。我们至少需要在一个机器上部署一次,这样各个 elastic-agent 可以对它进行连接。针对我们的情况,我们按照上面添加 nginx integration 相同的方法来添加 fleet-server。

最终我们的 nginx-demo policy 是这样的:

 接下来,我们对 Fleet 进行配置:

我们必须添加 Fleet 服务器。这是一个从 7.13 开始的要求。我们添加一个 Fleet 服务器的地址:

 我们回到 Fleet 的首页:

我们点击 Go to download page。针对我的情况,我安装 DEB 版本的 Elastic Agent:

curl -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-7.14.1-linux-x86_64.tar.gz

我使用如下的命令来进行安装:

tar xzf elastic-agent-7.14.1-linux-x86_64.tar.gz

我们使用如下的方法来安装 Fleet Server:

 

 

我们拷贝上面的命令。由于我们使用了自签名证书,所以我们需要对这个命令做一下修改:

 sudo ./elastic-agent install --certificate-authorities=/home/liuxg/beats/ca.crt -f \\
 --fleet-server-es=https://192.168.0.4:9200 \\
 --fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmVyL3Rva2VuLTE2MzA3MjIxNTYxNTQ6em5DTkFJZEZSYTJIMXkxbkNWZ0dMdw \\
  --fleet-server-policy=e0f064b0-0d23-11ec-8830-cb272d7fa437

在上面,我对命令添加了 --certificate-authorities=/home/liuxg/beats/ca.crt。你需要根据自己的证书路径做相应的调整。

针对我的情况,我有使用自签名的证书。我们需要参考链接  Fleet User Guide

在运行之前,我们把证书拷贝到 Ubuntu 机器的如下地址:

sudo cp ca.crt /usr/local/share/ca-certificates

然后,我们使用如下的方法来进行更新:

sudo update-ca-certificates
sudo update-ca-certificates
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

Adding debian:ca.pem
done.
done.

接着,我们使用如下的命令来运行 elastic-agent:

sudo ./elastic-agent install --certificate-authorities=/home/liuxg/beats/ca.crt -f \\
 --fleet-server-es=https://192.168.0.4:9200 \\
 --fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmVyL3Rva2VuLTE2MzA3MjIxNTYxNTQ6em5DTkFJZEZSYTJIMXkxbkNWZ0dMdw \\
  --fleet-server-policy=e0f064b0-0d23-11ec-8830-cb272d7fa437

或者:

sudo ./elastic-agent install -a /home/liuxg/beats/ca.crt -f \\
 --fleet-server-es=https://192.168.0.4:9200 \\
 --fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmVyL3Rva2VuLTE2MzA3MjIxNTYxNTQ6em5DTkFJZEZSYTJIMXkxbkNWZ0dMdw \\
  --fleet-server-policy=e0f064b0-0d23-11ec-8830-cb272d7fa437

更多关于 Elastic Agent 的 install 参数,请参阅官方文档。有关 elastic-agent 运行的 logs 可以在如下的地址找到(在 Ubuntu 机器上)

/opt/Elastic/Agent/data/elastic-agent-{xxxxxx}/logs

 当我们运行完上面的命令后,我们可以再次查看 Agents:

 再过一会儿:

当我们看到上面的状态从 updating 变为 Healthy,它表明我们的安装时成功的。

我们也可以通过如下的方式来查看 fleet server 是否已经正在运行:

netstat -nat | grep :8220

我们可以通过如下的方式来查看 elastic-agent 的状态:

更多 troubleshooting 方面知识可以参阅官方链接

我们接下来查看它的 data streams:

 

查看数据

我们在 Discover 上查看数据。我查找 logs-* 索引模式。 

我们也可以找到相关的 Nginx 的 Dashboard:

 也许你已经看出来了。在以前,如果我们使用 Filebeat 来收集日志的话,我们可以看到 Filebeat 的日志。现在它变成了 [Logs Nginx] Overview:

 我们可以通过如下的方式来查看已经收到的日志信息:

GET logs-nginx.access-*/_search

通过使用 Fleet,一个好处是通过上面的 nginx 相关的 data stream 的搜索,它可以帮我们限定更加小的范围进行搜索,从而提高搜索的效率。如果是像之前的那种搜索 filebeat-*,我们可能会工作于一个比较大的索引,从而增加搜索的开支。同样,如果我们搜索 error,我们可以使用如下的方式来进行搜索:

GET logs-nginx.error-*/_search

更多关于 data stream 的命名方式,请参阅文章 “Elastic data stream 命名方案介绍”。

以上是关于Observability:运用 Fleet 来轻松地导入 Nginx 日志及指标的主要内容,如果未能解决你的问题,请参考以下文章

Observability:在生产环境中配置 Fleet Server 和 Elastic Agent 之间的安全

Observability:如何在最新的 Elastic Stack 中使用 Fleet 摄入 system 日志及指标

Observability:如何使用 Elastic Agents 把微服务的数据摄入到 Elasticsearch 中

OpenTelemetry项目中的Observability

Observability:在 Elastic Observability 部署中添加免费和开放的 Elastic APM

Observability:在 Elastic Observability 部署中添加免费和开放的 Elastic APM