作者:MeshCloud脉时云公有云架构师许多杰
引言
Ops Agent 在 Google Cloud Compute Engine 中将日志记录和指标组合到单个代理中,提供了用于收集日志和指标的基于 YAML 的配置,并具有高吞吐量日志记录功能,并且可以配置 Ops Agent 以从受支持的第三方应用收集日志和指标。
整体架构
技术简介
将 Ops Agent下载到 Compute Engine中,采用Ops Agent 自定义配置的方式,修改配置文件以覆盖默认的内置配置文件。在Ops Agent配置文件中通过手动设置receivers、processors和service,以达到我们收集指定第三方应用log和metric的目的。
Ops agent 自定义配置介绍
- 配置模型
Ops Agent 使用内置默认配置;您无法直接修改此内置配置。但是,您可以创建包含替换内容的文件,代理重启时这些替换内容会与内置配置合并。
配置的构成要素如下:
- receivers:此元素描述代理要收集的信息。
- processors:此元素描述代理可以如何修改收集的信息。
- service:此元素将接收器和处理器连接在一起,以创建数据流,称为“流水线”。service 元素包含一个 pipelines 元素,后者可包含多个流水线。
内置配置由这些元素组成,我们可以使用相同的元素来替换该内置配置。
每个接收器和每个处理器都可以用于多个流水线。
- 内置配置
Ops Agent 的内置配置定义了日志和指标的默认收集。下面显示了适用于 Linux 和 Windows 的内置配置:默认情况下,Ops Agent 会收集基于文件的 syslog 日志和主机指标。
logging:
receivers:
syslog:
type: files
include_paths:
- /var/log/messages
- /var/log/syslog
service:
pipelines:
default_pipeline:
receivers: [syslog]
metrics:
receivers:
hostmetrics:
type: hostmetrics
collection_interval: 60s
processors:
metrics_filter:
type: exclude_metrics
metrics_pattern: []
service:
pipelines:
default_pipeline:
receivers: [hostmetrics]
processors: [metrics_filter]
- 用户指定的配置
如需替换内置配置,您需要向用户配置文件添加新配置元素。将您的 Ops Agent 配置放在以下文件中:
- 对于 Linux:/etc/google-cloud-ops-agent/config.yaml。
- 对于 Windows:C:\Program Files\Google\Cloud Operations\Ops Agent\config\config.yaml。
用户指定的配置将在代理重启时与内置配置合并。
如需替换内置接收器、处理器或流水线,请使用相同的标识符在 config.yaml 文件中重新定义它。
例如,指标的内置配置包含一个指定 60 秒收集时间间隔的 hostmetrics 接收器。如需将主机指标的收集时间间隔更改为 30 秒,请在 config.yaml 文件中添加名为 hostmetrics 的指标接收器,并将 collection_interval 值设置为 30 秒,如以下示例所示:
metrics:
receivers:
hostmetrics:
type: hostmetrics
collection_interval: 30s
- 日志记录接收器
receivers 元素包含一组接收器,每个接收器由有 RECEIVER_ID 标识,,并包含一个 type 元素。接收器描述如何检索日志;例如,通过跟踪文件、使用 TCP 端口或者从 Windows 事件日志检索。
- 日志记录处理器
可选的 processors 元素包含一组处理指令,每个指令均由 PROCESSOR_ID 标识,并包含一个 type 元素。处理器描述如何操作接收器收集的信息。
- parse_json:解析 JSON 格式的结构化日志。
- parse_multiline:解析多行日志。(仅 Linux)
- parse_regex:通过正则表达式模式解析文本格式日志,将其转换为 JSON 格式的结构化日志。
- 日志记录服务
日志记录服务可自定义 Ops Agent 自己的日志的详细程度,并将日志记录接收器和处理器同时连接到流水线中。service 部分包含两个元素:log_level 和 pipelines。
Ops Agent & Nginx配置实践
- 概述
nginx 集成会收集连接指标和访问日志。连接指标可捕获连接的当前状态:活动、读取或等待。系统会根据连接详情解析访问日志,其中包括映射到请求、客户端、服务器和消息的字段。
- 前提
必须在 nginx 配置文件中启用 stub_status 模块,以设置在本地可访问的网址,例如,为状态页面设置
http://www.example.com/status。
server {
listen 80;
server_name 127.0.0.1;
location /status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
location / {
root /dev/null;
}
}
- 为 nginx 配置 Ops Agent
以下命令会创建配置文件,以收集和注入 nginx 的日志和指标,并在 Linux 上重启 Ops Agent。
sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
logging:
receivers:
nginx_access:
type: nginx_access
include_paths:
- /var/log/nginx/access.log
nginx_error:
type: nginx_error
include_paths:
- /var/log/nginx/error.log
processors:
parse_json:
type: parse_json
set_http_request:
type: modify_fields
fields:
httpRequest.status:
move_from: jsonPayload.http_status
type: integer
httpRequest.requestUrl:
move_from: jsonPayload.path
httpRequest.referer:
move_from: jsonPayload.referer
omit_if: jsonPayload.referer = "-"
service:
pipelines:
nginx:
receivers:
- nginx_access
- nginx_error
processors: [parse_json, set_http_request]
metrics:
receivers:
nginx:
type: nginx
stub_status_url: http://127.0.0.1:80/status
service:
pipelines:
nginx:
receivers:
- nginx
EOF
sudo service google-cloud-ops-agent restart
- 测试验证
重启代理后,通过测试请求验证,在 Cloud Logging中观察获取到的日志
Ops Agent & MySQL配置实践
MySQL 集成会收集与 InnoDB、缓冲池和各种其他操作相关的性能指标。它还会收集常规、错误和慢查询日志,并将其解析为 JSON 载荷。错误日志会被解析为其错误代码和子系统。慢查询日志会被解析为描述查询性能的键值对,包括查询时间和检查的行。
- 配置示例
sudo tee /etc/google-cloud-ops-agent/config.yaml > /dev/null << EOF
logging:
receivers:
mysql_error:
type: mysql_error
mysql_general:
type: mysql_general
mysql_slow:
type: mysql_slow
service:
pipelines:
mysql:
receivers:
- mysql_error
- mysql_general
- mysql_slow
metrics:
receivers:
mysql:
type: mysql
service:
pipelines:
mysql:
receivers:
- mysql
EOF
sudo service google-cloud-ops-agent restart
- 以mysql_general 为例,日志包含 LogEntry 中的以下字段:
字段 | 类型 | 说明 |
jsonPayload.tid | 数字 | 日志源自的线程 ID |
jsonPayload.command | 字符串 | 要记录的数据库操作的类型 |
jsonPayload.message | 字符串 | 数据库操作的日志 |
timestamp | 字符串 (Timestamp) | 记录条目的时间 |
- Insert 测试
Ops Agent & Apache Kafka配置实践
Apache Kafka 集成会收集代理指标,例如主题请求数和失败数。它还会监控代理上的分区。此外,该集成还会收集 Kafka 日志并将其解析为 JSON 载荷。结果将包含日志记录器、级别和消息字段。
- 配置示例
logging:
receivers:
kafka:
type: kafka
include_paths:
- /tmp/kafka-logs/*
service:
pipelines:
kafka:
receivers:
- kafka
metrics:
receivers:
kafka:
type: kafka
service:
pipelines:
kafka:
receivers:
- kafka
- 记录的内容
kafka 日志的 logName 派生自配置中指定的接收器 ID。LogEntry 中的详细字段如下所示。
字段 | 类型 | 说明 |
jsonPayload.source | 字符串 | 发起日志的模块和/或线程。 |
jsonPayload.logger | 字符串 | 发起日志的日志记录器的名称。 |
jsonPayload.message | 字符串 | 日志消息,包括详细的堆栈轨迹(如果提供)。 |
severity | 字符串 (LogSeverity) | 日志条目级别(已转换)。 |
timestamp | 字符串 (Timestamp) | 收到请求的时间。 |
任何空白或缺失的字段都不会出现在日志条目中。
- 测试
- 发布消息测试
- Cloud Logging 查看日志
常见问题
- Ops Agent 内置的默认配置有什么功能?
日志记录方面:无需任何设置即可收集的标准系统日志(用于 Linux 的 /var/log/syslog 和 /var/log/messages,以及 Windows 事件日志)。
监控方面:无需任何设置即可收集的系统指标。