6-1-elastic aget说明
1. 基础概念
1.1 elastic agent
Elastic Agent是一种向主机添加日志、指标和其他类型数据的监控的单一、统一的方法。 它还可以保护主机免受安全威胁、从操作系统查询数据、从远程服务或硬件转发数据等等。 单个代理可以更轻松、更快速地在您的基础架构中部署监控。 每个代理都有一个可以更新的策略 , 以添加新数据源、安全保护等的集成。 如下图所示 , Elastic Agent可以监控部署它的主机 , 并且可以从无法直接部署的远程服务和硬件收集和转发数据。

1.2 Fleet
Fleet是一个组件 , 用于在你的环境中管理 Elastic Agent 配置。 Fleet 由两部分组成:
Fleet UI是一个带有用户界面的Kibana应用程序 , 供用户载入和配置代理、管理载入数据以及管理整个环境中的代理。Fleet Server是一个后端组件 , 你环境中的弹性代理可以连接到该组件 , 以检索代理策略、更新和管理命令。
Fleet Server是Elastic Agent的一种特殊模式 , 可以与你的Elastic Stack部署一起集中部署。 你可以在负载平衡设置中配置 Fleet Server的多个实例 , 以扩展性能并增加可用性。Fleet Server需要连接到支持 Elasticsearch 集群才能运行。
涉及Elastic Agent 和 Fleet 的架构如下所示:

整个环境中的代理会定期与Fleet Server通信 , 以检索代理策略配置和管理命令。 Fleet Server与支持的 Elasticsearch 集群交互 , 为代理创建安全凭证、检索代理策略并保持状态。
Kibana 上的 Fleet UI 将代理策略存储在 Elasticsearch 上 , 管理用于数据载入的数据流的创建 , 并为正在使用的数据源加载索引模板和仪表板等工件。
根据代理策略的配置 , Elastic Agent 将数据直接发送到目标 Elasticsearch 集群(或其他受支持的输出 , 例如 Logstash 或 Kafka)以供摄取。
1.3 代理策略和集成
代理策略 , 也就是agent policy。集成为integration。代理策略是一个 YAML 文件 , 它定义代理将收集并发送到Elasticsearch(或其他受支持的目的地)的各种输入和设置。 当你在独立模式下使用 Elastic Agent 时 , 可以使用 /etc/elasticagent/elastic-agent.yml 文件配置策略。 当代理由 Fleet 管理时 , 策略会从 Elasticsearch 中检索并在代理启动时自动应用到代理。 Kibana 上的 Fleet 界面可用于创建和管理代理策略。 创建策略后 , 用户可以添加定义代理收集的数据源的集成。
在 7.13 之前是这样的一种架构:

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



