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

Observability:运用 Fleet 来轻松地导入 Nginx 日志及指标在我之前的文章: Observability:使用ElasticAgent和IngestManager简化数据导入(一) Observability:使用ElasticAgent和IngestManager简化数据导入(二) 我有讲到如何使用IngestManager简化数据输入。今天我重新看了一下界面确实变了很多,这就是为什么实验版本的功能一直在演化中。在今天的文章中,我将基于7.13的版本如何使用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 日志及指标

在 7.13 之前是这样的一种架构:

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

在 7.13 及之后是这样的一种架构: 

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

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

Observability:运用 Fleet 来轻松地导入 Nginx 日志及指标
以 agent 为基础的数据摄入架构

通过添加 Fleet server,我们可以得到如下的好处:

  • Scale:在之前的架构中,我们如果有1000个 agents,那么在 Kibana 中将会有1000个显示的 agent。通过改造之后,我们的 Kibana 将只会和 Fleet Server 进行交互。它可以支持更多的 agents。
  • Secuirty:它可以使得我们使用较少的访问权限。因为 Kibana 只需要和 Fleet Server 进行交互,Fleet Server 相比较而言,设计较为简单,而且它具有更少的访问权限。
  • More flexibility:给我们的部署带来更多的灵活性。你可以把你的 Fleet Server 安装在你的 agents 附近,而不需要 Kibana 安装于你的数据采集附近。

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 通信主机运行,但你可以选择将其用于自我管理集群上的数据收集。

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

在目前的设计中,在 data plane 里,Elastic Agent 所管理的每个 Beats 都会和 Elasticsearch 建立一个连接。这在很多的情况下,并不是最理想的。在未来的设计中,Elastic Agent 会包含一些 Collectors 收集数据,并传输到一个 shipper。从某种意义上讲,这和最初的 Beats 的设计思想还是蛮像的,不过 Elastic Agent 可以同时管理多个 Beats 的数据收集。

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

 

Elastic Agent –  supervisor

Elastic Agent 就本质来说就是一个主管。它和其它的软件栈进行交互:

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

在上面,grpc 是一个高性能、开源的通用 RPC (Remote Procedure Call )框架。Elastic Agent 通过 grpc 管理及调用 Endpoint, Metricbeat,Filebeat 等。

另外一个需要注意的是在 Fleet 出现之前,我们通过 Beats,Logstash 或 Fluentd 收集上来的数据是这样的:

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

 在这之前,针对一些数据类型,比如 NGINX,它可能被不同的技术来进行收集,比如:

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

这样导致有关 NGINX 的信息分布于不同的索引之中,依赖于采集的技术不同。这对于我们分析有不利的一面。Elastic 在最新版本里的设计思想是无论 NGINX 是采用什么样的技术采集的,NGINX 的数据应该永远看起来是一样的。那么我们该如何实现这个呢?

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

我们通过 Elastic Common Schema 及 Data stream naming scheme 来实现上述目的。有关 Data stream naming scheme 在我之前的文章 “Elastic data stream 命名方案介绍” 里有介绍。

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

  

Elastic Agent 注册

  • Fleet Server host + enrollment key
  • Fleet Server 验证 enrollment key
  • Fleet Server 创建两个 API keys
    • 和 Fleet Server 的 Authentication key
    • 和 Elasticsearch 的 数据摄入 key 
  • Elastic Agent 报到(check in)
  • 从 Fleet Server 收到 policy
  • Elastic Agent 开始启动 subprocesses
    • Subprocesses 开始发送数据至 Elasticsearch

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

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

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

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

在今天的文章中,我将基于 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:

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

Nginx 及 Nodejs 

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

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

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

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

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

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

安装 Elastic Agent

我打开 Kibana:

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

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

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

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

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

我们接下来选择 Fleet:

Observability:运用 Fleet 来轻松地导入 Nginx 日志及指标 如上所示,我们可以看到已有的 policy。在通常的情况下,我们可以直接使用 Default Policy。在今天的练习中,我们来创建一个属于自己的 policy:

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

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

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

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

Observability:运用 Fleet 来轻松地导入 Nginx 日志及指标在这个 policy 里面,它已经包含了一个叫做 system-1 的 integration。我们可以点击 Edit integration 来查看这个 integration 里到底包含一些啥东东:

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

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

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

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

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

 点击上面的 Save integration 按钮:

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

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

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

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

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

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

