【Elastic Engineering】Observability:使用 Elastic Agent 来摄入日志及指标 - Elastic Stack 8.0

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 如果你已经安装过最近的 Elastic Stack 的话,你可能已经发现 Beats 已经不是推荐的数据摄入方式,取而代之的是 Elastic Agent。

如果你已经安装过最近的 Elastic Stack 的话,你可能已经发现 Beats 已经不是推荐的数据摄入方式,取而代之的是 Elastic Agent。我们可以看一下如下的图:



上图展示的是 Elastic Stack 整体的栈的结构图。我们会发现其中最重要的一个变化是使用了 Integrations 而不是之前的 Beats 和 Logstash,尽管它们仍然适用。也就是推荐的办法是使用 Integration 来摄入数据。


在今天的文章中,我们将介绍如何使用 Fleet 来设置 Elastic Agent 并摄入需要的数据。你将了解:


  • 配置 Fleet
  • 使用 Elastic Agent 来发送数据到 Elastic Stack
  • 监控整个公司的系统和服务的日志和指标


在今天的练习中,我将使用 Elastic Stack 8.0 来进行展示。我使用的测试环境如下:



我在 macOS 上安装 Elastic Stack 8.0,而在 Ubuntu OS 的机器上安装 Fleet server 及 Elastic Agent。


image.png


在 Elastic Stack 8.0 中使用 Elastic Agent 来摄入日志及指标


在 Elastic Stack 8.0 中使用 Elastic Agent 来摄入日志及指标_哔哩哔哩_bilibili


安装


在进行下面的练习之前,我们必须安装好 Elasticsearch 及 Kibana。我们可以参考之前的文章:



我们按照上面的要求进行安装 Elasticsearch 及 Kibana。为了能够让 fleet 正常工作,内置的 API service 必须启动。我们必须为 Elasticsearch 的配置文件

config/elasticsearch.yml 文件配置:


xpack.security.authc.api_key.enabled: true


配置完后,我们再重新启动 Elasticsearch。针对 Kibana,我们也需要做一个额外的配置。我们需要修改 config/kibana.yml 文件。在这个文件的最后面,添加如下的一行:


xpack.encryptedSavedObjects.encryptionKey: 'fhjskloppd678ehkdfdlliverpoolfcr'


如果你不想使用上面的这个设置,你可以使用如下的方式来获得:


./bin/kibana-encryption-keys generate



从上面的输出中,我们可以看出来,有三个输出的 key。我们可以把这三个同时拷贝,并添加到 config/kibana.yml 文件的后面。当然,我们也可以只拷贝其中的一个也可。我们再重新启动 Kibana。


这样我们对 Elasticsearch 及 Kibana 的配置就完成。 针对 Elastic Stack 8.0 以前的版本安装,请阅读我之前的文章 “Observability:如何在最新的 Elastic Stack 中使用 Fleet 摄入 system 日志及指标”。

 

除此之外,Kibana 需要 Internet 连接才能从 Elastic Package Registry 下载集成包。 确保 Kibana 服务器可以连接到https://epr.elastic.co 的端口 443 上 。如果你的环境有网络流量限制,有一些方法可以解决此要求。 有关详细信息,请参阅气隙环境


目前,Fleet 只能被具有 superuser role 的用户所使用。


配置 Fleet


使用 Kibana 中的 Fleet 将日志、指标和安全数据导入 Elastic Stack。第一次使用 Fleet 时,你可能需要对其进行设置并添加 Fleet Server。在做配置之前,我们首先来查看一下有没有任何的 integration 被安装:




我们打开 Fleet 页面:





由于我们还没有指定 Fleet server 的地址,所以我们点击 Edit hosts:



在我们的配置中,我们想把 Fleet server 安装到 Ubuntu OS 的机器上,所以在上面的输入框中,我们输入 Ubuntu  OS 的地址 192.168.0.4。端口地址 8220 是默认的地址。点击上面的 Save and apply settings:




在上面,我们查看 Elasticsearch 的地址也是对的。



点击 Agents 选项卡:



对于我们自管型的不是中,有一个默认的 Default Fleet Server Policy。我们也可以创建一个自己的 Policy。


Fleet Server policy 到底是什么呢?


它是包含 Fleet Server 集成的 agent policy。 在自管型的集群中,第一次运行 Fleet 时会自动创建默认的  Fleet Server 策略。 如果你要部署一个自我管理的 Fleet Server 以使用我们托管的 Elasticsearch  服务,你必须明确创建一个包含 Fleet Server 集成的新代理策略




由于我们的 Ubuntu OS 系统是 Linux 64-bit,我们选择上面的选项进行下载。我们在 Ubuntu 机器的 terminal 中打入如下的命令:


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


liuxg@liuxgu:~/fleet$ curl -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.0.0-linux-x86_64.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  256M  100  256M    0     0  9775k      0  0:00:26  0:00:26 --:--:-- 9257k

 

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


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




点击上面的 Generate service token:



在上面的界面中,我们可以看到它一直显示 Waiting for Fleet Server to connect ...。我们点击上面的两个文档按钮以拷贝并保存 Service token。 我们在 Ubuntu 机器下运行上面的命令:



我们再次回到 Kibana 的界面:



上面显示 Fleet Server connected。它清楚地表明我们的 Fleet 已经成功地连接起来了。我们点击上面的 Continue:



上面显示我们的 Agents 已经成功地部署,并且它的状态是 Healthy 的。


如果你有多个 Fleet Server,建议你为每个 Fleet Server 创建一个唯一的 service token。你可以参考链接 elasticsearch-service-tokens来生成 service token。有关 Fleet Server 的更多信息,请参考链接


在上面,我们已经成功地为 Default Fleet Server policy 创建了一个 Agent。它安装了 Fleet  Server。这个是必须的步骤,一个 Fleet Server 可以管理许多的 Agents。有关 Fleet 的架构更多信息,请参阅文章 “Observability:运用 Fleet 来轻松地导入 Nginx 日志及指标”。


添加 Elastic Agent 到 Fleet


Elastic Agent 是一个单一的统一代理,你可以将其部署到主机或容器以收集数据并将其发送到 Elastic Stack。 在后台,Elastic Agent 运行你的配置所需的 Beats shippers 或 Elastic Endpoint。


要将日志和指标发送到 Elastic Stack。你首先要在那个机器上下载 Elastic Agent,并解压缩:


  • macOS


curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.0.0-darwin-x86_64.tar.gz
tar xzvf elastic-agent-8.0.0-darwin-x86_64.tar.gz


  • Linux OS


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


  • Windows


# PowerShell 5.0+
wget https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.0.0-windows-x86_64.zip -OutFile elastic-agent-8.0.0-windows-x86_64.zip
Expand-Archive .\elastic-agent-8.0.0-windows-x86_64.zip


  • DEB


curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.0.0-amd64.deb
sudo dpkg -i elastic-agent-8.0.0-amd64.deb


  • RPM


curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.0.0-x86_64.rpm
sudo rpm -vi elastic-agent-8.0.0-x86_64.rpm


更多关于 Elastic Agent 的下载信息,请参阅官方链接 Download Elastic Agent


针对我们的情况,我们需要手机的是 Ubuntu OS 上的日志及指标,所以我们下载的是 Linux 的版本。在我们之前安装 Fleet Server 时已经解压缩,并运行了,所以我们并不需要做任何其它特别的。


我们接下来添加 Agent:




在上面,我们选择 Default policy,它目前含有一个叫做 System 的 integration。你也可以创建自己的 policy。选择 Default policy 会让我们的练习进展更快。我们按照 Go to download page 去下载相应的 Agent。这个和我们之前的 Fleet Server 是一样的页面。这里就不再累述了。



我们点击上面的文档按钮来进行注册:


sudo ./elastic-agent install --url=http://192.168.0.4:8220 --enrollment-token=amw2a0FIOEJnUDdoZ29vRmJBVkY6TDRCZ3liNnpTSFNZdENnLXFrOExSZw==


请注意,在上面 http://192.168.0.4:8220 是我们的 Fleet Server 的地址,也就是说 Agent 的注册是直接发向 Fleet Server 的。当然如果你是其它的平台,你需要在上面的页面进行选择。


运行上面的命令:



因为之前,我们在安装 Fleet Server 的时候,已经按照好 Elastic Agent 了,所以会出现上面的错误信息。如果你还有其它的 Linux 机器,你可以通过上面的方法来注册你的 Elastic Agent。


现在,我把我的一台树莓派的 Ubuntu OS 机器开起来,我们使用如下的方法来进行注册:


liuxg@liuxgarm:~/fleet$ curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.0.0-linux-arm64.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  241M  100  241M    0     0  5615k      0  0:00:44  0:00:44 --:--:-- 5953k
liuxg@liuxgarm:~/fleet$ ls
elastic-agent-8.0.0-linux-arm64.tar.gz
liuxg@liuxgarm:~/fleet$ tar xzf elastic-agent-8.0.0-linux-arm64.tar.gz 
liuxg@liuxgarm:~/fleet$ cd elastic-agent-8.0.0-linux-arm64/
liuxg@liuxgarm:~/fleet/elastic-agent-8.0.0-linux-arm64$ sudo ./elastic-agent install --url=http://192.168.0.4:8220 --enrollment-token=amw2a0FIOEJnUDdoZ29vRmJBVkY6TDRCZ3liNnpTSFNZdENnLXFrOExSZw==
[sudo] password for liuxg: 
Elastic Agent will be installed at /opt/Elastic/Agent and will run as a service. Do you want to continue? [Y/n]:Y
Error: Error: connection to fleet-server is insecure, strongly recommended to use a secure connection (override with --insecure)
For help, please see our troubleshooting guide at https://www.elastic.co/guide/en/fleet/8.0/fleet-troubleshooting.html
Error: enroll command failed with exit code: 1
For help, please see our troubleshooting guide at https://www.elastic.co/guide/en/fleet/8.0/fleet-troubleshooting.html
liuxg@liuxgarm:~/fleet/elastic-agent-8.0.0-linux-arm64$ sudo ./elastic-agent install --url=http://192.168.0.4:8220 --enrollment-token=amw2a0FIOEJnUDdoZ29vRmJBVkY6TDRCZ3liNnpTSFNZdENnLXFrOExSZw== --insecure
Elastic Agent will be installed at /opt/Elastic/Agent and will run as a service. Do you want to continue? [Y/n]:Y
{"log.level":"warn","@timestamp":"2022-02-16T16:34:20.428+0800","log.logger":"tls","log.origin":{"file.name":"tlscommon/tls_config.go","file.line":105},"message":"SSL/TLS verifications disabled.","ecs.version":"1.6.0"}
{"log.level":"info","@timestamp":"2022-02-16T16:34:20.544+0800","log.origin":{"file.name":"cmd/enroll_cmd.go","file.line":456},"message":"Starting enrollment to URL: http://192.168.0.4:8220/","ecs.version":"1.6.0"}
{"log.level":"info","@timestamp":"2022-02-16T16:34:21.501+0800","log.origin":{"file.name":"cmd/enroll_cmd.go","file.line":256},"message":"Successfully triggered restart on running Elastic Agent.","ecs.version":"1.6.0"}
Successfully enrolled the Elastic Agent.
Elastic Agent has been successfully installed.


如上所示,因为我们尝试去注册一个使用自签名证书的 Fleet Server,在上面我们出现了一个错误。我在上面的命令后面添加一个选项 --insecure:


sudo ./elastic-agent install --url=http://192.168.0.4:8220 --enrollment-token=amw2a0FIOEJnUDdoZ29vRmJBVkY6TDRCZ3liNnpTSFNZdENnLXFrOExSZw== --insecure


