纯文本应用程序日志
Elastic Stack Serverless
采集和解析来自任何编程语言或框架的纯文本日志(包括现有日志),无需修改您的应用程序或其配置。
纯文本日志需要一些结构化日志不需要的额外设置
- 要有效地搜索、过滤和聚合,您需要使用采集管道来解析纯文本日志,以提取结构化字段。解析基于日志格式,因此您可能需要为不同的应用程序维护不同的设置。
- 要关联纯文本日志,您需要将 ID 注入到日志消息中,并使用采集管道解析它们。
要采集、解析和关联纯文本日志
- 使用 Filebeat 或 Elastic Agent 采集纯文本日志,并在使用采集管道进行索引之前解析它们。
- 使用 APM Agent 关联纯文本日志。
- 在 Discover 中查看日志
使用以下任何一种传送工具将应用程序日志发送到 Elasticsearch
- Filebeat 一个轻量级的数据传送器,将日志数据发送到 Elasticsearch。
- Elastic Agent 一个用于日志、指标、安全数据和威胁防御的单一代理。与 Fleet 结合使用,您可以直接从 Kibana 集中管理 Elastic Agent 策略和生命周期。
按照以下步骤使用 Filebeat 采集应用程序日志。
通过运行与您的系统一致的命令,在您要监视的服务器上安装 Filebeat
curl -L -O https\://artifacts.elastic.co/downloads/beats/filebeat/filebeat-9.0.0-amd64.deb
sudo dpkg -i filebeat-9.0.0-amd64.deb
curl -L -O https\://artifacts.elastic.co/downloads/beats/filebeat/filebeat-9.0.0-x86_64.rpm
sudo rpm -vi filebeat-9.0.0-x86_64.rpm
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-9.0.0-darwin-x86_64.tar.gz
tar xzvf filebeat-9.0.0-darwin-x86_64.tar.gz
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-9.0.0-linux-x86_64.tar.gz
tar xzvf filebeat-9.0.0-linux-x86_64.tar.gz
将 zip 文件的内容提取到
C:\Program Files
中。将 *filebeat-9.0.0-windows-x86_64* 目录重命名为 *Filebeat*。
以管理员身份打开 PowerShell 提示符(右键单击 PowerShell 图标并选择**以管理员身份运行**)。
从 PowerShell 提示符中,运行以下命令以将 Filebeat 安装为 Windows 服务
PS > cd 'C:\Program Files\Filebeat' PS C:\Program Files\{filebeat}> .\install-service-filebeat.ps1
如果您的系统上禁用了脚本执行,您需要为当前会话设置执行策略以允许脚本运行。例如:PowerShell.exe -ExecutionPolicy UnRestricted -File .\install-service-filebeat.ps1
。
使用 API 密钥连接到 Elasticsearch 以设置 Filebeat。在 filebeat.yml
文件中设置以下信息
output.elasticsearch:
hosts: ["your-projects-elasticsearch-endpoint"]
api_key: "id:api_key"
将
hosts
设置为您的部署的 Elasticsearch 端点。从**帮助菜单()→ 连接详细信息**复制 Elasticsearch 端点。例如,
https://my-deployment.es.us-central1.gcp.cloud.es.io:443
。从**开发者工具**,运行以下命令以创建一个 API 密钥,该密钥授予
cluster
和filebeat-*
索引的manage
权限,使用POST /_security/api_key
{ "name": "filebeat_host001", "role_descriptors": { "filebeat_writer": { "cluster": ["manage"], "index": [ { "names": ["filebeat-*"], "privileges": ["manage", "create_doc"] } ] } } }
有关更多信息,请参阅使用 API 密钥授予访问权限。
将以下配置添加到您的 filebeat.yaml
文件以开始收集日志数据。
filebeat.inputs:
- type: filestream
enabled: true
paths: /path/to/logs.log
- 从活动的日志文件中读取行。
- 您希望 Filebeat 抓取和获取日志的路径。
Filebeat 附带用于解析、索引和可视化您的数据的预定义资产。要加载这些资产
从 Filebeat 安装目录,通过运行与您的系统一致的命令来设置索引模板
./filebeat setup -e
./filebeat setup -e
PS > .\filebeat.exe setup -e
filebeat setup -e
filebeat setup -e
从 Filebeat 安装目录,通过运行与您的系统一致的命令来启动 filebeat
sudo service filebeat start
如果您使用 init.d
脚本来启动 Filebeat,则无法指定命令行标志(请参阅命令参考)。要指定标志,请在前台启动 Filebeat。
另请参阅Filebeat 和 systemd。
sudo service filebeat start
如果您使用 init.d
脚本来启动 Filebeat,则无法指定命令行标志(请参阅命令参考)。要指定标志,请在前台启动 Filebeat。
另请参阅Filebeat 和 systemd。
./filebeat -e
./filebeat -e
PS C:\Program Files\filebeat> Start-Service filebeat
默认情况下,Windows 日志文件存储在 C:\ProgramData\filebeat\Logs
中。
使用采集管道将日志内容解析为结构化的、Elastic Common Schema (ECS) 兼容的字段。
创建一个采集管道,该管道定义一个 dissect 处理器,以从您的日志消息中提取结构化的 ECS 字段。在您的项目中,导航到**开发者工具**并使用类似于以下示例的命令
PUT _ingest/pipeline/filebeat* <1>
{
"description": "Extracts the timestamp log level and host ip",
"processors": [
{
"dissect": {
"field": "message",
"pattern": "%{@timestamp} %{log.level} %{host.ip} %{message}"
}
}
]
}
_ingest/pipeline/filebeat*
:管道的名称。更新管道名称以匹配您的数据流的名称。有关更多信息,请参阅数据流命名方案。processors.dissect
:添加一个 dissect 处理器,以从您的日志消息中提取结构化的字段。field
:您要从中提取数据的字段,在本例中为message
。pattern
:日志数据中元素的模式。该模式因您的日志格式而异。%{@timestamp}
是必需的。%{log.level}
、%{host.ip}
和%{{message}}
是常见的 ECS 字段。此模式将匹配以下格式的日志文件:2023-11-07T09:39:01.012Z ERROR 192.168.1.110 Server hardware failure detected.
有关使用采集管道解析您的日志数据的更多信息,请参阅提取结构化字段。
创建管道后,在 filebeat.yml
文件中指定 filebeat 的管道
output.elasticsearch:
hosts: ["your-projects-elasticsearch-endpoint"]
api_key: "id:api_key"
pipeline: "your-pipeline"
- 将
pipeline
输出和您的管道的名称添加到输出。
按照以下步骤使用 Elastic Agent 和 Fleet 采集并集中管理您的日志。
要将自定义日志集成添加到您的项目
- 在主菜单中查找**集成**,或使用全局搜索字段。
- 在搜索栏中键入
custom
并选择**自定义日志**。 - 单击**添加自定义日志**。
- 单击页面底部的**安装 Elastic Agent**,然后按照您系统的说明安装 Elastic Agent。
- 安装 Elastic Agent 后,从**添加自定义日志集成**页面配置集成。
- 为您的集成提供一个有意义的名称和描述。
- 添加**日志文件路径**。例如,
/var/log/your-logs.log
。 - 为您的代理策略命名。代理策略定义您的 Elastic Agent 收集的数据。
- 保存您的集成以将其添加到您的部署。
要聚合或搜索纯文本日志中的信息,请将采集管道与您的集成一起使用,以将日志内容解析为结构化的、Elastic Common Schema (ECS) 兼容的字段。
从自定义日志集成中,选择**集成策略**选项卡。
选择您在上一步中创建的集成策略。
单击**更改默认值 → 高级选项**。
在**采集管道**下,单击**添加自定义管道**。
创建一个包含 dissect 处理器 的采集管道,以从您的日志消息中提取结构化字段。
单击**导入处理器**并添加类似于以下示例的 JSON
{ "description": "Extracts the timestamp log level and host ip", "processors": [ { "dissect": { "field": "message", "pattern": "%{@timestamp} %{log.level} %{host.ip} %{message}" } } ] }
processors.dissect
:添加一个 dissect 处理器,以从您的日志消息中提取结构化的字段。field
:您要从中提取数据的字段,在本例中为message
。pattern
:日志数据中元素的模式。该模式因您的日志格式而异。%{@timestamp}
、%{log.level}
、%{host.ip}
和%{{message}}
是常见的 ECS 字段。此模式将匹配以下格式的日志文件:2023-11-07T09:39:01.012Z ERROR 192.168.1.110 Server hardware failure detected.
单击**创建管道**。
保存并部署您的集成。
将您的应用程序日志与跟踪事件关联以
- 查看日志的上下文以及用户提供的参数
- 查看属于特定跟踪的所有日志
- 在调试应用程序问题时轻松地在日志和跟踪之间移动
日志关联在两个级别上工作
- 在服务级别:使用
service.name
、service.version
和service.environment
进行注释,使您可以将日志与 APM 服务链接 - 在跟踪级别:使用
trace.id
和transaction.id
进行注释,使您可以将日志与跟踪链接
了解有关在特定于代理的采集指南中关联纯文本日志的信息
要查看 Filebeat 采集的日志,请从主菜单转到**Discover**,并创建一个基于 filebeat-*
索引模式的数据视图。您还可以从**数据视图**菜单中选择**所有日志**,因为它默认包含 filebeat-*
索引模式。有关更多信息,请参阅创建数据视图。