通过添加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` 通信主机运行 , 但你可以选择将其用于自我管理集群上的数据收集。
2. 安装
2.1 elastic agent 安装
2.1.1 安装准备
安装Elasticsearch及 Kibana。为了能够让 fleet 正常工作 , 内置的 API service 必须启动。我们必须为 Elasticsearch 的配置文件 config/elasticsearch.yml 文件配置:
xpack.security.authc.api_key.enabled: true配置完后 , 我们再重新启动 Elasticsearch。针对 Kibana , 我们也需要做一个额外的配置。我们需要修改 kibana.yml 文件。在这个文件的最后面 , 添加如下的一行:
xpack.encryptedSavedObjects.encryptionKey: 'fhjskloppd678ehkdfdlliverpoolfcr'果你不想使用上面的这个设置 , 你可以使用如下的方式来获得:
./bin/kibana-encryption-keys generate
从上面的输出中 , 我们可以看出来 , 有三个输出的 key。我们可以把这三个同时拷贝 , 并添加到 kibana.yml文件的后面。当然 , 我们也可以只拷贝其中的一个也可。我们再重新启动 Kibana。
2.1.2 添加代理策略
点击代理策略页面


创建代理策略

点击刚创建好的代理策略

在这个
policy里面 , 它已经包含了一个叫做system-1的integration
点击编辑集成

可以看到这个集成里面主要由一些系统日志信息

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

搜索
nginx集成策略
点击添加nginx集成

点击保存并继续

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

最终我们的
nginx-demo policy是这样的:
2.1.3 配置fleet
在
fleet的设置中, 调整输出设备

点击添加
Fleet服务器


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

点击拷贝生成的命令

将拷贝的命令在具体的
fleet服务器上面运行命令curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.13.1-linux-x86_64.tar.gz tar xzvf elastic-agent-8.13.1-linux-x86_64.tar.gz cd elastic-agent-8.13.1-linux-x86_64 sudo ./elastic-agent install \ --fleet-server-es=<ELASTICSEARCH_HOST> \ --fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmVyL3Rva2VuLTE3MTM0NTk4Nzg2MDY6dWVqakxBeW5UYW1sVGVZaWN0c0p1Zw \ --fleet-server-policy=4fd2f8a8-15e5-499d-b9d4-cb1e1f28b46a \ --fleet-server-port=8220复制为以上内容。修改为以下命令内容:
curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.13.1-linux-x86_64.tar.gz tar xzvf elastic-agent-8.13.1-linux-x86_64.tar.gz cd elastic-agent-8.13.1-linux-x86_64 sudo ./elastic-agent install \ --fleet-server-es=https://192.168.71.30:9200 \ --fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmVyL3Rva2VuLTE3MTM0NTk4Nzg2MDY6dWVqakxBeW5UYW1sVGVZaWN0c0p1Zw \ --fleet-server-policy=4fd2f8a8-15e5-499d-b9d4-cb1e1f28b46a \ --fleet-server-port=8220 \ --certificate-authorities=/etc/ca.crt #这里因为elasticsearch中添加了内容ca.crt证书文件, 
这里需要注意, 官方推荐,在正式使用的过程中, 推荐使用证书的
https模式。但是需要证书
使用以下命令生成对应的证书文件,我们使用
CA来为Fleet Server生成证书:./bin/elasticsearch-certutil cert \ --name fleet-server \ --ca-cert /path/to/ca/ca.crt \ --ca-key /path/to/ca/ca.key \ --dns your.host.name.here \ --ip 192.0.2.1 \ --pem之后使用以下类型命令安装
curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.13.1-linux-x86_64.tar.gz tar xzvf elastic-agent-8.13.1-linux-x86_64.tar.gz cd elastic-agent-8.13.1-linux-x86_64 sudo ./elastic-agent install --url=https://192.168.71.46:8220 \ --fleet-server-es=https://192.168.71.29:9200 \ --fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmVyL3Rva2VuLTE3MTM1MjIyMjMxMTM6U1plMkk1ZWNTOS0yaXFzOF9Day1ZZw \ --fleet-server-policy=fleet-server-policy \ --certificate-authorities=/etc/ca.crt \ --fleet-server-es-ca=/etc/elasticsearch01.crt \ --fleet-server-cert=/etc/fleet.crt \ --fleet-server-cert-key=/etc/fleet.key \ --fleet-server-port=8220检查
fleet服务器中的端口
检查页面,可以看到已经配置正常

2.1.4 配置nginx服务
这里单独找一台服务器, 添加elasitc-agent服务
在
fleet页面点击添加代理

复制命令之后,在
nginx节点中运行复制的命令。复制的命令为如下内容curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.13.2-linux-x86_64.tar.gz tar xzvf elastic-agent-8.13.2-linux-x86_64.tar.gz cd elastic-agent-8.13.2-linux-x86_64 sudo ./elastic-agent install --url=https://192.168.71.47:8220 --enrollment-token=WHl4QThvNEJ1bU4tc3hUdHJSYW06WEdxaU96YnlUWlNxd0s1Z2M3S2JLQQ==这里因为是
https所以运行命令需要多添加
--insecurecurl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.13.2-linux-x86_64.tar.gz tar xzvf elastic-agent-8.13.2-linux-x86_64.tar.gz cd elastic-agent-8.13.2-linux-x86_64 sudo ./elastic-agent install --url=https://192.168.71.47:8220 --enrollment-token=WHl4QThvNEJ1bU4tc3hUdHJSYW06WEdxaU96YnlUWlNxd0s1Z2M3S2JLQQ== --insecure这里可以使用以下命令信任对应的根证书颁发机构
在运行之前,我们把证书拷贝到 Ubuntu 机器的如下地址: sudo cp ca.crt /usr/local/share/ca-certificates 然后,我们使用如下的方法来进行更新: sudo update-ca-certificates运行命令之后, 可以在页面看到已经添加了一台
elastic agent服务器
2.1.5 页面检查
dashboard页面

nginx页面

我们在
Discover上查看数据。我查找logs-*索引模式。
2.2 elastic-agent命令使用
Elastic Agent提供用于运行Elastic代理、管理Fleet Server和执行常见任务的命令。此处列出的命令适用于Fleet管理的和独立的Elastic Agent。
需要以root用户(或Windows上的管理员)身份登录才能运行此处描述的命令。安装并运行Elastic Agent服务后,请确保运行这些命令时不使用。以避免调用错误的二进制文件。
2.2.1 elastic-agent diagnostics
从Elastic Agent及其正在运行的组件/单元收集诊断信息。该命令生成的存档文件包含:
version.txt: 版本信息pre-config.yaml: 变量替换之前的预配置variables.yaml: 来自提供者的当前变量上下文computed-config.yaml: 变量替换后的配置components-expected.yaml: 预期计算组件模型components-actual.yaml: 运行时管理器报告的实际运行组件模型state.yaml: 所有运行组件的当前状态信息Components Directory: 每个运行组件的分析信息goroutine.txt:gooutine转储heap.txt: 活动对象的内存分配allocs.txt: 对过去的内存分配进行采样threadcreate.txt: 跟踪导致创建新的操作系统线程block.txt: 导致同步原语阻塞的堆栈跟踪mutex.txt: 争用互斥对象持有者的堆栈跟踪Unit Directory: 如果给定的单元提供特定的诊断,它将被放置在这里
2.2.2 elastic-agent enroll
在Fleet中注册elastic agent组件
使用此命令在Fleet中注册elastic agent,而无需将agent作为服务安装。如果您从DEB或RPM包中安装了Elastic Agent,并计划使用systemd命令启动和管理服务,则需要这样做。此命令对于在安装Elastic Agent之前测试它也很有用。
我们建议您以root用户身份运行enroll(或install)命令,因为有些集成需要root权限来收集敏感数据。该命令覆盖elastic-agent.yml文件。
此命令将elastic-agent注册到Fleet中;它不会启动代理。若要启动代理,请启动对应services服务(如果存在),或者使用run命令从终端启动代理。
fleet中注册elasticagentelastic-agent enroll --url <string> --enrollment-token <string> [--ca-sha256 <string>] [--certificate-authorities <string>] [--elastic-agent-cert <string>] [--elastic-agent-cert-key <string>] [--daemon-timeout <duration>] [--delay-enroll] [--force] [--header <strings>] [--help] [--insecure ] [--proxy-disabled] [--proxy-header <strings>] [--proxy-url <string>] [--staging <string>] [--tag <string>] [global-flags]curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.13.2-linux-x86_64.tar.gz tar xzvf elastic-agent-8.13.2-linux-x86_64.tar.gz cd elastic-agent-8.13.2-linux-x86_64 sudo ./elastic-agent install --url=https://192.168.71.46:8220 --enrollment-token=cFhGLThJNEJYdGZUTzI0QnBuSFE6bjlJbGluVmtUcWlpa25UMllWWHVuUQ==要在
Fleet中注册elasticagent并设置`Fleet Serverelastic-agent enroll --fleet-server-es <string> --fleet-server-service-token <string> [--fleet-server-service-token-path <string>] [--ca-sha256 <string>] [--certificate-authorities <string>] [--elastic-agent-cert <string>] [--elastic-agent-cert-key <string>] [--daemon-timeout <duration>] [--delay-enroll] [--fleet-server-cert <string>] [--fleet-server-cert-key <string>] [--fleet-server-cert-key-passphrase <string>] [--fleet-server-client-auth <string>] [--fleet-server-es-ca <string>] [--fleet-server-es-ca-trusted-fingerprint <string>] [--fleet-server-es-cert <string>] [--fleet-server-es-cert-key <string>] [--fleet-server-es-insecure] [--fleet-server-host <string>] [--fleet-server-insecure-http] [--fleet-server-policy <string>] [--fleet-server-port <uint16>] [--fleet-server-timeout <duration>] [--force] [--header <strings>] [--help] [--non-interactive] [--proxy-disabled] [--proxy-header <strings>] [--proxy-url <string>] [--staging <string>] [--tag <string>] [--url <string>] [global-flags]curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.13.1-linux-x86_64.tar.gz tar xzvf elastic-agent-8.13.1-linux-x86_64.tar.gz cd elastic-agent-8.13.1-linux-x86_64 sudo ./elastic-agent install --url=https://192.168.71.46:8220 \ --fleet-server-es=<ELASTICSEARCH_HOST> \ --fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmVyL3Rva2VuLTE3MTM3MTc3ODc4MTg6VjV1MC1VVVRRZ2kteW9qT2Q4Um1PQQ \ --fleet-server-policy=fleet-server-policy \ --certificate-authorities=<PATH_TO_CA> \ --fleet-server-es-ca=<PATH_TO_ES_CERT> \ --fleet-server-cert=<PATH_TO_FLEET_SERVER_CERT> \ --fleet-server-cert-key=<PATH_TO_FLEET_SERVER_CERT_KEY> \ --fleet-server-port=8220
2.2.3 elastic-agent install
在系统上永久安装Elastic Agent,并使用系统的服务管理器进行管理。安装完成后,代理将自动启动。在Linux(tar包)上 , 此命令需要类似systemd的系统和服务管理器
如果您是从DEB或RPM软件包安装Elastic Agent的,那么install命令将跳过安装本身,改为作为register命令的别名。请注意,使用DEB或RPM升级弹性代理后,需要重新启动弹性代理服务。 您必须以root用户(或Windows上的管理员)的身份运行此命令才能将文件写入正确的位置。此命令将覆盖代理目录中的elastic-agent.yml文件。 运行此命令的语法因平台而异。
要将
Elastic Agent作为服务安装,将其注册到Fleet中,并启动elastic-agent服务:elastic-agent install --url <string> --enrollment-token <string> [--base-path <string>] [--ca-sha256 <string>] [--certificate-authorities <string>] [--daemon-timeout <duration>] [--delay-enroll] [--elastic-agent-cert <string>] [--elastic-agent-cert-key <string>] [--delay-enroll] [--force] [--header <strings>] [--help] [--insecure ] [--non-interactive] [--proxy-disabled] [--proxy-header <strings>] [--proxy-url <string>] [--staging <string>] [--tag <string>] [global-flags]要将
elastic-agent作为服务安装,请将其注册到Fleet中,并在elastic-agent服务旁边启动Fleet server进程:elastic-agent install --fleet-server-es <string> --fleet-server-service-token <string> [--fleet-server-service-token-path <string>] [--base-path <string>] [--ca-sha256 <string>] [--certificate-authorities <string>] [--daemon-timeout <duration>] [--delay-enroll] [--elastic-agent-cert <string>] [--elastic-agent-cert-key <string>] [--delay-enroll] [--fleet-server-cert <string>] [--fleet-server-cert-key <string>] [--fleet-server-cert-key-passphrase <string>] [--fleet-server-client-auth <string>] [--fleet-server-es-ca <string>] [--fleet-server-es-ca-trusted-fingerprint <string>] [--fleet-server-es-cert <string>] [--fleet-server-es-cert-key <string>] [--fleet-server-es-insecure] [--fleet-server-host <string>] [--fleet-server-insecure-http] [--fleet-server-policy <string>] [--fleet-server-port <uint16>] [--fleet-server-timeout <duration>] [--force] [--header <strings>] [--help] [--non-interactive] [--proxy-disabled] [--proxy-header <strings>] [--proxy-url <string>] [--staging <string>] [--tag <string>] [--url <string>] [global-flags][--fleet-server-cert <string>]: 如果没有指定fleet-server-cert*标志,Elastic Agent会自动生成一个带有机器主机名的自签名证书。使用自签名证书注册到Fleet server的远程弹性代理必须指定--insecure标志。[--fleet-server-es-ca <string>],[--fleet-server-es-ca-trusted-fingerprint <string>]: 在Elasticsearch端使用自签名证书时需要。[--url <string>]: 使用自定义证书注册fleet server时必需。该URL必须与用于生成--fleet-server-cert指定的证书的DNS名称匹配。
2.2.4 elastic-agent 状态命令
elastic-agent run: 启动elastic-agent服务。-c <string>: 指定默认的配置文件。如果没有特意指定,Elastic Agent将使用{path.config}/elastic-agent.yml.--e: 日志传输到stderr并禁用syslog/file输出。--environment <environmentVar>: 指定agent运行时的环境变量--path.config <string>: 指定elastic agent配置文件的目录--path.home <string>: Elastic Agent的根目录path.home确定配置文件和数据目录的位置。 如果未指定,Elastic Agent将使用当前工作目录。--path.logs <string>:elastic agent的日志输出路径。
elastic-agent run -c myagentconfig.ymlelastic-agent status: 返回正在运行的elastic agent守护进程以及elastic agent中每个进程的当前状态。fleet server的最后一个已知状态也会返回。输出选项控制信息的详细程度和格式。#指定输出格式, json yaml human root@ubuntu2204:~# elastic-agent status --output yaml root@ubuntu2204:~# elastic-agent status ┌─ fleet │ └─ status: (HEALTHY) Connected └─ elastic-agent └─ status: (HEALTHY) Runningelastic-agent restart: 重新启动当前正在运行的Elastic Agent守护进程。
2.2.5 elastic-agent 其他命令
elastic-agent uninstall从系统中永久卸载
Elastic Agent。 您必须以root用户(或Windows上的管理员)的身份运行此命令才能删除文件elastic-agent uninstallelastic-agent inspect显示当前弹性代理配置。 如果未指定任何参数,则显示完整的
elastic agent配置信息。elastic-agent inspectelastic-agent upgrade将当前运行的
Elastic Agent升级到指定的版本。这只能用于在独立模式下运行的代理。加入Fleet server的agent应通过Fleet升级。elastic-agent upgrade <version> [--source-uri <string>] [--help] [flags]--source-uri <string>: 要从中下载新版本的源URI。默认情况下,Elastic Agent使用Elastic Artifacts URL。--skip-verify: 跳过软件包验证--pgp-path <string>: 使用本地存储的PGP密钥副本验证升级包。--pgp-uri <string>: 使用指定的在线PGP密钥验证升级包
elastic-agent upgrade 7.10.1elastic-agent logs: 查看正在运行的Elastic Agent的日志。elastic-agent logs [--follow] [--number <int>] [--component <string>] [--no-color] [--help] [global-flags]--followor-f: 跟踪日志更新,直到命令被中断(例如使用'Ctrl-C')。--number <int>or-n <int>: 要打印多少行日志。如果启用了--follow日,会影响初始输出。--component <string>or-C <string>: 根据组件名称过滤日志。--no-color: 根据每个条目的日志级别禁用颜色。
elastic-agent logs -n 100 -f -C "system/metrics-default"elastic-agent version: 查看Elastic Agent的版本信息。elastic-agent version
3. 常见使用
3.1 定制的日志摄入到 Elasticsearch
在集成中 , 添加
custom logs集成