Observability:运用 Fleet 来轻松地导入 Nginx 日志及指标 接下来,我们对 Fleet 进行配置:

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

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

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

 我们回到 Fleet 的首页:

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

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

我们点击 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:

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

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

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

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

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

 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

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

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

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

 再过一会儿:

Observability:运用 Fleet 来轻松地导入 Nginx 日志及指标当我们看到上面的状态从 updating 变为 Healthy,它表明我们的安装时成功的。

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

netstat -nat | grep :8220

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

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

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

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

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

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

查看数据

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

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

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

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

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

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

Observability:运用 Fleet 来轻松地导入 Nginx 日志及指标 我们可以通过如下的方式来查看已经收到的日志信息:

GET logs-nginx.access-*/_search

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

GET logs-nginx.error-*/_search

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/132384.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月10日 下午9:16
下一篇 2022年6月10日 下午9:16


相关推荐

  • Shell内值命令之exit「建议收藏」

    Shell内值命令之exit「建议收藏」Shell内值命令之exit介绍: exit用于退出当前shell环境进程结束运行,并且可以返回一个状态码.一般使用$?可以获取状态码.语法: 正确退出语法exit#默认返回状态码0,一般代表命令执行成功 错误退出语法exit非0数字#数字建议的范围0-255一般代表命令执行失败exit应用场景 1.结束当前shell进程 2.当shell进程执行出错退出时,可以返回不同的状态值代表不同的错误. 比如执行一个脚本文件里面操作一个文件时,可以返回1表示文件不存在,2表示

    2022年10月9日
    2
  • pyqt5环境配置_pyqt5 has no attribute version

    pyqt5环境配置_pyqt5 has no attribute version前言小编从c++qt5入坑,再到PyQt5,发现这个pycharm与PyQt5的配置也比较复杂(相对于c++qt5)这篇文章就记录下自己怎么配置成功的,万一以后需要用到,就可以直接查了。文中所用的软件版本PyCharm2021.1.3(ProfessionalEdition),如果有出入,注意变通其他:网上现存的教程安装的都是pyqt5-tools,而且他们的软件界面也不一样。配置目录如下所示,会配置3个:QTdesigner:方便首次新建一个不存在的.ui文件PyUIC:

    2022年8月27日
    5
  • Kafka集群配置

    Kafka集群配置之前一篇博文简单讲述了zookeeper和kafka的单机配置,详细可以参考《Linux(CentOS)中常用软件安装,使用及异常——Zookeeper,Kafka》。本文只要讲述Kafka集群的配置事项,包括zookeeper集群的配置。本文讲述的前提是kafka和zookeeper在单机情况下已正确安装和配置。如有疑问,可以参考《Linux(CentOS)中常用软件安装,使用及异常——Z…

    2022年4月25日
    65
  • 猿创征文|深度学习基于前馈神经网络完成鸢尾花分类

    猿创征文|深度学习基于前馈神经网络完成鸢尾花分类在梯度下降法中 目标函数是整个训练集上的风险函数 这种方式称为批量梯度下降法 BatchGradien BGD 批量梯度下降法在每次迭代时需要计算每个样本上损失函数的梯度并求和 当训练集中的样本数量 NN 很大时 空间复杂度比较高 每次迭代的计算开销也很大 为了减少每次迭代的计算复杂度 我们可以在每次迭代时只采集一小部分样本 计算在这组样本上损失函数的梯度并更新参数 这种优化方式称为小批量梯度下降法 Mini BatchGradien Mini BatchGD

    2026年3月26日
    2
  • Java中如何将int 类型转换为 Long类型

    Java中如何将int 类型转换为 Long类型版权声明:本文由施勇原创,转载请注明作者和出处!   https://blog.csdn.net/shiyong1949/article/details/52687955Longl=(Long)3;1很多同学可能会用上面的方法将int类型转换为Long类型,但事实上这样是不可行的。因为Long是包装类,而int是值类型数据,两者是不能这样强转的。longl=(long)3;…

    2022年5月3日
    2.0K
  • 数组对象转json格式[通俗易懂]

    数组对象转json格式[通俗易懂]1、数组转化成JSON对象后,key值是索引,value是数组对应的值。//数组也可以转化成JSON对象varjStr3="[[10,20,30],40,50,60]";varj3=JSON.parse(jStr3);for(letkeyinj3){console.log(‘key:’,key);}//key…

    2026年1月19日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号