安装独立的 Elastic Agents 并采集数据 – Elastic Stack 8.0
2022年4月12日 | by mebius
注意:在独立模式(standalone)下运行 Elastic Agent 是一个高级用例。 文档不完整,还不成熟。 如果可能,我们建议使用 fleet 管理的代理而不是独立模式。
要在独立模式下运行 Elastic Agent,请在你要监控的每台主机上安装该代理,并在安装它的系统上本地手动配置该代理。 你负责管理和升级代理。 仅建议高级用户使用此方法。
我们建议尽可能使用 Fleet-managed Elastic Agents,因为它使你的代理程序的管理和升级变得相当容易。你可以阅读我之前的文章 “Observability:使用 Elastic Agent 来摄入日志及指标 – Elastic Stack 8.0”。
重要:独立代理无法自动升级到新的集成包版本。 在 Kibana 中升级集成时,你需要手动更新独立策略。
在下面的展示中,我将使用 Elastic Stack 8.0 来进行展示。
安装
我们首先需要在我们的主机上安装并运行 Elastic Agent。针对不同的操作系统,我们需要不同的安装方法。我们需要访问网站Download Elastic Agent Free | Elastic 来下载 Elastic Agent。
- macOS
curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.0.1-darwin-x86_64.tar.gz
tar xzvf elastic-agent-8.0.1-darwin-x86_64.tar.gz
- Linux
curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.0.1-linux-x86_64.tar.gz
tar xzvf elastic-agent-8.0.1-linux-x86_64.tar.gz
- Windows
# PowerShell 5.0+
wget https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.0.1-windows-x86_64.zip -OutFile elastic-agent-8.0.1-windows-x86_64.zip
Expand-Archive .elastic-agent-8.0.1-windows-x86_64.zip
- DEB
curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.0.1-amd64.deb
sudo dpkg -i elastic-agent-8.0.1-amd64.deb
为了简化升级到 Elastic Agent 的未来版本,我们建议你使用 tarball 分发版而不是 DEB 分发版。
- RPM
curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.0.1-x86_64.rpm
sudo rpm -vi elastic-agent-8.0.1-x86_64.rpm
为了简化升级到 Elastic Agent 的未来版本,我们建议你使用 tarball 分发而不是 RPM 分发。
在下面的展示中,我将使用 maoOS来进行展示。在进行展示之前,你需要安装文章 “Elastic Stack 8.0 安装 – 保护你的 Elastic Stack 现在比以往任何时候都简单” 来安装好自己的 Elasticsearch 及 Kibana。Elasticsearch,Kibana 及 Elastic Agent 都将被安装于 macOS 机器上。
配置
为了能够使得 standalone Elastic Agent 能够正常工作,我们必须配置 elastic-agent.yml 文件。这个文件可以在 Elastic Agent 的安装目录中找到:
$ pwd
/Users/liuxg/elastic/fleet/elastic-agent-8.0.1-darwin-x86_64
$ ls
LICENSE.txt data elastic-agent.yml
NOTICE.txt elastic-agent fleet.yml
README.md elastic-agent.reference.yml fleet.yml.lock
要快速入门并避免错误,请使用 Kibana 创建和下载独立的配置文件,而不是尝试手动构建它。
创建 standalone Elastic Agent 策略
要快速入门,请使用 Kibana 将集成添加到代理策略,然后下载该策略以用作独立 Elastic Agent 策略的起点。 这种方法可以节省时间,不易出错,并使用大量手动添加繁琐的细节来填充策略。 此外,在启动 Elastic Agent 之前,在 Kibana 中添加集成会加载所需的资源,例如索引模板和摄取管道。
我们首先来创建一个叫做 Standalone 的策略。这个名称可以是你喜欢的任何名称。
这样我们就创建了一个叫做 Standalone 的 policy。点击上面的链接:
我们接着为这个 policy 添加想要的 integration:
我们首先找到在 macOS 上 access.log 及 error.log 的位置:
$ nginx -help
nginx version: nginx/1.21.6
Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]
[-e filename] [-c filename] [-g directives]
Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-T : test configuration, dump it and exit
-q : suppress non-error messagetgcodes during configuration testing
-s signal : send signal to a master process: stop, quittgcode, reopen, reload
-p prefix : set prefix path (default: /usr/local/Cellar/nginx/1.21.6/)
-e filename : set error log file (default: /usr/local/var/log/nginx/error.log)
-c filename : set configuration file (default: /usr/local/etc/nginx/nginx.conf)
-g directives : set global directives out of configuration file
上面显示了 nginx 的安装目录。我们进入到该文件所在的目录:
$ pwd
/usr/local/Cellar/nginx/1.21.6
$ ls
CHANGES bin logs
INSTALL_RECEIPT.json homebrew.mxcl.nginx.plist share
LICENSE homebrew.nginx.service
README html
$ cd logs
$ ls
access.log error.log host.access.log nginx.pid
从上面,我们可以看到 host.access.log 及 error.log 这两个文件。接下来我们将使用这些信息来配置 Nginx 的 integration。点击上面图中的 Add Nginx:
我们需要修改上面的默认的配置。把 host.access.log 及 error.log 的位置信息填入,并保存。
上面的 Go to download page 就是我们在上面安装一节中显示下载 Elastic Agent 的页面。我们接着向下滚动:
点击上面的 Download Policy:
上面显示下载的 policy。它的名字和之前 Elastic Agent 安装目录中一个配置文件 elastic-agent.yml 是一样的。我们把上面的 elastic-agent.yml 文件拷贝到 Elastic Agent 的安装目录中,并覆盖在 Elastic Agent 安装目录中原有的 elastic-agent.yml 文件:
$ pwd
/Users/liuxg/elastic/fleet/elastic-agent-8.0.1-darwin-x86_64
$ ls
LICENSE.txt data elastic-agent.yml
NOTICE.txt elastic-agent fleet.yml
README.md elastic-agent.reference.yml fleet.yml.lock
请注意上面的 elastic-agent.yml 文件是我们下载的文件,而不是之前在安装 Elastic Agent 时留下来的文件。
授予独立 Elastic Agents 访问 Elasticsearch
你可以使用 API 密钥或用户凭证来授予独立 Elastic Agent 访问 Elasticsearch 资源的权限。 将日志、指标、跟踪和合成数据发送到 Elasticsearch 需要以下最低权限:
- monitor 集群权限
- 对 logs-*-*、metrics-*-*、traces-*-* 和 synthetics-*-* 的 auto_configure 和 create_doc 索引权限。
建议你使用 API 密钥来避免在配置文件中暴露用户名和密码。
你可以将 API 密钥设置为在特定时间过期,并且可以显式地使它们失效。 任何具有 manage_api_key 或 manage_own_api_key 集群权限的用户都可以创建 API 密钥。
出于安全原因,我们建议每个 Elastic Agent 使用唯一的 API 密钥。 你可以根据需要为每个用户创建任意数量的 API 密钥。
要为 Elastic Agent 创建 API 密钥:
我们在上面的 Restricted privileges 的编辑框中输入如下的内容:
{
"standalone_agent": {
"cluster": [
"monitor"
],
"indices": [
{
"names": [
"logs-*-*", "metrics-*-*", "traces-*-*", "synthetics-*-*"
],
"privileges": [
"auto_configure", "create_doc"
]
}
]
}
}
我们需要根据自己的应用场景来调整上面的 names 列表。如果你不使用 APM 或者 synthetics,那么你可以从列表中删除”traces-*-*” 及”synthetics-*-*”。
要设置 API 密钥的过期日期,请选择过期时间并输入 API 密钥的生命周期(以天为单位)。针对我们的情况,我们不设置这个参数。
点击上面的 Create API key 按钮:
你将看到一条消息,指示该密钥已创建,以及已编码的密钥。 默认情况下,API 密钥是 Base64 编码的,但这不适用于 Elastic Agent。点击上面的选择框,把 Base64 修改为 Beats:
我们把上面的 API key 拷贝下来,这是因为以后我们在这个页面中再也看不到这个 key 了。
我们接下来修改 Elastic Agent 安装目录中的 elastic-agent.yml 文件:
这样我们就完成了 policy 的配置。
创建 standalone 角色
尽管建议你使用 API 密钥而不是用户名和密码来访问 Elasticsearch,但吧可以创建具有所需权限的角色,将其分配给用户,并在 elastic-agent.yml 文件中指定用户的凭据。
- 在 Kibana 中,转到 Stack Management > Roles。
- 单击 Create role 并输入角色的名称。
- 在Cluster privileges中,输入 monitor。
- 在 Index privileges中,输入:
- 在 indices项中,输入
logs-*-*
,metrics-*-*
, nginx-*-*,traces-*-*
andsynthetics-*-*
- 在 Privileges 项中 填入auto_configure 及create_doc
- 创建角色并将其分配给用户。
- 要使用这些凭据,请在 elastic-agent.yml 文件中设置用户名和密码:
[...]
outputs:
default:
type: elasticsearch
hosts:
- 'https://da4e3a6298c14a6683e6064ebfve9ace.us-central1.gcp.cloud.es.io:443'
username: ES_USERNAME
password: ES_PASSWORD
[...]
注意:出于安全原因,请指定具有此处描述的最低权限的用户。 建议您不要使用 elastic 超级用户
创建 assets
这些 assets 包括 dashboard 及 ingest pipelines。我们可以通过 Kibana 来创建这些 assets。如果你使用 Kibana 生成独立配置,则会自动设置 assets。 否则,你需要安装它们。 有关更多信息,请参阅查看 Elastic Agent 集成 asset 和安装集成 assets。
安装并启动 Elastic Agent 作为一个服务
在 Elastic Agent 安装目录中,运行以下命令来安装 Elastic Agent 并将其作为服务启动。
注意:在 macOS、Linux(tar 包)和 Windows 上,运行 install 命令将 Elastic Agent 安装为托管服务并启动该服务。 DEB 和 RPM 包包含一个用于 Linux 系统的服务单元 systemd,因此只需启用然后启动该服务。
- macOS
sudo ./elastic-agent install
- Linux
sudo ./elastic-agent install
- Windows
.elastic-agent.exe install
以管理员身份打开 PowerShell 提示符(右键单击 PowerShell 图标并选择以管理员身份运行)。
- DEB
sudo systemctl enable elastic-agent
sudo systemctl start elastic-agent
- RPM
sudo systemctl enable elastic-agent
sudo systemctl start elastic-agent
针对我的情况,我在 macOS下运行:
$ sudo ./elastic-agent install -i
Elastic Agent will be installed at /Library/Elastic/Agent and will run as a service. Do you want to continue? [Y/n]:Y
Do you want to enroll this Agent into Fleet? [Y/n]:n
在上面我们使用 –insecure 或 -i 选项,这是因为我们的 Elasticsearch 使用自签名证书。
我们可以查看 Elastic Agent 服务的状态:
$ sudo elastic-agent status
Password:
Status: HEALTHY
Message: (no message)
Applications:
* filebeat (HEALTHY)
Running
* metricbeat (HEALTHY)
Running
* filebeat_monitoring (tgcodeHEALTHY)
Running
* metricbeat_monitoring (HEALTHY)
Running
从上面的输出中,我们可以看出来 elastic-agent 目前正常运行。
我们接着回到 Fleet 界面的 data stream 进行查看:
我们可以看到好几个有关 nginx 的 dataset。
当然,我们也可以选择上面的 Metrics Nginx。这里就不再累述了。