配置
custom logs集成

手动创建json文件
root@ubuntu2204:~# cat access.log > /var/log/json.log查看导入日志

显然, 我们可以看到
message字段显示的就是我们之前在日志中的信息。它是一个JSON格式的信息。这个虽然好, 但是它不是结构化的日志信息。之后使用
ingest pipeline实现将信息格式化为json格式POST _ingest/pipeline/_simulate { "pipeline": { "description": "structure a JSON format message", "processors": [ { "json": { "field": "message", "target_field": "json_fields" } } ] }, "docs": [ { "_source": { "message": "{\"user_name\": \"arthur\", \"id\": 42, \"verified\": false, \"event\": \"logged_in\"}" } } ] }在上面, 我们通过
_simulate来测试我们的pipeline:{ "docs": [ { "doc": { "_index": "_index", "_id": "_id", "_source": { "json_fields": { "verified": false, "id": 42, "event": "logged_in", "user_name": "arthur" }, "message": """{"user_name": "arthur", "id": 42, "verified": false, "event": "logged_in"}""" }, "_ingest": { "timestamp": "2022-07-01T00:03:30.040008Z" } } } ] }如上所示, 我们的
josn processor能够非常出色地完成message的结构化, 并把结构化的信息保存于一个叫做json_fields的字段中。在完成上面的模拟后, 我们使用如下的命令来创建一个pipeline:PUT _ingest/pipeline/message_structure { "description": "structure a JSON format message", "processors": [ { "json": { "field": "message", "target_field": "json_fields" } } ] }在上面, 我们创建了一个叫做
message_structure的ingest pipeline。我们接下来展示如何在
custom logs里来使用这个ingest pipeline。我们重新打开log-1集成:这里的
custom configurations中, 是直接按照filebeat的input的log插件配置一样
在上面, 选择
nginx_json为dataset的名称, 那么最终形成的索引名称将会是logs-nginx_json-*。我们也可以设定自己想要的 dataset, 比如my-app。如上所示, 我们在Custom congfiguration里填写pipeline的定义。点击上面的Save integration:
3.2 配置Beats采集定制日志
我们直接在这个 Fleet Server Policy 里添加一个叫做 custom log 的集成:





elastic-Agent将运行一个 Filebeat 实例, 因此这些可选配置的所有文档都是 Filebeat 的文档。 Custom Log 集成在后台使用 Log input, 因此我们感兴趣的文档是:
Processors: 顾名思义, 它们可以丰富、修改我们的事件。Custom configurations: 好吧, 它们是我们输入的自定义配置。
在上面, 我们需要了解如下两个链接的文档:
Procsessors 我们将需要两个处理器:
timestamp: 它将解析我们的时间戳并在最终事件上正确设置它drop_fields: 这个是可选的, 但如果我们已经在事件中正确设置了@timestamp, 就不需要保留时间字段。- timestamp: field: time layouts: - '2006-01-02T15:04:05Z07:00' test: - '2022-08-31T12:07:32+02:00' - drop_fields: fields: - time这里唯一需要注意的是, 时间戳处理器仍处于测试阶段, 但它足够稳定, 可以使用。 无论如何, 在使用它时请记住这一点。
Custom configuration 自定义配置是关于告诉日志输入我们希望它将数据解析为 JSON, 覆盖事件中已经存在的任何键, 如果有错误, 向最终事件添加一个错误键, 这样我们就可以知道发生了什么。
json:
keys_under_root: true
add_error_key: true
message_key: message
overwrite_keys: true在上面, 我们使用 Filebeat 的 processors 来对数据进行加工。
Mappings 让我们确保 Elasticsearch 正确理解我们的数据, 因为我们需要为我们的数据设置映射。
前往 Fleet > Agent Policies, 单击 policy 名称, 然后单击 integration 名称。 在下一个屏幕上, 转到 Change defaults > Advanced options, 在最底部有 Mappings 部分。