那么我们这次运行是成功的。我们回到 Kibana 的界面:



这个时候,我们看到了一个新增加的叫做 liuxgarm 的 agent。在上面的两个 agent 中,Fleet server 是运行于  liuxgu 机器上的。如过我们想收集这个机器的日志及指标的话,我们需要在 Default Fleet Server policy 中去添加  System integration。









这我们的 liuxgu agent 就可以收集 system 指标及日志了。


我们点击 Data streams:








我们可以看到两个机器都有日志信息。








相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
电子书阅读分享《Elasticsearch全观测技术解析与应用(构建日志、指标、APM统一观测平台)》
电子书阅读分享《Elasticsearch全观测技术解析与应用(构建日志、指标、APM统一观测平台)》
|
1月前
|
运维 监控 Cloud Native
一行代码都不改,Golang 应用链路指标日志全知道
本文将通过阿里云开源的 Golang Agent,帮助用户实现“一行代码都不改”就能获取到应用产生的各种观测数据,同时提升运维团队和研发团队的幸福感。
|
7月前
|
数据采集 监控 安全
改进 Elastic Agent 和 Beats 中的事件队列
【6月更文挑战第9天】Elastic Agent和Beats在数据采集中的关键组件是事件队列,它影响系统性能和可靠性。面对高并发和大数据量,传统队列可能存在问题。优化包括:选择高效数据结构(如环形队列)、管理队列容量和溢出处理、确保多线程安全以及实时监控和调优。示例代码展示了一个基础事件队列的实现。通过综合优化,可提升数据处理效率,为数据分析和监控提供支持。随着技术发展,事件队列的改进将持续进行。
64 9
|
3月前
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
66 2
|
5月前
【Azure 云服务】Azure Cloud Service 为 Web Role(IIS Host)增加自定义字段 (把HTTP Request Header中的User-Agent字段增加到IIS输出日志中)
【Azure 云服务】Azure Cloud Service 为 Web Role(IIS Host)增加自定义字段 (把HTTP Request Header中的User-Agent字段增加到IIS输出日志中)
|
5月前
|
监控
【应用程序见解 Application Insights】使用Azure Monitor Application Insights Agent获取Azure VM中监控数据及IIS请求指标等信息
【应用程序见解 Application Insights】使用Azure Monitor Application Insights Agent获取Azure VM中监控数据及IIS请求指标等信息
|
6月前
|
存储 弹性计算 运维
可观测性体系问题之Process Layer在ECS稳定性平台中的工作如何解决
可观测性体系问题之Process Layer在ECS稳定性平台中的工作如何解决
48 0
|
弹性计算 监控 应用服务中间件
使用 Fleet 管理 Elastic Agent 监控应用
本场景主要介绍了如何使用 Fleet 集中管理 Elastic Agent ,并对主机的指标,日志,服务等进行监控。
|
8月前
|
存储 SQL 数据采集
通过定时SQL提取阿里云API网关访问日志指标
背景阿里云API网关服务提供API托管服务,提供了强大的适配和集成能力,可以将各种不同的业务系统API实现统一管理。API网关同时支持将API访问日志一键存储到日志服务,通过日志服务强大的查询分析能力,用户可以针对访问日志自定义计算多种指标,监测服务运行情况。继而通过定时SQL将结果指标直接存储到时...
通过定时SQL提取阿里云API网关访问日志指标
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
Gemini 2.0:谷歌推出的原生多模态输入输出 + Agent 为核心的 AI 模型
谷歌最新推出的Gemini 2.0是一款原生多模态输入输出的AI模型,以Agent技术为核心,支持多种数据类型的输入与输出,具备强大的性能和多语言音频输出能力。本文将详细介绍Gemini 2.0的主要功能、技术原理及其在多个领域的应用场景。
213 20
Gemini 2.0:谷歌推出的原生多模态输入输出 + Agent 为核心的 AI 模型

热门文章

最新文章