然后点击 Next, 直到 Review 这一步, 再点击 Save component template。
前往 Discover, 搜索一些数据, 展开其中一个文档, 你将看到正确映射的字段。


我们甚至可以针对 status_code 进行一个搜索:
3.3 使用 Elastic Agent 来收集定制的 TCP 日志
添加对应集成



我们保存当前的配置



从上面的配置中, 我们可以看出来, 我们的
tcp-1集成收集localhost:9900端口的TCP日志并传入到Elasticsearch中。经过上面的配置后, 我们可以使用如下的命令来检查当前
Ubuntu机器上的9900端口的使用情况:sudo netstat -tulpn | grep LISTEN | grep 9900liuxg@liuxgu:~$ sudo netstat -tulpn | grep LISTEN | grep 9900 [sudo] password for liuxg: tcp 0 0 127.0.0.1:9900 0.0.0.0:* LISTEN 10368/filebeat我们可以看到当前的
9900是正在使用的。为了能够测试这个集成 , 我们在
Ubuntu机器的一个目录中创建如下的一个logs文件。它是一个典型的Syslog日志:liuxg@liuxgu:~/data/customtcplogs$ pwd /home/liuxg/data/customtcplogs liuxg@liuxgu:~/data/customtcplogs$ ls logs liuxg@liuxgu:~/data/customtcplogs$ cat logs May 4 00:10:36 liuxg xpcproxy[69746]: libcoreservices: _dirhelper_userdir: 557: bootstrap_look_up returned (ipc/send) invalid destination port我们接下去
Kibana查看一下:
我们可以看到在过去
15分钟里有一个文档。点击详情:
从上面的
message字段中 , 我们可以看出来我们发送来的一个日志信息。它就是我们之前发送的。我们也可以通过如下的命令来发送信息:

在上面 , 我们使用
telnet来发送一个信息到TCP端口9900。同样 , 我们再去Kibana进行查看:
这次 , 我们可以看到有两条信息发送进来了。
从上面显示的信息 , 我们看出来
message字段还是一个非结构化的字段。它不便于我们对这个信息的分析。为此 , 我们希望使用ingest pipeline来对这个信息进行结构化。为了下面的步骤的进行 , 我们先使用如下的命令来删除已经写入的文档:POST .ds-logs-tcp.generic-*/_delete_by_query { "query": { "match": { "data_stream.dataset": "tcp.generic" } } }结构化输入的信息
首先,我们使用
ingest pipeline API来测试我们的pipelines:POST _ingest/pipeline/_simulate { "pipeline": { "processors": [ { "grok": { "field": "message", "patterns": [ "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:[%{POSINT:syslog_pid}])?:%{GREEDYDATA:syslog_message}" ] } } ] }, "docs": [ { "_source": { "message": "May 4 00:10:36 liuxg xpcproxy[69746]: libcoreservices: _dirhelper_userdir: 557: bootstrap_look_up returned (ipc/send) invalid destination port" } } ] }我们使用上面的测试命令,可以看到如下的结果:
{ "docs": [ { "doc": { "_index": "_index", "_id": "_id", "_version": "-3", "_source": { "syslog_program": "xpcproxy[69746]", "message": "May 4 00:10:36 liuxg xpcproxy[69746]: libcoreservices: _dirhelper_userdir: 557: bootstrap_look_up returned (ipc/send) invalid destination port", "syslog_hostname": "liuxg", "syslog_message": " libcoreservices: _dirhelper_userdir: 557: bootstrap_look_up returned (ipc/send) invalid destination port", "syslog_timestamp": "May 4 00:10:36" }, "_ingest": { "timestamp": "2022-09-21T09:23:14.824894Z" } } } ] }很显然,我们可以看到结构化的字段,比如
syslog_program,syslog_hostname等。当然,我们还可以使用另外一个processor来删除message这个字段。我们接下来创建一个叫做
structure_message的pipeline:PUT _ingest/pipeline/structure_message { "description": "This is used to structure messages", "processors": [ { "grok": { "field": "message", "patterns": [ "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:[%{POSINT:syslog_pid}])?:%{GREEDYDATA:syslog_message}" ] } } ] }我们接下来重新来编辑之前的
integration:




这样,我们就更新成功了。
接下来,我们再次使用上面的命令来写入一个文档:
head -n 1 logs| nc localhost 9900liuxg@liuxgu:~/data/customtcplogs$ pwd /home/liuxg/data/customtcplogs liuxg@liuxgu:~/data/customtcplogs$ head -n 1 logs | nc localhost 9900我们回到
Kibana的界面:
我们可以看到有一个文档被写入进来了。我们点击上面文档的详情:

参考链接
Observability: 运用 Fleet 来轻松地导入 Nginx 日志及指标_elastic agents 开源?-CSDN博客
Observability: 使用 Elastic Agent 来摄入日志及指标 - Elastic Stack 8.0-CSDN博客
Observability: 如何使用 Elastic Agents 把定制的日志摄入到 Elasticsearch 中_epr.elastic.co网络隔离-CSDN博客
Elasticsearch: 如何在 Elastic Agents 中配置 Beats 来采集定制日志_elastic_agen-CSDN博客
Observability: 日志监控和非结构化日志数据, 超越 tail -f_日志 结构化 非结构化-CSDN博客
Observability: 使用 Elastic Agent 来收集定制的 TCP 日志-CSDN博客